PostgreSQL 简介
PostgreSQL: The World's Most Advanced Open Source Relational Database
PostgreSQL 是一个强大的开源对象关系数据库系统,经过超过 35 年的积极开发,在可靠性、功能健壮性和性能方面赢得了良好的声誉。截至2024年8月8日,发布开发版本PostgreSQL 17 beta 3,稳定版本16.4


1.1 os 系统要求
[root@pgserver ~] cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 7.9 (Maipo)[root@pgserver ~] uname -aLinux pgserver 3.10.0-1160.el7.x86_64 #1 SMP Tue Aug 18 14:50:17 EDT 2020 x86_64 x86_64 x86_64 GNU/Linuxgmake或者make要求至少3.80版本以上[root@pgserver ~] gmake -vGNU Make 3.82Built for x86_64-redhat-linux-gnuCopyright (C) 2010 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.[root@pgserver ~] which gmake/bin/gmake该库文件默认启用。用于在psql命令行工具下,可以通过键盘的上下箭头调出历史命令以及编辑之前的命令。如果不需要此功能的话,可以在configure的时候,带上--without-readline选项。[root@pgserver ~] rpm -qa|grep readlinereadline-devel-6.2-11.el7.x86_64readline-6.2-11.el7.x86_64
1.2 关闭 selinux 和 防火墙
[root@pgserver ~] systemctl status firewalld.service[root@pgserver ~] systemctl stop firewalld.service[root@pgserver ~] systemctl disable firewalld.service[root@pgserver ~] setenforce 0[root@pgserver ~] cp /etc/selinux/config /etc/selinux/config_`date +"%Y%m%d_%H%M%S"`&& sed -i 's/SELINUX\=enforcing/SELINUX\=disabled/g' /etc/selinux/config
1.3 修改内核参数
[root@pgserver ~]# cat >> /etc/sysctl.conf << "EOF"##############for postgresql###########kernel.shmall =4294967296kernel.shmmax=135497418752kernel.shmmni =4096kernel.sem = 50100 64128000 50100 1280fs.file-max =7672460fs.aio-max-nr =1048576net.ipv4.ip_local_port_range= 9000 65000net.core.rmem_default= 262144net.core.rmem_max= 4194304net.core.wmem_default= 262144net.core.wmem_max= 4194304net.ipv4.tcp_max_syn_backlog= 4096net.core.netdev_max_backlog= 10000net.ipv4.tcp_timestamps= 0net.ipv4.tcp_tw_recycle=1net.ipv4.tcp_timestamps=1net.ipv4.tcp_keepalive_time= 72net.ipv4.tcp_keepalive_probes= 9net.ipv4.tcp_keepalive_intvl= 7vm.zone_reclaim_mode=0vm.dirty_background_bytes= 40960000vm.dirty_ratio =80vm.dirty_expire_centisecs= 6000vm.dirty_writeback_centisecs= 50vm.swappiness=0vm.overcommit_memory= 0vm.overcommit_ratio= 90EOF[root@pgserver ~]# sysctl -p
用户limits设置
cat >> /etc/security/limits.conf << "EOF"* soft nofile 131072* hard nofile 131072* soft nproc 131072* hard nproc 131072* soft core unlimited* hard core unlimited* soft memlock 500000000* hard memlock 500000000EOF
清除limits.d 文件限制
more /etc/security/limits.d/20-nproc.conf# Default limit for number of user's processes to prevent# accidental fork bombs.# See rhbz #432903 for reasoning.* soft nproc 4096root soft nproc unlimitedecho "* - nproc unlimited" > /etc/security/limits.d/20-nproc.conf
1.4 配置YUM
rm -rf etc/yum.repos.d/redhat*#配置本地源和网络源cat >/etc/yum.repos.d/local.repo<<EOF[local]name=localbaseurl=file:///mntenabled=1gpgcheck=0EOF
1.5 安装依赖包
[root@pgserver ~]# yum -y install libicu-devel.x86_64 libicu.x86_64 readline-devel zlib-devel gettext-devel openssl openssl-devel pam pam-devel libxml2 libxml2-devel libxslt libxslt-devel perl perl-devel tcl-devel systemd-devel python-devel uuid-devel gcc gcc-c++ make perl-ExtUtils*
1.6 创建用户
[root@pgserver ~] id postgresid: postgres: no such user[root@pgserver ~] groupadd postgres -g 1000[root@pgserver ~] useradd postgres --gid 1000 --uid 1000 --create-home[root@pgserver ~] echo "postgres" | passwd --stdin postgres[root@pgserver ~] chown postgres.postgres /home/postgres/.bash_profile
1.7 创建目录
[root@pgserver ~] mkdir -p /postgresql/{pgdata,archive,scripts,backup,pg16,soft}[root@pgserver ~] chown -R postgres:postgres /postgresql[root@pgserver ~] chmod -R 775 /postgresql
1.8 编译安装
下载文件并解压[root@pgserver ~]# su - postgres[postgres@pgserver ]$ cd postgresql/soft[postgres@pgserver soft]$ wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz校验安装包[postgres@pgserver soft]$ md5sum postgresql-16.4.tar.gz6849302e68ba1984cee67cd6eab2b930 postgresql-16.4.tar.gz[postgres@pgserver soft]$ tar -zxvf postgresql-16.4.tar.gz[postgres@pgserver soft]$ lltotal 31900drwxrwxr-x. 6 postgres postgres 4096 Sep 11 23:46 postgresql-16.4-rw-r--r--. 1 postgres postgres 32660355 Sep 11 23:42 postgresql-16.4.tar.gz[postgres@pgserver soft]$ cd postgresql-16.4编译[postgres@pgserver postgresql-16.4]$ ./configure --prefix=/postgresql/pg16 --with-perl --with-python /默认端口5432如果要修改默认端口号使用 --with-pgport./configure安装如果希望编译所有能编译的东西,包括文档(HTML和手册页)以及附加模块(contrib),这样键入:[postgres@pgserver postgresql-16.4]$ make world -j 16 && make install-world查看版本[postgres@pgserver postgresql-16.4]$ postgresql/pg16/bin/postgres --versionpostgres (PostgreSQL) 16.4
1.9 配置环境变量
[postgres@pgserver ~]$ cat >> ~/.bash_profile <<"EOF"export PGPORT=5432export PGDATA=/postgresql/pgdataexport PGHOME=/postgresql/pg16export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATHexport PATH=$PGHOME/bin:$PATH:export PGHOST=$PGDATAexport PGUSER=postgresexport PGDATABASE=postgresEOF[postgres@pgserver ~]$ source ~/.bash_profile
2.0 初始化数据目录
[postgres@pgserver ~]$ postgresql/pg16/bin/initdb -D postgresql/pgdata -E UTF8 --locale=en_US.utf8 -U postgres
2.1 修改数据库参数
在数据目录下编辑配置文件 postgresql.conf 和 pg_hba.conf
[postgres@pgserver ~]$ cat >> postgresql/pgdata/postgresql.conf <<"EOF"listen_addresses = '*'port=5432cluster_name='pg16_5432'max_connections=200unix_socket_directories='/postgresql/pgdata'unix_socket_group = 'postgres'unix_socket_permissions = 0700wal_level=logicalarchive_mode=alwaysarchive_command='cp %p postgresql/archive/%f'min_wal_size=1GBmax_wal_size=2GBwal_keep_segments=128max_wal_senders=10hot_standby=onlogging_collector = onlog_directory = 'pg_log'log_destination=csvloglog_filename='pg_log_%u.log'log_file_mode=0600log_truncate_on_rotation = onlog_rotation_age=1dlog_min_messages=warninglog_min_duration_statement=30slog_checkpoints=onlog_duration=onlog_lock_waits=onlog_statement='mod'EOF[postgres@pgserver ~]$ cat >> postgresql/pgdata/pg_hba.conf << EOF# TYPE DATABASE USER ADDRESS METHODhost all all 0.0.0.0/0 md5EOF
2.2 数据库启停
su - postgres--启动数据库[postgres@pgserver ~]$ pg_ctl start & 或者 pg_ctl -D /postgresql/pgdata start &--查看数据库运行状态[postgres@pgserver ~]$ pg_ctl status--停止数据库[postgres@pgserver ~]$ pg_ctl stop[postgres@pgserver ~]$ pg_ctl stop -m fast[postgres@pgserver ~]$ pg_ctl statuspg_ctl: server is running (PID: 10705)/postgresql/pg16/bin/postgres[postgres@pgserver ~]$ ps -ef |grep 10705postgres 10705 1 0 15:46 ? 00:00:00 /postgresql/pg16/bin/postgrespostgres 10706 10705 0 15:46 ? 00:00:00 postgres: loggerpostgres 10707 10705 0 15:46 ? 00:00:00 postgres: checkpointerpostgres 10708 10705 0 15:46 ? 00:00:00 postgres: background writerpostgres 10710 10705 0 15:46 ? 00:00:00 postgres: walwriterpostgres 10711 10705 0 15:46 ? 00:00:00 postgres: autovacuum launcherpostgres 10712 10705 0 15:46 ? 00:00:00 postgres: archiverpostgres 10713 10705 0 15:46 ? 00:00:00 postgres: logical replication launcherpostgres 10825 10275 0 15:54 pts/0 00:00:00 grep --color=auto 10705
2.3 配置systemctl
-- 配置系统服务[postgres@pgserver ~]$ cat > /etc/systemd/system/PG16.service <<"EOF"[Unit]Description=PostgreSQL database serverDocumentation=man:postgresAfter=network.target[Service]Type=forkingUser=postgresGroup=postgresEnvironment=PGPORT=5432Environment=PGDATA=/postgresql/pgdataOOMScoreAdjust=-1000ExecStart=/postgresql/pg16/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300ExecStop=/postgresql/pg16/bin/pg_ctl stop -D ${PGDATA} -s -m fastExecReload=/postgresql/pg16/bin/pg_ctl reload -D ${PGDATA} -sKillMode=mixedKillSignal=SIGINTTimeoutSec=0[Install]WantedBy=multi-user.targetEOF
通过systemctl启停服务
systemctl reload PG16systemctl enable PG16systemctl start PG16systemctl status PG16
报错解决
[postgres@pgserver log]$ psqlpsql: error: connection to server on socket "/postgresql/pgdata/.s.PGSQL.5432" failed: No such file or directoryIs the server running locally and accepting connections on that socket?[postgres@pgserver log]$ vim /postgresql/pgdata/postgresql.confunix_socket_directories = '/tmp'修改为unix_socket_directories = '/postgresql/pgdata/'[postgres@pgserver log]$ pg_ctl stop -m fastwaiting for server to shut down.... doneserver stopped[postgres@pgserver log]$ pg_ctl startwaiting for server to start.... doneserver started[postgres@pgserver log]$ psqlpsql (16.4)Type "help" for help.postgres=# select version();version---------------------------------------------------------------------------------------------------------PostgreSQL 16.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit(1 row)postgres=# select * from pg_config;name | setting-------------------+-----------------------------------------------------------------------------------BINDIR | /postgresql/pg16/binDOCDIR | /postgresql/pg16/share/docHTMLDIR | /postgresql/pg16/share/docINCLUDEDIR | /postgresql/pg16/includePKGINCLUDEDIR | /postgresql/pg16/includeINCLUDEDIR-SERVER | /postgresql/pg16/include/serverLIBDIR | /postgresql/pg16/libPKGLIBDIR | /postgresql/pg16/libLOCALEDIR | /postgresql/pg16/share/localeMANDIR | /postgresql/pg16/share/manSHAREDIR | /postgresql/pg16/shareSYSCONFDIR | /postgresql/pg16/etcPGXS | /postgresql/pg16/lib/pgxs/src/makefiles/pgxs.mkCONFIGURE | '--prefix=/postgresql/pg16'CC | gcc -std=gnu99CPPFLAGS | -D_GNU_SOURCECFLAGS | -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2CFLAGS_SL | -fPICLDFLAGS | -Wl,--as-needed -Wl,-rpath,'/postgresql/pg16/lib',--enable-new-dtagsLDFLAGS_EX |LDFLAGS_SL |LIBS | -lpgcommon -lpgport -lz -lreadline -lpthread -lrt -ldl -lmVERSION | PostgreSQL 16.4
更多关于PostgreSQL 系列的学习文章后期持续更新中,下期见。
文章转载自DBA随笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




