简介
在安装postgresql数据库的时候会需要设置一个关于postgresql数据库的PATH变量
export PATH=/home/postgres/pg/bin:$PATH,该变量会指向postgresql安装路径下的bin目录。这个安装目录和我们在进行编译的时候./configure --prefix= [指定安装目录] 中的prefix参数设置相关。--bindir=DIR 参数可以指定bin目录的具体存放路径。postgresql对应的PATH变量没有设置正确,会导致执行文件对应的命令无法使用
本文使用postgresql-15.2版本进行讲解
bin目录
进入到对应的bin目录中去,可以看到有以下的执行文件,本博主将进行一一讲解
clusterdb
createdb
createuser
dropdb
dropuser
ecpg
initdb
oid2name
pg_amcheck
pg_archivecleanup
pg_basebackup
pgbench
pg_checksums
pg_config
pg_controldata
pg_ctl
pg_dump
pg_dumpall
pg_isready
pg_receivewal
pg_recvlogical
pg_resetwal
pg_restore
pg_rewind
pg_test_fsync
pg_test_timing
pg_upgrade
pg_verifybackup
pg_waldump
postgres
postmaster -> postgres
psql
reindexdb
vacuumdb
vacuumlo
接上一篇
14.pg_config
pg_config工具打印当前安装的PostgreSQL配置参数。可以通过它找到相对应的存放目录。常常使用陌生的操作系统,安装PG找不到对应的默认路径的时候,可以使用该指令进行查找
[postgres@vm03 ~]$ pg_config --bindir --docdir --htmldir --includedir --pkgincludedir --includedir-server --libdir --pkglibdir --localedir --mandir --sharedir --sysconfdir --pgxs --configure --cc --cppflags --cflags --cflags_sl --ldflags --ldflags_ex --ldflags_sl --libs --version
/home/postgres/pg/bin
/home/postgres/pg/share/doc
/home/postgres/pg/share/doc
/home/postgres/pg/include
/home/postgres/pg/include
/home/postgres/pg/include/server
/home/postgres/pg/lib
/home/postgres/pg/lib
/home/postgres/pg/share/locale
/home/postgres/pg/share/man
/home/postgres/pg/share
/home/postgres/pg/etc
/home/postgres/pg/lib/pgxs/src/makefiles/pgxs.mk
'--prefix=/home/postgres/pg' '--with-openssl' '--with-python'
gcc -std=gnu99
-D_GNU_SOURCE
-Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2
-fPIC
-Wl,--as-needed -Wl,-rpath,'/home/postgres/pg/lib',--enable-new-dtags
-lpgcommon -lpgport -lssl -lcrypto -lz -lreadline -lpthread -lrt -ldl -lm
这里使用官网对各个参数的介绍
--bindir
打印用户可执行文件的路径。 比如,可以用这个找psql程序。 通常这也是pg_config程序存在的路径。
--docdir
打印文档文件的位置。
--htmldir
输出HTML文档文件的位置。
--includedir
打印客户端接口C头文件的路径。
--pkgincludedir
打印其它C头文件的位置。
--includedir-server
打印那些做服务器编程时使用的C头文件的位置。
--libdir
打印目标代码库的路径。
--pkglibdir
打印动态加载的模块的位置,或者服务器在哪里寻找他们。 其它体系相关的数据文件可能也放在这个目录里。
--localedir
打印区域支持文件的位置。如果在编译PostgreSQL的时候没有配置区域支持, 那么这个就是空字符串。
--mandir
打印手册页的位置。
--sharedir
打印体系无关的支持文件的位置。
--sysconfdir
打印系统范围的配置文件位置。
--pgxs
打印扩展makefiles文件的位置。
--configure
打印配置和编译PostgreSQL时给configure脚本传递的选项, 这可以用于复制相同配置, 或者找出二进制包是用哪些选项编译的。 不过请注意二进制包通常包含供应商提供的补丁。又见下面的例子。
--cc
打印用于编译PostgreSQL的CC变量的数值。 这个选项显示使用的C编译器。
--cppflags
打印用于编译PostgreSQL的CPPFLAGS变量的数值。 这个选项显示在预处理的时候所需要的C编译器开关(通常是-I开关)。
--cflags
打印编译PostgreSQL时使用的CFLAGS变量的数值。 这个选项显示C编译器开关。
--cflags_sl
打印编译PostgreSQL时使用的CFLAGS_SL变量的数值。 这个选项显示了编译共享库的额外的C编译器开关。
--ldflags
打印编译PostgreSQL时使用的LDFLAGS变量的数值。 它显示了链接器的开关。
--ldflags_ex
输出用于创建PostgreSQL的LDFLAGS_EX变量的值。 这显示用于构建可执行文件的链接器开关。
--ldflags_sl
打印编译PostgreSQL时使用的LDFLAGS_SL变量的数值。 它显示了用于编译共享库的链接器的开关。
--libs
打印编译PostgreSQL时使用的LIBS变量的数值。 其内容通常包含连接到PostgreSQL的外部库的-l开关。
--version
打印PostgreSQL的版本。
这么多参数中重点关注--bindir、--configure、--version 三个参数的使用。
15.pg_controldata
这个指令只有一个-D、-V两个参数,-V用于展示该数据目录下的数据库版本号
[postgres@vm03 ~]$ pg_controldata -D $PGDATA
pg_control version number: 1300
Catalog version number: 202209061
Database system identifier: 7301665933783671493
Database cluster state: in production
pg_control last modified: Tue 05 Dec 2023 10:19:04 PM CST
Latest checkpoint location: 0/10000110
Latest checkpoint's REDO location: 0/100000D8
Latest checkpoint's REDO WAL file: 000000010000000000000010
Latest checkpoint's TimeLineID: 1
Latest checkpoint's PrevTimeLineID: 1
Latest checkpoint's full_page_writes: on
Latest checkpoint's NextXID: 0:743
Latest checkpoint's NextOID: 24579
Latest checkpoint's NextMultiXactId: 1
Latest checkpoint's NextMultiOffset: 0
Latest checkpoint's oldestXID: 716
Latest checkpoint's oldestXID's DB: 1
Latest checkpoint's oldestActiveXID: 743
Latest checkpoint's oldestMultiXid: 1
Latest checkpoint's oldestMulti's DB: 1
Latest checkpoint's oldestCommitTsXid:0
Latest checkpoint's newestCommitTsXid:0
Time of latest checkpoint: Tue 05 Dec 2023 10:19:04 PM CST
Fake LSN counter for unlogged rels: 0/3E8
Minimum recovery ending location: 0/0
Min recovery ending loc's timeline: 0
Backup start location: 0/0
Backup end location: 0/0
End-of-backup record required: no
wal_level setting: replica
wal_log_hints setting: off
max_connections setting: 100
max_worker_processes setting: 8
max_wal_senders setting: 10
max_prepared_xacts setting: 0
max_locks_per_xact setting: 64
track_commit_timestamp setting: off
Maximum data alignment: 8
Database block size: 8192
Blocks per segment of large relation: 131072
WAL block size: 8192
Bytes per WAL segment: 16777216
Maximum length of identifiers: 64
Maximum columns in an index: 32
Maximum size of a TOAST chunk: 1996
Size of a large-object chunk: 2048
Date/time type storage: 64-bit integers
Float8 argument passing: by value
Data page checksum version: 0
Mock authentication nonce: 5857108a733c77131802904df8eebd6b2215639ba0b3dd8b53f78fc6446e6588
pg_controldata打印
关于预写式日志和检查点处理的信息。这种信息是集簇范围的,并且不针对任何一个数据库。
这个工具只能由初始化集簇的用户运行,因为它要求对数据目录的读访问。你可以在命令行中指定数据目录,
关于以上参数的解释(这个能看得懂就看吧,后期再专门写一篇博客来讲讲这些参数吧)
pg_control version number:
该字段表示 pg_control 文件的版本号,本例中为 1300。
Catalog version number:
数据库目录的版本号,本例中为 202209061。
Database system identifier:
数据库系统标识符,用于唯一标识数据库集群。本例中为 7301665933783671493。
Database cluster state:
数据库集群的状态,本例中为 "in production",表示数据库正处于主库状态。
pg_control last modified:
pg_control 文件上次修改的时间,本例中为 "Tue 05 Dec 2023 10:19:04 PM CST"。
Latest checkpoint location:
最新检查点的位置,本例中为 "0/10000110"。
Latest checkpoint's REDO location:
最新检查点的REDO位置,本例中为 "0/100000D8"。
Latest checkpoint's REDO WAL file:
最新检查点的REDO WAL文件,本例中为 "000000010000000000000010"。
Latest checkpoint's TimeLineID:
最新检查点所在的时间线标识符,本例中为 1。
Latest checkpoint's PrevTimeLineID:
最新检查点的前一个时间线标识符,本例中为 1。
Latest checkpoint's full_page_writes:
最新检查点是否使用了完整页写入(on 表示启用,off 表示禁用),本例中为 "on"。
Latest checkpoint's NextXID:
下一个事务ID(XID),本例中为 "0:743"。
Latest checkpoint's NextOID:
下一个对象ID(OID),本例中为 24579。
Latest checkpoint's NextMultiXactId:
下一个多重事务ID(MultiXactId),本例中为 1。
Latest checkpoint's NextMultiOffset:
下一个多重事务的偏移量,本例中为 0。
Latest checkpoint's oldestXID:
最老的活动事务ID,本例中为 716。
Latest checkpoint's oldestXID's DB:
最老的活动事务ID所属的数据库ID,本例中为 1。
Latest checkpoint's oldestActiveXID:
最老的活动事务ID,本例中为 743。
Latest checkpoint's oldestMultiXid:
最老的多重事务ID,本例中为 1。
Latest checkpoint's oldestMulti's DB:
最老的多重事务ID所属的数据库ID,本例中为 1。
Latest checkpoint's oldestCommitTsXid:
最老的提交时间戳事务ID,本例中为 0。
Latest checkpoint's newestCommitTsXid:
最新的提交时间戳事务ID,本例中为 0。
Time of latest checkpoint:
最新检查点的时间,本例中为 "Tue 05 Dec 2023 10:19:04 PM CST"。
Fake LSN counter for unlogged rels:
未记录关系的虚拟LSN计数器,本例中为 "0/3E8"。
Minimum recovery ending location:
最小恢复结束位置,本例中为 "0/0"。
Min recovery ending loc's timeline:
最小恢复结束位置所在的时间线标识符,本例中为 0。
Backup start location:
备份开始位置,本例中为 "0/0"。
Backup end location:
备份结束位置,本例中为 "0/0"。
End-of-backup record required:
是否需要结束备份记录("no" 表示不需要),本例中为 "no"。
wal_level setting:
WAL(Write-Ahead Logging)级别设置,本例中为 "replica"。
wal_log_hints setting:
是否启用WAL日志提示,本例中为 "off"。
max_connections setting:
允许的最大连接数,本例中为 100。
max_worker_processes setting:
允许的最大工作进程数,本例中为 8。
max_wal_senders setting:
允许的最大WAL发送者数,本例中为 10。
max_prepared_xacts setting:
允许的最大预备事务数,本例中为 0。
max_locks_per_xact setting:
每个事务允许的最大锁数,本例中为 64。
track_commit_timestamp setting:
是否启用事务提交时间戳跟踪,本例中为 "off"。
Maximum data alignment:
最大数据对齐字节数,本例中为 8。
Database block size:
数据库块大小,本例中为 8192 字节。
Blocks per segment of large relation:
大型关系每个段的块数,本例中为 131072。
WAL block size:
WAL块大小,本例中为 8192 字节。
Bytes per WAL segment:
每个WAL段的字节数,本例中为 16777216 字节。
Maximum length of identifiers:
标识符的最大长度,本例中为 64。
Maximum columns in an index:
索引中的最大列数,本例中为 32。
Maximum size of a TOAST chunk:
TOAST块的最大大小,本例中为 1996 字节。
Size of a large-object chunk:
大对象块的大小,本例中为 2048 字节。
Date/time type storage:
日期/时间类型的存储方式,本例中为 "64-bit integers"。
Float8 argument passing:
Float8参数传递方式,本例中为 "by value"。
Data page checksum version:
数据页校验和版本,本例中为 0。
Mock authentication nonce:
模拟身份验证的随机数,本例中为 "5857108a733c77131802904df8eebd6b2215639ba0b3dd8b53f78fc6446e6588"
16.pg_ctl
pg_ctl is a utility to initialize, start, stop, or control a PostgreSQL server.
Usage:
pg_ctl init[db] [-D DATADIR] [-s] [-o OPTIONS]
pg_ctl start [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]
[-o OPTIONS] [-p PATH] [-c]
pg_ctl stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]
pg_ctl restart [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]
[-o OPTIONS] [-c]
pg_ctl reload [-D DATADIR] [-s]
pg_ctl status [-D DATADIR]
pg_ctl promote [-D DATADIR] [-W] [-t SECS] [-s]
pg_ctl logrotate [-D DATADIR] [-s]
pg_ctl kill SIGNALNAME PID
Common options:
-D, --pgdata=DATADIR location of the database storage area
-s, --silent only print errors, no informational messages
-t, --timeout=SECS seconds to wait when using -w option
-V, --version output version information, then exit
-w, --wait wait until operation completes (default)
-W, --no-wait do not wait until operation completes
-?, --help show this help, then exit
If the -D option is omitted, the environment variable PGDATA is used.
Options for start or restart:
-c, --core-files allow postgres to produce core files
-l, --log=FILENAME write (or append) server log to FILENAME
-o, --options=OPTIONS command line options to pass to postgres
(PostgreSQL server executable) or initdb
-p PATH-TO-POSTGRES normally not necessary
Options for stop or restart:
-m, --mode=MODE MODE can be "smart", "fast", or "immediate"
Shutdown modes are:
smart quit after all clients have disconnected
fast quit directly, with proper shutdown (default)
immediate quit without complete shutdown; will lead to recovery on restart
Allowed signal names for kill:
ABRT HUP INT KILL QUIT TERM USR1 USR2
这个指令是我们比较常用的一个命令
启动 PostgreSQL 服务器:
pg_ctl start
指定数据目录和配置文件启动:
pg_ctl start -D /path/to/data/directory -o "-c config_file=/path/to/postgresql.conf"
停止 PostgreSQL 服务器:
pg_ctl stop
指定停止超时时间
pg_ctl stop -t 60
重载配置文件:
pg_ctl reload
指定日志文件输出路径:
pg_ctl start -l /path/to/logfile.log
等待服务器启动后返回:
pg_ctl start -w
使用 smart 选项启动 PostgreSQL 服务器:
(使用 smart 选项表示允许在尝试 fast 关闭失败时使用 immediate 关闭
immediate 选项表示立即停止 PostgreSQL 服务器,不管当前有多少活动的连接。
)
pg_ctl start -m smart
使用 logrotate 选项执行日志轮换:
pg_ctl logrotate
这个命令触发 PostgreSQL 日志的轮换,创建一个新的日志文件。它与服务器的启动和运行无关。
使用 kill 选项终止 PostgreSQL 服务器进程:
pg_ctl kill -s SIGTERM
使用 kill 选项可以向 PostgreSQL 服务器发送信号,上述示例发送 SIGTERM 信号,通常用于优雅地终止服务器进程。
使用 promote 选项将 PostgreSQL 流复制服务器升级为主服务器:
pg_ctl promote
使用 promote 选项将 PostgreSQL 流复制服务器升级为主服务器。这在流复制设置中很常见,用于手动切换到主服务器。
这里讲一下关于pg_ctl启停的三个参数 smart 、 fast (默认) 、 immediate
在实际应用中,通常会优先选择 fast
选项,因为它允许服务器正常关闭,等待现有连接完成,从而最大程度地减少潜在的数据丢失。smart
则提供了一种更灵活的选择,允许在一定时间内尝试 fast
关闭,然后转为 immediate
关闭以确保服务器能够尽快停止。
17.pg_dump
18.pg_dumpall
23.pg_restore
以上三种工具pg_dump、pg_dumpall数据库得备份工具 ,pg_dumpall可以用实例级别得备份,常常联合pg_restore联合使用,将备份数据导入到另一个库中去,用于备份或数据库升级。使用范例见
19.pg_isready
pg_isready是检查PostgreSQL 数据库服务器连接状态的一个实用工具。退出状态说明连接检查的结果。常用于新建的数据库对外开放情况。
[postgres@vm05 ~]$ pg_isready -h 192.168.43.216
192.168.43.216:5432 - no response
20.pg_receivewal
这个指令会通过流复制的形式向远程服务器接收当前日期往后的日志信息。可以理解为相当于就是一个归档程序。可以将预写日志归档到其他服务器上,用于后期的日志恢复(PITR)。
第一次使用的时候,他会从主节点罪行的wal开始复制,后续继续启动该命令时,他会从当前接收路径下的确实的wal去主节点找。使用起来比较简单。
pg_receivewal receives PostgreSQL streaming write-ahead logs.
Usage:
pg_receivewal [OPTION]...
Options:
-D, --directory=DIR receive write-ahead log files into this directory
-E, --endpos=LSN exit after receiving the specified LSN
--if-not-exists do not error if slot already exists when creating a slot
-n, --no-loop do not loop on connection lost
--no-sync do not wait for changes to be written safely to disk
-s, --status-interval=SECS
time between status packets sent to server (default: 10)
-S, --slot=SLOTNAME replication slot to use
--synchronous flush write-ahead log immediately after writing
-v, --verbose output verbose messages
-V, --version output version information, then exit
-Z, --compress=METHOD[:DETAIL]
compress as specified
-?, --help show this help, then exit
Connection options:
-d, --dbname=CONNSTR connection string
-h, --host=HOSTNAME database server host or socket directory
-p, --port=PORT database server port number
-U, --username=NAME connect as specified database user
-w, --no-password never prompt for password
-W, --password force password prompt (should happen automatically)
Optional actions:
--create-slot create a new replication slot (for the slot's name see --slot)
--drop-slot drop the replication slot (for the slot's name see --slot)
21.pg_recvlogical
pg_recvlogical
控制逻辑解码复制槽以及来自这种复制槽的流数据。
这个指令没太大应用场景。
22.pg_resetwal
通常用于修复由于 WAL 文件损坏或丢失而导致的数据库无法启动的问题。这个指令被认为是修复postgresql的最后一根稻草
pg_resetwal -D /var/lib/pgsql/data
##当数据库B点上预写日志损坏了,此时通过这个指令让数据库从B点前一个LSN(可应用的)重新生成预写日志,此时预写日志不再进入pg_wal目录,而是进入/var/lib/pgsql/data 路径下
24.pg_rewind
一个增量备份工具,往往数据库比较大的时候,重新进行备份会浪费较长时间,应用旧的备份,进行增量备份到指定节点,会比较快。使用范例见
25.pg_test_fsync
这是一个系统压测工具,使用也非常简单。它主要用于评估文件系统的 fsync(文件同步)性能。
测试 fsync 性能:
pg_test_fsync
指定测试文件大小:
pg_test_fsync -s 1GB
测试异步操作:
pg_test_fsync -A
多次运行测试:
pg_test_fsync -t 10
显示执行一系列同步操作的时间。
26.pg_test_timing
pg_test_timing
的输出将显示执行计时操作的时间,包括系统计时和延迟。这对于评估 PostgreSQL 在特定硬件和系统上的性能和延迟表现非常有用。收集计时数据很慢的系统会给出不太准确的EXPLAIN ANALYZE
结果。
使用非常简单,只有一个参数d,用于指定压测的持续时间
-
Testing timing overhead for 10 seconds:
- 这行指示测试计时的总时间为10秒。
-
Per loop time including overhead: 30.91 ns:
- 每个循环的平均时间,包括测试系统计时的额外开销,为30.91纳秒。这表示每次循环执行所需的平均时间。
< us:
表示计时持续时间的范围,单位是微秒。这一列显示了计时的持续时间范围的上限。例如,< us 列中的 "1" 表示小于1微秒的计时。
% of total:
表示每个时间段的百分比,占总计数的比例。这一列显示了每个持续时间范围内计时的分布情况。例如,"% of total" 列中的 "97.04" 表示小于1微秒的计时占总计数的97.04%。
count:
表示每个时间段的计数,即在指定的持续时间范围内计时的次数。这一列显示了每个时间段的计数。例如,"count" 列中的 "313986794" 表示小于1微秒的计时出现了313,986,794次。
综合这三列的信息,可以了解计时的分布情况,例如有多少计时在特定的时间范围内。在给定的示例中,绝大多数计时小于1微秒,占总计数的97.04%。这样的结果通常是希望看到的,因为它表示系统的计时性能较好,大多数计时都非常快速。
27.pg_upgrade
用数据库版本升级的工具,使用范例见