PostgreSQL编译安装

Eave 2025.11.13

1、相关依赖安装

yum install -y libicu-devel flex readline-devel perl-CPAN libuuid-devel python3-devel
yum install -y readline-devel zlib-devel flex bison libxml2-devel libxslt-devel openssl-devel pam-devel libedit-devel selinux-policy-devel systemd-devel

2、下载PostgreSQL

下载地址:https://www.postgresql.org/ftp/source

wget "https://ftp.postgresql.org/pub/source/v18.1/postgresql-18.1.tar.gz"

3、编译安装

tar -zxf postgresql-18.1.tar.gz
cd postgresql-18.1/
./configure --prefix=/usr/local/postgres --with-openssl --with-libxml --with-libxslt --with-icu --with-pam --with-systemd --with-ssl=openssl --with-uuid=e2fs --with-perl
make -j$(nproc) && make install

4、初始化PostgreSQL数据目录

创建PostgreSQL启动用户

useradd -r -s /sbin/nologin postgres

创建数据目录

mkdir -p /var/lib/postgres/data
chown -R postgres:postgres /var/lib/postgres

创建日志目录

mkdir -p /var/log/postgres
chown -R postgres:postgres /var/log/postgres

以postgres用户身份初始化数据库集群

sudo -u postgres /usr/local/postgres/bin/initdb -D /var/lib/postgres/data

5、创建启动服务文件

编辑/usr/lib/systemd/system/postgres.service

[Unit]
Description=PostgreSQL Database Server
After=syslog.target
After=network.target
Requires=network.target

[Service]
Type=forking

# 根据实际安装路径调整以下参数
User=postgres
Group=postgres

# 主程序路径
ExecStart=/usr/local/postgres/bin/pg_ctl start -D /var/lib/postgres/data
ExecStop=/usr/local/postgres/bin/pg_ctl stop -D /var/lib/postgres/data -m fast
ExecReload=/usr/local/postgres/bin/pg_ctl reload -D /var/lib/postgres/data

# 重启策略
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

启动PostgreSQL

systemctl start postgres

6、设置开机启动

systemctl enable postgres
systemctl daemon-reload

7、修改配置

修改以下配置/var/lib/postgres/data/postgresql.conf

# Unix socket 配置
unix_socket_directories = '/dev/shm'     # 使用内存文件系统
unix_socket_permissions = 0777           # socket 文件权限
unix_socket_group = ''                   # socket 组(空表示默认)

# 日志记录配置
logging_collector = on  # 启用日志收集器
log_directory = '/var/log/postgres' # 日志目录,相对于数据目录或者绝对路径

log_filename = 'postgres-%Y%m%d.log' # 日志文件名格式
log_rotation_age = 30d # 日志文件保留时间

log_line_prefix = '%m [%p] %q%u@%d '        # 日志行前缀格式
log_timezone = 'Asia/Hong_Kong'              # 日志时区

# 日志级别控制
log_min_messages = warning          # 只记录 warning 及以上级别
log_min_error_statement = error     # 只记录错误语句
log_min_duration_statement = 1000   # 只记录慢查询(>1秒)

修改密码加密方式/var/lib/postgres/data/pg_hba.conf

host    all             all             0.0.0.0/0               scram-sha-256

8、加入环境变量

编辑/etc/profile文件

/etc/profile文件末尾追加一下内容

# postgres
export PATH=$PATH:/usr/local/postgres/bin

执行一下命令使配置生效

source /etc/profile

9、修改密码

进入PostgreSQL终端

psql -h localhost -U postgres

# 修改当前用户的密码
ALTER USER current_user WITH PASSWORD '123456';
# 修改指定用户的密码
ALTER USER username WITH PASSWORD '123456';

# 查看用户信息和密码
SELECT rolname, rolpassword FROM pg_authid;