PostgreSQL数据库
PostgreSQL被称为“世界上最先进的开源关系型数据库”,属于一专多长的全栈数据库。主要应用场景包括OLTP、OLAP、批处理、空间与地理数据库PostGIS等。随着信创项目的推动,以PostgreSQL开源软件进行二次开发的国产数据库软件也有很多,如人大金仓KingBase、瀚高HighGo DB、亚信的AntDB等等…
官网地址:
https://www.postgresql.org/
PostgreSQL版本说明
2024年11月21日 PostgreSQL 17.2版本发布,同时发布的还有PostgreSQL 16.6, 15.10, 14.15, 13.18, and 12.22 版本!
PostgreSQL 的生命周期是在主要版本首次发布后支持 5 年。在其五周年纪念日之后,主要版本将有最后一个包含所有修复的次要版本,并将被视为生命周期终止 (EOL) 并不再受支持。
各版本支持情况:
PostgreSQL 17:于2024年9月26日发布,支持状态将持续至2029年11月,最新版本为17.2,发布于2024年11月21日。
PostgreSQL 16:于2023年9月14日发布,支持状态将持续至2028年11月,最新版本为16.6,发布于2024年11月21日。
PostgreSQL 15:于2022年10月13日发布,支持状态将持续至2027年11月,最新版本为15.10,发布于2024年11月21日。
PostgreSQL 14:于2021年9月30日发布,支持状态将持续至2026年11月,最新版本为14.15,发布于2024年11月21日。
PostgreSQL 13:于2020年9月24日发布,支持状态将持续至2025年11月,最新版本为13.18,发布于2024年11月21日。
PostgreSQL 12:于2019年10月3日发布,支持状态已于2024年11月21日结束,最新版本为12.22,发布于2024年11月21日。
PostgreSQL 11:于2018年10月18日发布,支持状态已于2023年11月9日结束,最新版本为11.22,发布于2023年11月09日。
PostgreSQL项目计划在2025年9月发布下一个主要版本,即PostgreSQL 18。项目的目标是每季度至少发布一次次要版本,通常在2月、5月、8月和11月的第二个星期四。接下来的次要版本发布计划如下:
2025年2月13日
2025年5月8日
2025年8月14日
2025年11月13日
发布路线图:
https://www.postgresql.org/developer/roadmap/ 列出了即将发布的次要版本和主要版本。
版本控制策略:
https://www.postgresql.org/support/versioning/
接下来主要讲述PostgreSQL 17单实例的搭建过程。
PG17软件部署
PG17下载
下载地址:https://www.postgresql.org/ftp/source/v17.2/
文件名:postgresql-17.2.tar.gz
关闭SeLinux
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0
关闭防火墙
systemctl stop firewalld systemctl disable firewalld systemctl status firewalld
关闭RemoveIPC
vi /etc/systemd/logind.conf RemoveIPC=no systemctl daemon-reload systemctl restart systemd-logind
配置内核参数
vim /etc/sysctl.conf
kernel.sem= 4096 2147483647 2147483646 512000 fs.file-max=7672460 fs.aio-max-nr=1048576 net.core.rmem_default=262144 net.core.rmem_max=4194304 net.core.wmem_default=262144 net.core.wmem_max=4194304 net.ipv4.ip_local_port_range=9000 65500 net.ipv4.tcp_wmem=8192 65536 16777216 net.ipv4.tcp_rmem=8192 87380 16777216 vm.min_free_kbytes=512000 vm.vfs_cache_pressure=200 vm.swappiness=10 net.ipv4.tcp_max_syn_backlog=4096 net.core.somaxconn=4096
sysctl -p 生效
配置资源限制
vi /etc/security/limits.conf
postgres soft nofile 655360 postgres hard nofile 655360 postgres soft nproc 655360 postgres hard nproc 655360 postgres soft core unlimited postgres hard core unlimited postgres soft memlock 50000000 postgres hard memlock 50000000
安装依赖包
yum install -y readline readline-devel flex bison openssl openssl-devel git yum install -y gcc gcc-c++ epel-release llvm5.0 llvm5.0-devel clang libicu-devel perl-ExtUtils-Embed zlib-devel openssl openssl-devel pam-devel libxml2-devel libxslt-devel openldap-devel systemd-devel tcl-devel python-devel python3-devel lz4 lz4-devel uuid libuuid-devel
创建组和用户
groupadd -g 2000 postgres
useradd -g 2000 -u 2000 postgres
echo postgres|passwd --stdin postgres
设置postgres用户的环境变量
vi .bash_profile
export PGHOME=/opt/pg17
export PGDATA=/data/pg17
export PATH=$PGHOME/bin:$PATH:.
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PGPORT=5555
export PGUSER=postgres
export PGDATABASE=postgres
创建pg17软件安装目录
mkdir -p /opt/pg17 chmod 755 -R /opt/pg17 chown -R postgres:postgres /opt/pg17
创建数据文件存放目录
mkdir -p /data/pg17 chmod -R 700 /data/pg17 chown -R postgres:postgres /data/pg17
解压软件并授权
tar -zxvf /soft/postgresql-17.2.tar.gz chown -R postgres:postgres /soft/postgresql-17.2/
编译安装pg17
su - postgres
cd /soft/postgresql-17.2/
./configure --prefix=/opt/pg17 --with-pgport=5555 --with-extra-version=" [By guan]" --with-perl --with-libxml --with-libxslt
gmake world && gmake install-world
数据库初始化
initdb -D /data/pg17 -E UTF8 --locale=zh_CN.utf8
设置数据库参数
vi postgresql.conf
listen_addresses = '*'
log_destination = 'csvlog'
logging_collector = on
max_connections = 1000
shared_preload_libraries = 'pg_stat_statements,passwordcheck'
archive_mode = on
archive_command = 'cp %p /archive/%f'
设置白名单
vi pg_hba.conf
host all all 192.168.0.0/16 md5
启动数据库
pg_ctl -D /data/pg17 start
修改默认postgres用户的密码
数据库初始化好后,postgres用户的密码默认为空。
alter user postgres with password '******';
psql远程连接数据库
psql -h 192.168.*.* -U postgres
dbeaver客户端连接数据库
dbeaver设置:
菜单栏选择数据库->选择新建数据库连接->选择postgresql驱动
依次输入主机ip地址,端口,数据库名称,用户名和密码,点击“测试连接”按钮

出现下面界面:

说明测试连接成功!
PG数据库使用
附录
psql的用法:
[postgres@node1 ~]$ psql --help
psql是PostgreSQL 的交互式客户端工具。
使用方法:
psql [OPTION]... [DBNAME [USERNAME]]
通用选项:
-c, --command=命令 执行单一命令(SQL或内部指令)然后结束
-d, --dbname=DBNAME 指定要连接的数据库
-f, --file=文件名 从文件中执行命令然后退出
-l, --list 列出所有可用的数据库,然后退出
-v, --set=, --variable=NAME=VALUE
设置psql变量NAME为VALUE
(例如,-v ON_ERROR_STOP=1)
-V,--version 输出版本信息,然后退出
-X, --no-ksqlrc 不读取启动文档(~/.psqlrc)
-1 ("one"), --single-transaction
作为一个单一事务来执行命令文件(如果是非交互型的)
-?, --help[=options] 显示此帮助,然后退出
--help=commands 列出反斜线命令,然后退出
--help=variables 列出特殊变量,然后退出
输入和输出选项:
-a, --echo-all 显示所有来自于脚本的输入
-b, --echo-errors 回显失败的命令
-e, --echo-queries 显示发送给服务器的命令
-E, --echo-hidden 显示内部命令产生的查询
-L, --log-file=文件名 将会话日志写入文件
-n, --no-readline 禁用增强命令行编辑功能(readline)
-o,--outPut=FILENAME 将查询结果发送到file(or |pipe)
-q,--quiet 静静地运行(没有消息,只有查询输出)
-s, --single-step 单步模式 (确认每个查询)
-S, --single-line 单行模式 (一行就是一条 SQL 命令)
输出格式选项 :
-A,--no-align 不对齐表输出模式
--csv CSV(逗号分隔值)表输出模式
-F, --field-separator=STRING
用于未对齐输出的字段分隔符(默认值:"|")
-H,--html HTML表输出模式
-P, --pset=变量[=参数] 设置将变量打印到参数的选项(查阅 \pset 命令)
-R, --record-separator=STRING
记录分隔符用于未对齐输出(默认:newline)
-t, --tuples-only 只打印记录i
-T, --table-attr=文本 设定 HTML 表格标记属性(例如,宽度,边界)
-x,--expanded 打开扩展表outPut
-z, --field-separator-zero
将未对齐输出的字段分隔符设置为零字节
-0, --record-separator-zero
将未对齐输出的记录分隔符设置为零字节
连接选项:
-h, --host=主机名 数据库服务器主机或socket目录(默认:"本地接口")
-p, --port=端口 数据库服务器的端口(默认:"54321")
-U,--username=USERNAME 数据库用户名(默认:"kingbase")
-w, --no-password 永远不提示输入口令
-W, --password 强制口令提示 (自动)
更多信息,请在psql中输入 "\?"(用于内部命令),
或者参考PostgreSQL文档中的psql章节。
Connection options:
-h, --host=HOSTNAME database server host or socket directory
-p, --port=PORT database server port
-U, --username=USERNAME database user name
-w, --no-password never prompt for password
-W, --password force password prompt (should happen automatically)
总结
PostgreSQL 17.2 数据库编译安装非常容易,后续有空会做成自动化脚本,提高效率。
关于作者:
专注于Oracle、MySQL、PG、OpenGauss和国产数据库的研究,热爱生活,热衷于分享数据库技术。
微信公众号:飞天online
墨天轮:https://www.modb.pro/u/15197
如有任何疑问,欢迎大家留言,共同进步~~~




