免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 14265 | 回复: 10

PostgreSQL入门,V0.9.3+++,补充中,未定型。随时更新。 [复制链接]

论坛徽章:
0
发表于 2004-01-25 17:20 |显示全部楼层
实践:Typhoon.Free.Wolf
声明:不承担由此产生的不良后果
版本:V0.9.3+++ 2004-03-30-01
本文(不包含链接)可以以非商业目的任意转载。
下面是我安装和初步试用PostgreSQL的经历,集中在这里。


安装篇


我下载了PostgreSQL7.3.4,是源代码,保存为“/opt/lin_app02/tmp/download/PostgreSQL/R1/postgresql-7.3.4.tar.gz”。下载后,我在这个目录下开了终端(rxvt),执行命令:

  1. [root@TFW-RFL40F R1]# tar zxvfp ./postgresql-7.3.4.tar.gz
复制代码

得到一个目录“postgresql-7.3.4”。

  1. [root@TFW-RFL40F R1]# cd postgresql-7.3.4
  2. [root@TFW-RFL40F postgresql-7.3.4]# ./configure --prefix=/opt/lin_app02/postgres --enable-locale --enable-multibyte --with-perl --with-odbc --with-tcl
复制代码

......
对上面一步的说明:
./configure
configure不加任何选项,系统将按默认的设置安装postgresql,查看configre的相关选项可以使用:configure -help

一些最常用的如下:

--prefix=BASEDIR
为安装 PostgreSQL 选择一个不同的基础路径。缺省是 /usr/local/pgsql。

--enable-locale
如果你想用本地化支持。

--enable-multibyte
允许使用多字节字符编码。这个选项主要用于象日语,韩语或中文这样的语言。

--with-perl
添加 Perl 模块接口。请注意 Perl 接口将安装到 Perl 模块的常用位置(典型的是在 /usr/lib/perl),所以要成功使用这个选项,你必须有 root 权限。

--with-odbc
制作 ODBC 驱动包。

--with-tcl
制作 Tcl/Tk 需要的接口库和程序,包括 libpgtcl,pgtclsh,和 pgtksh。

这些编译参数告诉编译器如何编译PostgreSQL:

  1. [root@TFW-RFL40F postgresql-7.3.4]# make
复制代码

......

  1. [root@TFW-RFL40F postgresql-7.3.4]# make install
复制代码

......
中间不报错的话,安装就完成了。


初始化


创建一个存放数据库文件的目录:

  1. [root@TFW-RFL40F postgresql-7.3.4]# mkdir /opt/lin_app02/postgre-data
复制代码


下面要设置环境变量。由于安全原因,PostgreSQL是不让“root”等特权用户用的。为了方便,我就用日常工作的“typhoon”身份管理PostgreSQL,但是建议大家为管理PostgreSQL新创建一个用户。为了方便,我直接修改了“/etc/profile”,但是建议修改个人主目录下的“.bash_profile”。

我在环境变量文件里添加了如下内容:

  1. ########################################
  2. #        PostgreSQL
  3. LD_LIBRARY_PATH=/opt/lin_app02/postgres/lib
  4. export LD_LIBRARY_PATH
  5. PGLIB=/opt/lin_app02/postgres/lib
  6. PGDATA=/opt/lin_app02/postgre-data
  7. PATH=$PATH:/opt/lin_app02/postgres/bin
  8. MANPATH=$MANPATH:/opt/lin_app02/postgres/man
  9. export PGLIB PGDATA PATH MANPATH
  10. ########################################
复制代码

看着挺麻烦,其实就是下面的格式:
LD_LIBRARY_PATH=<--prefix所指的地方>;/lib
export LD_LIBRARY_PATH
PGLIB=<--prefix所指的地方>;/lib
PGDATA=<你放数据库文件的地方>;
PATH=$PATH:<--prefix所指的地方>;/bin
MANPATH=$MANPATH:<--prefix所指的地方>;/man
export PGLIB PGDATA PATH MANPATH

刚才提到的那些目录都是在“root”身份下创建的,要让它们能为“typhoon”所用,还得改权限:

  1. [root@TFW-RFL40F postgresql-7.3.4]# chown -R typhoon.typhoon /opt/lin_app02/postgre*
复制代码

即:
chown -R <ostgreSQL管理员所在组>;.<ostgreSQL管理员用户名>; <--prefix所指的地方>;
chown -R <ostgreSQL管理员所在组>;.<ostgreSQL管理员用户名>; <你放数据库文件的地方>;

然后我关闭了X,并注销,再重新登录,以使环境变量生效。


  1. [typhoon@TFW-RFL40F typhoon]$ initdb
复制代码

这个命令用来初始化PostgreSQL。请确保执行前你放数据库文件的地方是空的。

初始化后会自动创建数据库的超级用户,用户名与安装、执行初始化的操作系统用户同名。可能还会自动创建一个与用户名同名的数据库。在我这里就是用户“typhoon”和数据库“typhoon”。直接执行“<--prefix所指的地方>;/bin/psql”就能登录进去。“\q”可以退回操作系统的shell。如果这个数据库没有自动生成,请执行“<--prefix所指的地方>;/bin/createdb [用户名]”,即以你的用户名创建一个数据库。这个数据库就相当于你的“Home”,没这个数据库,做某些事情就不方便。


启停方法



  1. [typhoon@TFW-RFL40F typhoon]$ postmaster -i -D ./postgre-data/&
复制代码

postmaster -i -D <database-path>;&
......
这是开始数据库系统的服务。后面那个“&”最好带上,否则,......:-D

上面说的启动方法是正规方法,PostgreSQL还提供了封装的控制脚本“<--prefix所指的地方>;/bin/pg_ctl”。

  1. [typhoon@TFW-RFL40F typhoon]$ pg_ctl -l ./123/pg.log start
复制代码

如果有“-l 文件名”这个参数,所有的错误都会被记录到这个文件里。


  1. [typhoon@TFW-RFL40F typhoon]$ pg_ctl stop
复制代码

停止服务。既然是停止,就别管什么记录文件了。


  1. [typhoon@TFW-RFL40F typhoon]$ pg_ctl -l ./123/pg.log restart
复制代码

相当于先“stop”再“start”。


  1. [typhoon@TFW-RFL40F typhoon]$ pg_ctl reload
复制代码

如果对配置文件做了修改,想不中断服务而立即生效,就这样。

注意:PostgreSQL管理员最好从“Login:”、xdm或kdm登录系统,因为如果“su”过去操作将不能正常执行。

和大家共同进步。下面是我安装时参考的帖子:
http://www.freelamp.com/new/publish/1022414614/index_html
http://chinaunix.net/jh/18/546.html
http://chinaunix.net/jh/18/548.html
我四处查找链接里所说的“egcs-c++”,也没下载到,后来才知道“egcs-c++”已经被整合进高版本的“gcc”里了。我的“gcc”是3.2的。大家的“gcc”如果高于2.8,也就不要再到处找“egcs-c++”了。


安全管理


初始化后,在数据库目录里会有这样两个文件:“postgresql.conf”和“pg_hba.conf”。

修改“postgresql.conf”第30行左右的地方为顶格“tcpip_socket = true”,以允许网络访问。

“pg_hba.conf”,基于主机的访问控制(Host Based Access)。左边有“#”的内容都是被注释掉的,起说明或参考等作用。

我以我现在的文件为例做说明(里面的中文为我的说明):

  1. # PostgreSQL Client Authentication Configuration File
  2. # ===================================================
  3. #
  4. # Refer to the PostgreSQL Administrator's Guide, chapter "Client
  5. # Authentication" for a complete description.  A short synopsis
  6. # follows.
  7. #
  8. # This file controls: which hosts are allowed to connect, how clients
  9. # are authenticated, which PostgreSQL user names they can use, which
  10. # databases they can access.  Records take one of three forms:
  11. #
  12. # local    DATABASE  USER  METHOD  [OPTION]
  13. # host     DATABASE  USER  IP-ADDRESS  IP-MASK  METHOD  [OPTION]
  14. # hostssl  DATABASE  USER  IP-ADDRESS  IP-MASK  METHOD  [OPTION]
  15. #
  16. # (The uppercase quantities should be replaced by actual values.)
  17. # DATABASE can be "all", "sameuser", "samegroup", a database name (or
  18. # a comma-separated list thereof), or a file name prefixed with "@".
  19. # USER can be "all", an actual user name or a group name prefixed with
  20. # "+" or a list containing either.  IP-ADDRESS and IP-MASK specify the
  21. # set of hosts the record matches.  METHOD can be "trust", "reject",
  22. # "md5", "crypt", "password", "krb4", "krb5", "ident", or "pam".  Note
  23. # that "password" uses clear-text passwords; "md5" is preferred for
  24. # encrypted passwords.  OPTION is the ident map or the name of the PAM
  25. # service.
  26. #
  27. # This file is read on server startup and when the postmaster receives
  28. # a SIGHUP signal.  If you edit the file on a running system, you have
  29. # to SIGHUP the postmaster for the changes to take effect, or use
  30. # "pg_ctl reload".

  31. # Put your actual configuration here
  32. # ----------------------------------
  33. #
  34. # CAUTION: The default configuration allows any local user to connect
  35. # using any PostgreSQL user name, including the superuser, over either
  36. # Unix-domain sockets or TCP/IP.  If you are on a multiple-user
  37. # machine, the default configuration is probably too liberal for you.
  38. # Change it to use something other than "trust" authentication.
  39. #
  40. # If you want to allow non-local connections, you need to add more
  41. # "host" records.  Also, remember TCP/IP connections are only enabled
  42. # if you enable "tcpip_socket" in postgresql.conf.

  43. # TYPE  DATABASE    USER        IP-ADDRESS        IP-MASK           METHOD
  44. #访问来源 数据库    用户        IP-地址           子网掩码          认证方式

  45. local   typhoon     typhoon                                         md5
  46. #对于来自本地的访问,数据库“typhoon”对用户“typhoon”采用“md5”加密口令认证

  47. local   typhoon     all                                             reject
  48. #对于来自本地的访问,数据库“typhoon”对上面没提到的所有用户无条件拒绝认证

  49. host    typhoon     typhoon     255.255.255.255   127.0.0.1         md5
  50. #对于来网络的访问,数据库“typhoon”对用户“typhoon”,如果提出访问的是本机,采用“md5”加密口令认证

  51. host    typhoon     all         0.0.0.0           0.0.0.0           reject
  52. #对于来网络的访问,数据库“typhoon”对上面没提到的所有用户,不管提出访问的哪台机器,也不管它来自哪个子网,无条件拒绝认证

  53. local   all         all                                             md5
  54. #对于来自本地的访问,上面没提到的数据库对上面没提到的所有用户采用“md5”加密口令认证
  55. host    all         all         0.0.0.0           0.0.0.0           md5
  56. #对于来网络的访问,数上面没提到的数据库对上面没提到的所有用户,不管提出访问的哪台机器,也不管它来自哪个子网,采用“md5”加密口令认证

  57. ########################################
  58. #        Others are all denied        其他访问一概无条件拒绝
  59. local   all         all                                             reject
  60. host    all         all         0.0.0.0           0.0.0.0           teject
  61. ########################################

  62. ########################################
  63. #        All denied permissed, not safe
  64. #        对所有访问都信任,太不安全,被我禁止掉了,只作为参考
  65. #local   all         all                                             trust
  66. #host    all         all         0.0.0.0           0.0.0.0           trust
  67. ########################################
复制代码

这些认证的规则是从上到下一条一条加载的,要注意的是,里面的“all”并不是真正意义上的“所有”,只是前面的规定中没有提到的那部分。个人感觉用“other”也许更恰当。

这样,最终的结果是:
所有用户都能通过加密口令访问“typhoon”以外的数据库,但是只有用户“typhoon”能以加密口令访问数据库“typhoon”。


操作篇


[客户端基本连接操作]====================
*查看PostgreSQL的系统表:
(摸索/查找中)

*终端登录:
psql -l[主机名/IP] -d[数据库名] -U[用户名]

*连接到另外一个数据库:
\c [数据库名]

*断开终端:
\q
========================================

[基本用户管理]==========================
*添加用户:
create user [用户名];

*修改用户密码:
alter user [用户名] with password [口令];

*删除用户:
drop user [用户名];

*查看用户信息:
(摸索/查找中)
========================================

[基本数据库操作]========================
*创建数据库:
create database [数据库名];

*查看数据库列表:
\d

*删除数据库:
drop database [数据库名];

*修改数据库的所有者:
(摸索/查找中)
========================================

[数据库内基本操作]======================
*给予某用户在某数据库创建表的授权:
(摸索/查找中)

*收回某用户在某数据库创建表的授权:
(摸索/查找中)

创建表:
create table ([字段名1] [类型1] <references 关联表名(关联的字段名)>;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;

*查看表名列表:
\d

*查看某个表的状况:
\d [表名]

*重命名一个表:
alter table [表名A] rename to [表名B];

*修改表的所有者:
(摸索/查找中)

*删除一个表:
drop table [表名];
========================================

[表内基本操作]==========================
*在已有的表里添加字段:
alter table [表名] add column [字段名] [类型];

*删除表中的字段:
alter table [表名] drop column [字段名];

*重命名一个字段:
alter table [表名] rename column [字段名A] to [字段名B];

*给一个字段设置缺省值:
alter table [表名] alter column [字段名] set default [新的默认值];

*去除缺省值:
alter table [表名] alter column [字段名] drop default;

*将已存在的表里某列设置为主码:
(摸索/查找中)

*将已存在的表里某几列设置为主码:
(摸索/查找中)

*取消某列的主码资格:
(摸索/查找中)

在表中插入数据:
insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......);

修改表中的某行某列的数据:
update [表名] set [目标字段名]=[目标值] where [该行特征];

删除表中某行数据:
delete from [表名] where [该行特征];
delete from [表名];--删空整个表
========================================

[备份]==================================
备份一个数据库:
pg_dump 数据库名 >; 备份文件

把备份文件导回原数据库或导入新数据库:
cat 备份文件 | psql 数据库名
最好先把这个数据库的认证改为“trust”。

备份一个表:
pg_dump -t table1 dbname >; bk1.sql
========================================


ADD


摘自[http://cn.tech.yahoo.com/031118/142/1w6ex_3.html]:
你需要为psql程序带入参数:psql -d databasename -U username -W。-d用来指定数据库,-U指定用户名,而-W要求psql提示你输入一个口令。当你成功地运行了psql以后,将每个CREATE TABLE查询单独地粘贴到psql中并按回车键。如果在你的SQL语句中有错误,psql会给出相应提示。通过逐一地加入每一个表,你会得到每一个表的调试信息,这样做起来相当简单。如果,在你输入了表的定义之后,你发现遗漏了一两个字段,有两种方法能

论坛徽章:
0
发表于 2004-01-26 19:22 |显示全部楼层

PostgreSQL入门,V0.9.3+++,补充中,未定型。随时更新。

鼓掌,呵呵

论坛徽章:
0
发表于 2004-03-30 11:21 |显示全部楼层

PostgreSQL入门,V0.9.3+++,补充中,未定型。随时更新。

加了一点点

论坛徽章:
0
发表于 2004-03-30 19:44 |显示全部楼层

PostgreSQL入门,V0.9.3+++,补充中,未定型。随时更新。

我也在武汉,有机会聚聚:)

论坛徽章:
0
发表于 2004-04-19 16:42 |显示全部楼层

PostgreSQL入门,V0.9.3+++,补充中,未定型。随时更新。

不错   呵呵

论坛徽章:
0
发表于 2004-04-19 17:36 |显示全部楼层

PostgreSQL入门,V0.9.3+++,补充中,未定型。随时更新。

[quote]原帖由 "自由狼-台风0"]然后我关闭了X,并注销,再重新登录,以使环境变量生效。[/quote 发表:
source    一下就ok了

论坛徽章:
0
发表于 2004-11-19 16:28 |显示全部楼层

PostgreSQL入门,V0.9.3+++,补充中,未定型。随时更新。

这个版本已经废弃,请删除。新版本完成了,不日贴出。

论坛徽章:
0
发表于 2004-11-20 13:58 |显示全部楼层

PostgreSQL入门,V0.9.3+++,补充中,未定型。随时更新。

bu cuo###
すごいね!

论坛徽章:
0
发表于 2004-11-29 21:58 |显示全部楼层

PostgreSQL入门,V0.9.3+++,补充中,未定型。随时更新。

[quote]原帖由 "自由狼-台风0"]这个版本已经废弃,请删除。新版本完成了,不日贴出。[/quote 发表:


什么时候能贴出来呀,已经等不急了.

论坛徽章:
0
发表于 2007-06-17 22:16 |显示全部楼层
此版本已经废弃。最新版本:

http://typhoon.rocklv.net -> Linux文档 -> 原创水水 -> Linux不完全攻略
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP