PostgreSQL 数据库安装手册

本手册基于Rocky9.1(内核版本 5.14.0-284.30.1.el9_2.x86_64)操作系统安装,其他环境请酌情参考

数据库版本为15.4 ,数据库下载地址: PostgreSQL: File Browser

下载pgsql15.4

[root@postgreSQL ~]# wget https://ftp.postgresql.org/pub/source/v15.4/postgresql-15.4.tar.bz2

解压缩

[root@postgreSQL ~]# tar -xvf postgresql-15.4.tar.bz2 

安装所需依赖

[root@postgreSQL ~]# dnf install zlib-devel readline-devel gcc gcc-c++ make openssl-devel  python3-devel openldap-devel -y

创建pgsql用户并设置密码(注意:用户需要具有登录权限)

[root@postgreSQL ~]# useradd postgres && echo 'your_password' | passwd --stdin postgres

创建数据目录和编译安装目录

[root@postgreSQL data]# mkdir  /pg_data                 #数据目录
[root@postgreSQL data]# mkdir -p /usr/local/pgsql15.4   #编译安装目录

编译安装pgsql

[root@postgreSQL ~]# cd postgresql-15.4/

[root@postgreSQL postgresql-15.4]# ./configure --prefix=/usr/local/pgsql15.4/
过程省略....
[root@postgreSQL postgresql-15.4]#  gmake world && gmake install-world  #编译安装所有插件
编译安装过程省略....
[root@postgreSQL postgresql-15.4]#  ln -s /usr/local/pgsql15.4  /usr/local/pgsql  #创建软连接,方便后续管理升级等

修改目录属主和属组,更改权限

[root@postgreSQL local]# chown -R postgres. /usr/local/pgsql15.4 
[root@postgreSQL local]# chown -R postgres. /pg_data 
[root@postgreSQL local]# chmod  700 /pg_data
[root@postgreSQL local]# ll -d  /pg_data
drwx------. 2 postgres postgres 6 Oct 20 13:50 /pg_data

在pgsql用户中配置环境变量

[postgres@postgreSQL ~]# su - pg_hanjy 

[postgres@postgreSQL ~]$ cat >> .bash_profile << EOF

export PG_HOME=/usr/local/pgsql/
export PGDATA=/pg_data
export LD_LIBRARY_PATH=$PG_HOME/lib
export PATH=$PATH:$PG_HOME/bin
export PGPORT=9527

EOF

[postgres@postgreSQL ~]$ source .bash_profile 

[postgres@postgreSQL ~]$ psql --version   #验证是否安装成功
psql (PostgreSQL) 15.4

初始化数据库

[postgres@postgreSQL ~]$ initdb -D $PGDATA -E utf8 

启动服务

[postgres@postgreSQL ~]$ pg_ctl -D $PGDATA start

waiting for server to start....2023-10-21 09:12:34.768 CST [22415] LOG:  starting PostgreSQL 15.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4), 64-bit
2023-10-21 09:12:34.772 CST [22415] LOG:  listening on IPv6 address "::1", port 9527
2023-10-21 09:12:34.773 CST [22415] LOG:  listening on IPv4 address "127.0.0.1", port 9527
2023-10-21 09:12:34.777 CST [22415] LOG:  listening on Unix socket "/tmp/.s.PGSQL.9527"
2023-10-21 09:12:34.786 CST [22418] LOG:  database system was shut down at 2023-10-21 09:11:01 CST
2023-10-21 09:12:34.795 CST [22415] LOG:  database system is ready to accept connections
 done
server started

修改用户控制文件和配置文件,支持用户远程登录(数据存放目录)

TYPE 参数设置

TYPE 表示主机类型,值可能为:

若为 local 表示是unix-domain的socket连接,

若为 host 是TCP/IP socket

若为 hostssl 是SSL加密的TCP/IP socket

DATABASE 参数设置

DATABASE 表示数据库名称,值可能为:

all ,`sameuser`,`samerole`,`replication`,`数据库名称` ,或者多个

数据库名称用 逗号,注意ALL不匹配 replication

USER 参数设置

USER 表示用户名称,值可以为:

all,`一个用户名`,`一组用户名` ,多个用户时,可以用 ,逗号隔开,

或者在用户名称前缀 + ;在USER和DATABASE字段,也可以写一个单独的

文件名称用 @ 前缀,该文件包含数据库名称或用户名称

ADDRESS 参数设置

该参数可以为 主机名称 或者`IP/32(IPV4) IP/128(IPV6)`,主机

名称以 .开头,`samehost`或`samenet` 匹配任意Ip地址

METHOD 参数设置

该值可以为"trust", "reject", "md5", "password", "scram-sha-256",

"gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert"

注意 若为`password`则发送的为明文密码

参数释义

trust

无条件地允许连接。这个方法允许任何可以与PostgreSQL 数据库服务器连接的用户以他们期望的任意PostgreSQL 数据库用户身份进行连接,而不需要口令或任何其他认证。参阅第 19.3.1 节获取细节。

reject

无条件地拒绝连接。常用于从一个组中"过滤"某些主机,例如, 一个拒绝行能够从连接中锁定一个指定的主机,而稍后的行允许指定网络中的剩余的主机连接。

md5

要求客户端提供一个双重MD5散列的口令进行认证。参阅第 19.3.2 节获取细节。

password

要求客户端提供一个未加密的口令进行认证。因为口令是以明文形式在网络上传递的, 所以我们不应该在不安全的网络上使用这个方式。参阅第 19.3.2 节获取细节。

gss

使用GSSAPI认证用户。这只能用于TCP/IP连接。参阅第 19.3.3 节获取细节。

sspi

使用SSPI认证用户。这只能在Windows上使用。参阅第 19.3.4 节获取细节。

ident

获取客户的操作系统名然后检查该用户是否匹配要求的数据库用户名, 方法是用户的身份通过与运行在客户端上的 ident 服务器连接进行判断的。 Ident认证只在进行TCP/IP连接的时候才能用。当指定本地连接时,将使用peer认证。 参阅第 19.3.5 节获取细节。

peer

为操作系统获取客户端操作系统用户名,并检查该用户是否匹配要求的数据库用户名。 该方法只适用于本地连接。参阅第 19.3.6 节获取细节。

ldap

使用LDAP服务器进行认证。参阅第 19.3.7 节获取细节。

radius

使用RADIUS服务器进行认证,参阅第 19.3.8 节获取细节。

cert

使用SSL客户端证书进行认证。参阅第 19.3.9 节获取细节。

pam

使用操作系统提供的可插入认证模块服务(PAM)来认证。参阅第 19.3.10 节获取细节。

注意

修改该配置文件中的参数,必须重启 postgreSql服务,若要允许其它IP地址访问

该主机数据库,则必须修改 postgresql.conf 中的参数 listen_addresses*

重启:pg_ctl reload 或者 执行 SELECT pg_reload_conf()

#修改控制文件的放行策略加入"host    all             postgres        172.16.1.0/24           trust" 允许postgres用户远程登录
[postgres@postgreSQL pg_data]$ vim /pg_data/pg_hba.conf 


# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             postgres        172.16.1.0/24           trust
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust



#修改配置文件第60行的监听端口
[postgres@postgreSQL pg_data]$ vim +60 /pg_data/postgresql.conf

listen_addresses = '172.16.1.244'       # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
#port = 5432                            # (change requires restart)
max_connections = 100                   # (change requires restart)
#superuser_reserved_connections = 3     # (change requires restart)
#unix_socket_directories = '/tmp'       # comma-separated list of directories
                                        # (change requires restart)
#unix_socket_group = ''                 # (change requires restart)

#重新启动数据库
[postgres@postgreSQL pg_data]$ pg_ctl -D $PGDATA restart -mf

#如需加入开机自启可以使用rc.local方式
[root@postgreSQL ~]# echo  'su - postgres -c "pg_ctl -D /pg_data start"' >> /etc/rc.d/rc.local  && chmod +x /etc/rc.d/rc.local

测试远程登录

[postgres@postgreSQL pg_data]$ psql -d postgres -U postgres -W -h 172.16.1.244 -p 9527
Password: 
postgres=#