linux下大家安装postgresql时估计都是以系统默认安装为准(这只是猜测,不要骂我),这样非常多东西我们都不明白,一但出问题了就不知道怎么去解决!
下面我就我自己在centOS4.3下从源码安装postgresql和设置他的步骤一一记录下来,和大家一起分享.
1:从http://www.postgresql.org下载posgtgresql源码包.我下的时8.1.4版本的.
得到postgresql-8.1.4.tar.gz文件.
2:解压此文件
tar -zxf postgresql-8.1.4.tar.gz
3:运入解压后的目录
cd postgresql-8.1.4
4:设置
./configure --prefix=PREFIX
其中PREFIX是你要安装postgresql的路径
5:编译
gmake
(一定要记得用 GNU make。)
依你的硬件而异,制作过程可能需要 5 分钟到半小时。显示的最后一行应该是
All of PostgreSQL is successfully made. Ready to install.
6:安装
gmake install
7:安装后设置( 要做这些事情,把下面几行加到你的 shell 启动文件,如
~/.bash_profile (或 /etc/profile--如果你想影响所有用户))
7.1:共享库
设置共享库的搜索路径的方法因平台而异,
不过最广泛使用的方法是设置环境变量
LD_LIBRARY_PATH 如:
LD_LIBRARY_PATH=安装路径/lib
export LD_LIBRARY_PATH
7.2:环境变量
严格说,这些都不是必须的,但这么做能让你使用PostgreSQL更方便。
安装路径/bin:$PATH
export PATH
为了让你的系统找得到 man(手册)文件,你需要加类似下面的一行到一个shell启动文件里
(除非你安装到了缺省时搜索的位置):
MANPATH=安装路径/man:$MANPATH
export MANPATH
8:使用postgresql
8.1:postgresql用户账户
和大量其他能从外界访问的服务器守护进程相同,
我们也建议用一个独立的用户帐户运行PostgreSQL。
这个用户帐户应该拥有由这个服务器管理的数据,而且不应该和其他守护进程共享这些数据。
(比如,用nobody 用户是个烂主意。)
我们不建议把可执行文件安装为由此用户所有,
因为这样一来被攻破的系统就能修改他们自己拥有的二进制文件。
要向你的系统里增加用户帐户,参考命令useradd 或 adduser。
我们经常使用 postgres 的用户名,并且在本书中都假设这个名字,但你不必这么做。
8.2:创建数据库集群
用文件系统的术语来说,一个数据库集群将是个目录,所有数据都将存放在这个目录中。
我们把他称做数据目录或数据区。
在哪里存放数据完全是你的选择,我们没有缺省值,尽管 /usr/local/pgsql/data 或
/var/lib/pgsql/data 这样的目录非常常用。
要初始化一个数据库集群,能使用命令
[url=file:///mnt/usbg/lyb/books/postgresql/postgres8.0.zh_cn/app-initdb.html]initdb[/url]
,
这个命令和 PostgreSQL 一起安装。你能用-D
标识你为你的数据库系统选择的文件系统位置,例如:
$ 安装路径/bin/initdb -D /usr/local/pgsql/data
请注意你必须以PostgreSQL用户的身份来执行这条命令,
这一点我们在前面一节描述过。
提示: 作为 -D选项的替代品,你还能使用环境变量 PGDATA。
如果你声明的路径还不存在,initdb 将试图创建他。
你非常有可能缺少做这些事情的权限(如果你按照我们的建议创建了一个非特权帐户的话)。
这时,你能自己创建该目录(以root身份)然后把该目录的所有权交给PostgreSQL用户或赋和她写权限。
下面是可能有效的方法:
root# mkdir /usr/local/pgsql/data
root# chown postgres /usr/local/pgsql/data
root# su postgres
postgres$ 安装路径/bin/initdb -D /usr/local/pgsql/data
如果数据目录看起来象已初始化过了,那么 initdb 会拒绝运行。
因为数据目录包含所有存储在数据库里的数据,所以出于安全考虑,这个目录不能给所有非授权用户访问。因此,
initdb 禁止除 PostgreSQL 用户帐户以外的所有用户访问这个目录。
8.3:启动和停止数据库服务
启动:
安装路径/bin/pg_ctl -D /usr/local/pgsql/data start
停止:
安装路径/bin/pg_ctl -D /usr/local/pgsql/data stop
8.4:客户端连接问题
postgresql默认情况下除本机外的机器是不能连接的,
且本机的连接是信任连接,只要有用户名就能连接,不用密码.
要改动这种默认设置需要更改postgresql的两个设置文件(pg_hba.conf和postgresql.conf,这两个文件在initdb时指定的目录下,如:/usr/local/pgsql/data
)
8.4.1:pg_hba.conf文件内容:
文件 pg_hba.conf 的常用格式是一套记录,
每行一条。空白行行被忽略,井号( # )开头的注释也被忽略。
一条记录是由若干用空格和/或 tab 分隔的字段组成。
如果字段用引号包围,那么他能包含空白。记录不能跨行存在。
每条记录声明一种联接类型,一个客户端 IP 地址范围(如果和联接类型相关的话),一个数据库名,一个用户名字,
及对匹配这些参数的联接使用的认证方法。
第一条匹配联接类型,客户端地址和联接企图请求的数据库名和用户名的记录将用于执行认证。
这个处理过程没有"跨越"或"回头"的说法:如果选择了一条记录而且认证失败,
那么将不考虑后面的记录。如果没有匹配的记录,那么访问将被拒绝。
每条记录能下面七种格式之一
local databaseuserauthentication-method[authentication-option]
host databaseuserCIDR-addressauthentication-method[authentication-option]
hostssl databaseuserCIDR-addressauthentication-method[authentication-option]
hostnossldatabaseuserCIDR-addressauthentication-method[authentication-option]
host databaseuserIP-addressIP-maskauthentication-method[authentication-option]
hostssl databaseuserIP-addressIP-maskauthentication-method[authentication-option]
hostnossldatabaseuserIP-addressIP-maskauthentication-method[authentication-option]
各个字段的含义如下:
local
这条记录匹配通过 Unix 域套接字进行的联接企图。
没有这种类型的记录,就不允许 Unix 域套接字的联接。
host
这条记录匹配通过 TCP/IP 进行的联接尝试。
host 记录匹配 SSL 和非 SSL 的连接请求。
注意: 除非服务器带着合适的
[url=file:///mnt/usbg/lyb/books/postgresql/postgres8.0.zh_cn/runtime-config.html#GUC-LISTEN-ADDRESSES]listen_addresses[/url]
设置参数值启动,否则将不可能进行远程的 TCP/IP 连接,
因为缺省的行为是只监听本地自环地址 localhost 的连接。
hostssl
这条记录匹配使用 TCP/IP 的 SSL 联接企图。
但必须是使用 SSL 加密的联接。
要使用这个选项,制作服务器的时候必须打开 SSL 支持。而且在服务器启动的时候,
必须SSL选项通过设置选项
[url=file:///mnt/usbg/lyb/books/postgresql/postgres8.0.zh_cn/runtime-config.html#GUC-SSL]ssl[/url]
打开。
hostnossl
这个记录和 hostssl 有着正相反的逻辑:
他只匹配那些在 TCP/IP 上不使用 SSL 的连接请求。
database
声明记录所匹配的数据库。值
all 表明该记录匹配所有数据库,
值 sameuser表示如果被请求的数据库和请求的用户同名,则匹配。
samegroup 表示请求的用户必须是个和数据库同名的组中的成员。
在其他情况里,这就是个特定的 PostgreSQL 的名字。
我们能通过用逗号分隔的方法声明多个数据库。
一个包含数据库名的文件能通过对该文件前缀 @ 来声明。
user
为这条记录声明所匹配的PostgreSQL用户。值 all 表明他匹配于所有用户。
否则,他就是特定 PostgreSQL
用户的名字。多个用户名能通过用逗号分隔的方法声明。组名字能通过用 + 做组名字前缀来声明。
一个包含用户名的文件能通过在文件名前面前缀 @ 来声明。该文件必需和
pg_hba.conf 在同一个目录。
CIDR-address
声明这条记录匹配的客户端机器的 IP 地址范围。他包含一个标准的点分十进制的 IP 地址和一个 CIDR 掩码长度。
(IP 地址只能用数值声明,不能用域或主机名。)
掩码长度表示客户端 IP 地址必须匹配的高位二进制位数。
在给出的 IP 地址里,这个长度的右边的二进制位必须为零。
在 IP 地址,/,和 CIDR 掩码长度之间不能有空白。
典型的 CIDR 地址是 172.20.143.89/32,这表明一个主机,
或 172.20.143.0/24 表示一个网络。
要声明单个主机,给 IPv4 地址声明 CIDR 掩码 32,给 IPv6 地址声明 128。
以 IPv4 格式给出的 IP 地址会匹配那些拥有对应地址的 IPv6 连接,比如
127.0.0.1 将匹配 IPv6 地址 ::ffff:127.0.0.1。
一个以 IPv6 格式给出的记录将只匹配 IPv6 连接,即使对应的地址在 IPv4-in-IPv6
范围内。请注意如果系统的 C 库不支持 IPv6 地址,那么 IPv6 的格式将被拒绝。
这个域只适用于 host,hostssl 和 hostnossl 记录。
IP-address
IP-mask
这些方法能用于作为 CIDR-address 表示法的替补。
他不是声明掩码的长度,而是在另外一个字段里声明实际的掩码。
比如,255.0.0.0 表示 IPv4 CIDR 掩码长度 8,而 255.255.255.255 表示 CIDR 掩码长度 32。
同样的匹配逻辑将用于一个点分的 IP-mask。
这些字段只适用于 host, hostssl,
和 hostnossl 记录。
authentication-method(认证方法)
声明通过这条记录联接的时候使用的认证方法。
trust
无条件地允许联接。这个方法允许所有能和PostgreSQL
数据库服务器联接的用户以他们期望的任意
PostgreSQL 数据库用户身份进行联接,而不必口令。
reject
联接无条件拒绝。常用于从一个组中"过滤"某些主机。
md5
需求客户端提供一个 MD5 加密的口令进行认证。
crypt
需求客户端提供一个 crypt() 加密的口令用于认证。
7.2 以前的客户端只能支持 crypt。
对于 7.2 及以后的客户端,我们建议使用 md5。
password
需求客户端提供一个未加密的口令进行认证。
因为口令是以明文形式在网络上传递的,
所以我们不应该在不安全的网络上使用这个方式。
krb4
用 Kerberos V4 认证用户。只有在进行 TCP/IP 联接的时候才能用。
krb5
用 Kerberos V5 认证用户。只有在进行 TCP/IP 联接的时候才能用。
ident
获取客户的操作系统名(对于 TCP/IP 联接,用户的身份是通过和运行在客户端上的
ident 服务器联接进行判断的,对于本地联接,他是从操作系统获取的。)
然后检查一下,看看用户是否允许以需求的数据库用户进行联接,
方法是参照在 ident 关键字后面声明的映射。
pam
使用操作系统提供的可插入的认证模块服务 (Pluggable Authentication Modules)
我的设置示例如下:
# 本机localhost使用信任连接
localall all trust
#127.0.0.1和192.168.1.0~254段IP地址访问时需要口令验证
#要让本机外的机器访问,除了在这设置外还要把postgresql.conf
#里的监听地址设置为:listen_addresses = ’*’
host all all 127.0.0.1/32 md5
host all all 192.168.1.0/24md5
8.4.2:postgresql.conf文件内容
为了使postgresql支持tcp/ip连接,要设置监听地址行,参考内容如下:
# - Connection Settings -
listen_addresses = ’*’
#port = 5432
max_connections = 100
8.5:重新启动服务,目前的postgresql就支持tcp/ip连接了,就能用psql进行测试了.
linux下手动安装postgresql
最新推荐文章于 2023-03-07 22:58:07 发布