简介

PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。

PostgreSQL 的 Slogan 是 “世界上最先进的开源关系型数据库”。

本次安装选择二进制源码包编译安装

服务器操作系统为Centos7.6,PostgreSql安装版本为14.0

安装包下载

在官网源码包选择14.0版本下载,下载地址:PostgreSQL: File Browser

准备工作

下载环境依赖

1
yum install -y cmake make gcc zlib zlib-devel gcc-c++ perl readline readline-devel  python36 tcl openssl ncurses-devel openldap pam flex

如果出现File “/usr/bin/yum“, line 30 except KeyboardInterrupt, e:这类错误,多半yum命令的python环境发生改变了,需要改回来:

1
2
3
cd /usr/bin
rm -rf python
ln -s python2.7 python

创建postgre用户

1
2
groupadd postgres
adduser -g postgres postgres

修改用户密码

此处修改密码即修改登录用户密码(如果你使用postgres作为登录用户的话)

1
passwd postgres

如果使用弱密码方便登录时,可执行以下命令:

1
echo "123" | passwd --stdin postgres

创建用户目录并授权

1
2
3
mkdir -p /home/postgres;
chmod -R 775 /home/postgres;
chown -R postgres:postgres /home/postgres;

开放防火墙端口

默认5432

1
2
firewall-cmd --zone=public --add-port=5432/tcp --permanent;
firewall-cmd --reload

修改操作系统打开最大文件句柄数

1
2
echo "postgres soft   nofile         65535" >> /etc/security/limits.conf
echo "postgres hard nofile 65535" >> /etc/security/limits.conf

重新登陆后,执行以下命令会出现65535

1
2
su postgres
ulimit -n

创建数据库目录

1
mkdir -p /home/postgres/{postgre14,pgdata}

编译并安装

1
2
3
4
5
su - postgres
tar -xzvf ./postgresql-14.0.tar.gz -C /home/postgres
cd /home/postgres/postgresql-14.0
./configure --prefix=/home/postgres/postgre14
make && make install

配置环境变量

1
2
3
4
5
6
7
8
cat >>  ~/.bash_profile <<"EOF"
export PGPORT=5432
export PGDATA=/home/postgres/pgdata
export PGHOME=/home/postgres/postgre14
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH:.
EOF
source ~/.bash_profile

数据库及参数初始化

1
/home/postgres/postgre14/bin/initdb -D $PGDATA  -E UTF8 --locale=en_US.utf8 -U postgres

指定-D数据目录,-E字符编码, --locale本及语言环境,-U初始化用户信息。

修改配置文件

1
2
3
4
5
6
7
cat >> /home/postgres/pgdata/postgresql.conf <<"EOF"
listen_addresses = '*'
port=5432
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
EOF
  • listen_addresses 表示postgre进程监听的网卡地址,配置*表示监听所有。
  • port服务监听端口配置
  • logging_collector=on,启动日志收集器
  • log_directory 表示日志文件在PGDATA目录下的文件夹位置。
  • log_filename表示日志文件的名称

配置访问权限

1
2
3
4
5
cat   > /home/postgres/pgdata/pg_hba.conf << EOF
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
host all all 0.0.0.0/0 md5
EOF

启动数据库新建用户

1
2
3
4
5
6
7
8
#启动命令
pg_ctl start
#重启命令
pg_ctl restart
#查看数据库运行状态
pg_ctl status
#停止数据库
pg_ctl stop

新建用户

进入postgresql命令行

1
psql

新建用户postgres

1
alter user postgres with password 'password';

一般来说,我们的程序在运行过程中,不会直接使用postgres用户,而是新建一个用户。

1
2
3
4
5
6
#新建一个用户 acai
CREATE USER acai WITH password '密码';
#新建一个数据库acaidb,属主是acai
CREATE DATABASE acaidb OWNER acai;
# 为用户acai赋权,all表示所有权限,acaidb的管理用户
GRANT all ON DATABASE acaidb TO acai;

实际上在生产环境中,我们需要创建两个用户,一个数据库管理用户用于管理表、视图等操作;另一个是程序用户,用于操作数据库表里面的数据,完成增删改查。

1
2
CREATE USER acaiuser WITH password '*******';
GRANT update,delete,insert,select ON ALL TABLES IN SCHEMA public TO acaiuser;

开机自启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
cat > /etc/systemd/system/postgre14.service <<"EOF"
[Unit]
Description=PostgreSQL database server 14.4
Documentation=man:postgres(1)
After=network.target

[Service]
Type=forking
User=postgres
Group=postgres

Environment=PGPORT=5432
Environment=PGDATA=/home/postgres/pgdata

ExecStart=/home/postgres/postgre14/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/home/postgres/postgre14/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/home/postgres/postgre14/bin/pg_ctl reload -D ${PGDATA} -s

KillMode=mixed
KillSignal=SIGINT
TimeoutSec=120

[Install]
WantedBy=multi-user.target
EOF

执行下列命令,使得PostgreSQL数据库开机自启动脚本生效。

1
2
systemctl daemon-reload
systemctl enable postgre14

后续再启停数据库,查看数据库状态,就可以使用下面的这些命令了

1
2
3
systemctl start postgre14
systemctl stop postgre14
systemctl status postgre14

参考连接

PostgreSql生产级别数据库安装要考虑哪些问题?