暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

postgresql学习笔记三--源码编译安装及常用命令

原创 _ 云和恩墨 2023-05-09
463

一、创建目录

[root@Euler0 ~]# useradd postgres
[root@Euler0 ~]# mkdir -p /postgresql/data
[root@Euler0 ~]# chown postgres:postgres /postgresql/data -R
chown postgres:postgres postgresql-15.1.tar.gz
[postgres@Euler0 ~]$ tar -zxvf postgresql-15.1.tar.gz

二、编译安装

1、命令解释

查看帮助

[postgres@Euler0 postgresql-15.1]$ ./configure -help
`configure' configures PostgreSQL 15.1 to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
  -V, --version           display version information and exit
  -q, --quiet, --silent   do not print `checking ...' messages
      --cache-file=FILE   cache test results in FILE [disabled]
  -C, --config-cache      alias for `--cache-file=config.cache'
  -n, --no-create         do not create output files
      --srcdir=DIR        find the sources in DIR [configure dir or `..']

安装位置调整

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX [/usr/local/pgsql]  --将体系结构无关的文件安装在PREFIX目录下,默认为/usr/local/pgsql。
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX  [PREFIX]       --将体系结构相关的文件安装在EPREFIX目录下,默认为PREFIX目录。                      

By default, `make install' will install all the files in`/usr/local/pgsql/bin', `/usr/local/pgsql/lib' etc.  You can specify an installation prefix other than `/usr/local/pgsql' using `--prefix',for instance `--prefix=$HOME'.

安装位置微调

For better control, use the options below.

Fine tuning of the installation directories:   -
  --bindir=DIR            user executables [EPREFIX/bin]                                         --用户可执行文件安装目录,默认为EPREFIX/bin。
  --sbindir=DIR           system admin executables [EPREFIX/sbin]				       --系统管理员可执行文件安装目录,默认为EPREFIX/sbin
  --libexecdir=DIR        program executables [EPREFIX/libexec]			 	       --程序可执行文件安装目录,默认为EPREFIX/libexec
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]			       --只读的单机数据文件的安装目录,默认为`PREFIX/etc`
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]			--可修改的与体系结构无关的数据文件的安装目录,默认为`PREFIX/com`。
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]				--可修改的单机数据文件的安装目录,默认为`PREFIX/var`
  --libdir=DIR            object code libraries [EPREFIX/lib]					--对象代码库文件的安装目录,默认为`EPREFIX/lib`
  --includedir=DIR        C header files [PREFIX/include]						--C头文件的安装目录,默认为`PREFIX/include`。
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]					--非GCC编译器的C头文件的安装目录,默认为`/usr/include`。
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]			--只读的与体系结构无关的数据文件根目录,默认为`PREFIX/share`
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]			--只读的与体系结构无关的数据文件的安装目录,默认为`DATAROOTDIR`
  --infodir=DIR           info documentation [DATAROOTDIR/info]					--info文档的安装目录,默认为`DATAROOTDIR/info`。
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]				--区域设置相关的数据文件的安装目录,默认为`DATAROOTDIR/locale`。
  --mandir=DIR            man documentation [DATAROOTDIR/man]					--man文档的安装目录,默认为`DATAROOTDIR/man`
  --docdir=DIR            documentation root [DATAROOTDIR/doc/postgresql]				--文档根目录,默认为`DATAROOTDIR/doc/postgresql`
  --htmldir=DIR           html documentation [DOCDIR]						--HTML文档的安装目录,默认为`DOCDIR`。
  --dvidir=DIR            dvi documentation [DOCDIR]							--DVI文档的安装目录,默认为`DOCDIR`。
  --pdfdir=DIR            pdf documentation [DOCDIR]							--PDF文档的安装目录,默认为`DOCDIR`。
  --psdir=DIR             ps documentation [DOCDIR]							--PostScript文档的安装目录,默认为`DOCDIR`

执行系统类型

System types:
  --build=BUILD     configure for building on BUILD [guessed]					--指定当前正在构建的系统类型
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]				--指定编译出的程序将在哪个系统上运行。
如果不指定参数,则会默认使用当前系统类型作为构建和运行的目标系统

特性启动和关闭

Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options			--忽略无法识别的 `--enable/--with` 选项
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)		--禁用指定的功能。效果与 `--enable-FEATURE=no` 相同
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]						--启用指定的功能。可选,可以为功能提供参数 `ARG`,默认值为 `yes`。
  --disable-integer-datetimes  obsolete option, no longer supported				--已废弃且不再支持的选项
  --enable-nls[=LANGUAGES]      enable Native Language Support				--启用原生语言支持(Native Language Support)
  --disable-rpath         do not embed shared library search path in executables		--禁止在可执行文件中嵌入共享库搜索路径
  --disable-spinlocks     do not use spinlocks						--禁用自旋锁
  --disable-atomics       do not use atomic operations					--禁用原子操作
  --enable-debug          build with debugging symbols (-g)					--使用调试符号(-g)进行构建
  --enable-profiling      build with profiling enabled					--启用性能分析功能进行构建
  --enable-coverage       build with coverage testing instrumentation			--启用覆盖测试工具
  --enable-dtrace         build with DTrace support						--启用 DTrace 支持
  --enable-tap-tests      enable TAP tests (requires Perl and IPC::Run)			--启用 TAP 测试(需要 Perl 和 IPC::Run)
  --enable-depend         turn on automatic dependency tracking				--开启自动依赖跟踪
  --enable-cassert        enable assertion checks (for debugging)				--启用断点检查(用于调试)
  --disable-thread-safety disable thread-safety in client libraries				--在客户端库中禁用线程安全
  --disable-largefile     omit support for large files					--不支持大文件

选项部分

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]                                   --使用指定的软件包(默认参数为`yes`)
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)		--不使用指定的软件包(等同于`--with-PACKAGE=no`)
  --with-extra-version=STRING   append STRING to version				--将字符串追加到版本信息中。
  --with-template=NAME    override operating system template			--覆盖操作系统模板
  --with-includes=DIRS    look for additional header files in DIRS			--在指定的目录中查找额外的头文件
  --with-libraries=DIRS   look for additional libraries in DIRS			--与`--with-libs=DIRS`一样:在指定的目录中查找额外的库文件
  --with-libs=DIRS        alternative spelling of --with-libraries
  --with-pgport=PORTNUM   set default port number [5432]				--设置默认端口号(默认为5432)
  --with-blocksize=BLOCKSIZE  set table block size in kB [8]			--设置块大小(以kB为单位,默认为8)
  --with-segsize=SEGSIZE  set table segment size in GB [1]				--是指段大小,默认1G
  --with-wal-blocksize=BLOCKSIZE   set WAL block size in kB [8]			--设置WAL(Write-Ahead Logging)块大小(以kB为单位,默认为8)
  --with-CC=CMD           set compiler (deprecated)					--设置编译器(已弃用)
  --with-llvm             build with LLVM based JIT support				--构建基于LLVM的JIT支持
  --with-icu              build with ICU support					--构建支持ICU的版本
  --with-tcl              build Tcl modules (PL/Tcl)					--构建Tcl模块(PL/Tcl)
  --with-tclconfig=DIR    tclConfig.sh is in DIR					--tclConfig.sh的目录
  --with-perl             build Perl modules (PL/Perl)				--构建Perl模块(PL/Perl)
  --with-python           build Python modules (PL/Python)				--构建Python模块(PL/Python)
  --with-gssapi           build with GSSAPI support					--构建支持GSSAPI的版本
  --with-krb-srvnam=NAME  default service principal name in Kerberos (GSSAPI)[postgres] --Kerberos(GSSAPI)中的默认服务主体名称(默认为postgres)
  --with-pam              build with PAM support					--构建支持PAM的版本
  --with-bsd-auth         build with BSD Authentication support			--构建支持BSD Authentication的版本
  --with-ldap             build with LDAP support					--构建支持LDAP的版本
  --with-bonjour          build with Bonjour support					--构建支持Bonjour的版本
  --with-selinux          build with SELinux support					--构建支持SELinux的版本
  --with-systemd          build with systemd support					--构建支持systemd的版本
  --without-readline      do not use GNU Readline nor BSD Libedit for editing	--不使用GNU Readline或BSD Libedit进行编辑
  --with-libedit-preferred  prefer BSD Libedit over GNU Readline			--优先使用BSD Libedit而非GNU Readline
  --with-uuid=LIB         build contrib/uuid-ossp using LIB (bsd,e2fs,ossp)	--使用指定的库构建contrib/uuid-ossp(bsd, e2fs, ossp)	
  --with-ossp-uuid        obsolete spelling of --with-uuid=ossp			--失效选项,使用with-uuid=oss
  --with-libxml           build with XML support					--xml支持
  --with-libxslt          use XSLT support when building contrib/xml2		--XSLT 支持
  --with-system-tzdata=DIR use system time zone data in DIR				--使用系统中指定位置的时区数据
  --without-zlib          do not use Zlib						--不使用 Zlib 库
  --with-lz4              build with LZ4 support					--使用LZ4压缩
  --with-zstd             build with ZSTD support					--使用ZSTD压缩
  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]		-- C 编译器使用 GNU ld
  --with-ssl=LIB          use LIB for SSL/TLS support (openssl)			--使用SSL/TLS 库
  --with-openssl          obsolete spelling of --with-ssl=openssl			--使用with-ssl=openssl 

环境变量列表,可用于配置软件的编译和链接过程

Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir>
  LIBS        libraries to pass to the linker, e.g. -l<library>
  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir>
  CXX         C++ compiler command
  CXXFLAGS    C++ compiler flags
  LLVM_CONFIG path to llvm-config command
  CLANG       path to clang compiler to generate bitcode
  CPP         C preprocessor
  PKG_CONFIG  path to pkg-config utility
  PKG_CONFIG_PATH      directories to add to pkg-config's search path
  PKG_CONFIG_LIBDIR    path overriding pkg-config's built-in search path
  ICU_CFLAGS  C compiler flags for ICU, overriding pkg-config
  ICU_LIBS    linker flags for ICU, overriding pkg-config
  XML2_CONFIG path to xml2-config utility
  XML2_CFLAGS C compiler flags for XML2, overriding pkg-config
  XML2_LIBS   linker flags for XML2, overriding pkg-config
  LZ4_CFLAGS  C compiler flags for LZ4, overriding pkg-config
  LZ4_LIBS    linker flags for LZ4, overriding pkg-config
  ZSTD_CFLAGS C compiler flags for ZSTD, overriding pkg-config
  ZSTD_LIBS   linker flags for ZSTD, overriding pkg-config
  LDFLAGS_EX  extra linker flags for linking executables only
  LDFLAGS_SL  extra linker flags for linking shared libraries only
  PERL        Perl program
  PYTHON      Python program
  MSGFMT      msgfmt program for NLS
  TCLSH       Tcl interpreter program (tclsh)
2、编译
[postgres@Euler0 postgresql-15.1]$ ./configure --prefix=/postgresql --with-python --with-perl --enable-nls --with-readline
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking which template to use... linux
checking whether NLS is wanted... yes
checking for default port number... 5432
...
checking Python.h usability... no
checking Python.h presence... no
checking for Python.h... no
configure: error: header file <Python.h> is required for Python

去掉–with-python编译

[postgres@Euler0 postgresql-15.1]$ make install-world
make -C ./src/backend generated-headers
make[1]: 进入目录“/home/postgres/postgresql-15.1/src/backend”
make -C catalog distprep generated-header-symlinks

三、初始化启动

1、加入环境变量
export PGHOME=/postgresql
export PATH=$PGHOME/bin:$PATH
export PATH=$PGHOME/bin:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PGUSER=postgres
export PGPORT=5432
export PGDATA=$PGHOME/data
export MANPATH=/postgresql/share/man:$MANPATH
2、初始化
[postgres@Euler0 ~]$ initdb -D /postgresql/data
属于此数据库系统的文件宿主为用户 "postgres".
此用户也必须为服务器进程的宿主.
数据库簇将使用本地化语言 "zh_CN.UTF-8"进行初始化.
默认的数据库编码已经相应的设置为 "UTF8".
initdb: 无法为本地化语言环境"zh_CN.UTF-8"找到合适的文本搜索配置
缺省的文本搜索配置将会被设置到"simple"

禁止为数据页生成校验和.

修复已存在目录 /postgresql/data 的权限 ... 成功
正在创建子目录 ... 成功
选择动态共享内存实现 ......posix
选择默认最大联接数 (max_connections) ... 100
选择默认共享缓冲区大小 (shared_buffers) ... 128MB
选择默认时区 ... Asia/Shanghai
创建配置文件 ... 成功
正在运行自举脚本 ...成功
正在执行自举后初始化 ...成功
同步数据到磁盘...成功

initdb: 警告: 为本地连接启用"trust"身份验证
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.

成功。您现在可以用下面的命令开启数据库服务器:

    pg_ctl -D /postgresql/data -l 日志文件 start

3、启动
[postgres@Euler0 ~]$ pg_ctl -D /postgresql/data -l logfile start
等待服务器进程启动 .... 完成
服务器进程已经启动

[postgres@Euler0 ~]$ psql
psql (15.1)
输入 "help" 来获取帮助信息.

postgres=# \d
没有找到任何关系.
postgres=# \l
                                                     数据库列表
   名称    |  拥有者  | 字元编码 |  校对规则   |    Ctype    | ICU Locale | Locale Provider |       存取权限
-----------+----------+----------+-------------+-------------+------------+-----------------+-----------------------
 postgres  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |            | libc            |
 template0 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |            | libc            | =c/postgres          +
           |          |          |             |             |            |                 | postgres=CTc/postgres
 template1 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |            | libc            | =c/postgres          +
           |          |          |             |             |            |                 | postgres=CTc/postgres
(3 行记录)

4、参数调整
max_connections = 100
max_wal_senders = 10
max_replication_slots = 10
max_worker_processes = 10
shared_preload_libraries = 'pg_stat_statements'
listen_addresses = '*'
port = 5432
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 0
log_checkpoints = on
log_connections = on
log_disconnections = on
log_error_verbosity = verbose
log_line_prefix = '%m [%p] '
log_timezone = 'PRC'
log_autovacuum_min_duration = 0

4、常用命令

[postgres@Euler0 bin]$ ls
clusterdb   dropdb    initdb      pg_archivecleanup  pg_checksums    pg_ctl      pg_isready      pg_resetwal  pg_test_fsync   pg_verifybackup  postmaster  vacuumdb
createdb    dropuser  oid2name    pg_basebackup      pg_config       pg_dump     pg_receivewal   pg_restore   pg_test_timing  pg_waldump       psql        vacuumlo
createuser  ecpg      pg_amcheck  pgbench            pg_controldata  pg_dumpall  pg_recvlogical  pg_rewind    pg_upgrade      postgres         reindexdb

1、clusterdb

用于对一个已经存在的数据库集群中的所有数据库进行重新聚集(cluster)操作,即重新组织表的物理存储,以便更好地利用磁盘空间和提高性能。

clusterdb命令的使用方法如下:

clusterdb [options] dbname

其中,dbname表示要重新聚集的数据库名称,options是一些可选的命令行选项,常用选项包括:

-p:指定PostgreSQL服务器的端口号,默认为5432
-h:指定PostgreSQL服务器的主机名或IP地址,默认为本地主机
-U:指定连接PostgreSQL服务器的用户名,默认为当前系统用户
-v:显示详细的聚集过程信息
2、dropdb

dropdb是PostgreSQL提供的一个命令行工具,用于删除一个已经存在的数据库,即删除数据库及其相关对象(如表、索引、视图等)。使用dropdb命令可以轻松地删除数据库,无需手动删除数据库中的所有对象。

dropdb命令的使用方法如下:

dropdb [options] dbname

其中,dbname表示要删除的数据库名称,options是一些可选的命令行选项,常用选项包括:

-p:指定PostgreSQL服务器的端口号,默认为5432
-h:指定PostgreSQL服务器的主机名或IP地址,默认为本地主机
-U:指定连接PostgreSQL服务器的用户名,默认为当前系统用户
-e:在删除数据库之前,强制终止所有连接到该数据库的客户端会话
3、initdb

用于创建一个新的、空白的数据库集群(cluster)。在安装PostgreSQL后,必须使用initdb命令来初始化一个空的数据库集群,才能开始使用PostgreSQL。

initdb命令的使用方法如下:

initdb [options] datadir

其中,datadir表示要创建的数据库集群的根目录,options是一些可选的命令行选项,常用选项包括:

-D:指定要创建的数据库集群的根目录
-E:指定要使用的字符集编码,默认为UTF8
-U:指定初始化数据库时使用的超级用户名称,默认为当前系统用户
-W:提示输入超级用户的密码
4、pg_archivecleanup

用于归档文件的清理和管理。在PostgreSQL的流复制(streaming replication)和逻辑复制(logical replication)场景中,归档文件是非常重要的,它们用于保留主数据库的事务日志,以便从备库进行恢复和复制。pg_archivecleanup命令可以删除不再需要的归档文件,以节省磁盘空间并确保备库的恢复能力。

pg_archivecleanup命令的使用方法如下:

pg_archivecleanup [options] archive_location [last_removed]

其中,archive_location表示归档文件的目录路径,last_removed表示上次删除的归档文件的名称。options是一些可选的命令行选项,常用选项包括:

-D:指定归档文件的目录路径
-v:显示详细的操作日志
-n:不执行删除操作,只显示要删除的归档文件名称

例如,要删除/var/lib/postgresql/archive目录下所有早于000000010000000000000005的归档文件,可以使用以下命令:

pg_archivecleanup -D /var/lib/postgresql/archive/ 000000010000000000000005
5、pg_checksums

用于为现有的PostgreSQL数据库启用或禁用数据页校验和功能。数据页校验和是一种用于检测数据文件损坏或位翻转的机制,它可以帮助防止数据损坏和数据丢失。

pg_checksums命令的使用方法如下:

pg_checksums [options] datadir

其中,datadir表示要进行校验和操作的数据库目录路径,options是一些可选的命令行选项,常用选项包括:

-c:启用数据页校验和功能
-n:禁用数据页校验和功能
-D:指定数据库目录路径
-j:指定并行任务的数量
-t:指定超时时间
6、pg_ctl

用于启动、停止、重启、查询PostgreSQL服务器状态等操作。它可以方便地管理PostgreSQL服务器的运行。

pg_ctl命令的使用方法如下:

pg_ctl [option...] start|stop|restart|reload|status [postgresql] [-D DATADIR] [-l FILENAME] [-o OPTIONS]

其中,start表示启动PostgreSQL服务器,stop表示停止PostgreSQL服务器,restart表示重启PostgreSQL服务器,reload表示重新加载PostgreSQL服务器配置文件,status表示查询PostgreSQL服务器状态。

postgresql是可选的服务名称,默认为postgres,-D选项指定PostgreSQL数据库目录路径,-l选项指定日志文件路径,-o选项指定其他启动参数。

例如,要启动位于/usr/local/pgsql/data目录下的PostgreSQL服务器,可以使用以下命令:

pg_ctl start -D /usr/local/pgsql/data

如果要停止PostgreSQL服务器,可以使用以下命令:

pg_ctl stop -D /usr/local/pgsql/data

需要注意的是,pg_ctl命令需要以超级用户或PostgreSQL管理员身份运行。在使用pg_ctl命令时,还需要注意以下一些常用选项:

-w:等待操作完成后才退出
-t seconds:等待指定秒数后超时退出
-s:以静默模式运行
-l filename:将日志输出到指定文件
-o options:指定其他启动参数
7、pg_isready

用于检查PostgreSQL服务器是否正在运行,以及服务器是否可以接受连接请求。

pg_isready命令的使用方法如下:

pg_isready [option…] [host [port|socket_directory]]
其中,host表示PostgreSQL服务器的主机地址,可以是IP地址或主机名,如果省略则默认为本地主机;port表示PostgreSQL服务器的端口号,如果省略则默认为5432;socket_directory表示PostgreSQL服务器的套接字目录路径,如果省略则默认为Unix域套接字。

常用的选项包括:

-h:指定PostgreSQL服务器的主机地址
-p:指定PostgreSQL服务器的端口号
-U:指定连接PostgreSQL服务器的用户名
-d:指定连接PostgreSQL服务器的数据库名
-t:指定超时时间,单位为秒,默认为3秒
-q:以静默模式运行,只输出连接状态,不输出其他信息

例如,要检查本地主机上的PostgreSQL服务器是否正在运行,可以使用以下命令:

pg_isready

如果服务器正在运行且可以接受连接请求,则输出:

/usr/local/bin/pg_isready
ready for connections at 2021-10-01 08:00:00.000000+08:00

如果服务器没有运行或者无法接受连接请求,则输出:

/usr/local/bin/pg_isready
no response from server
8、pg_resetwal

用于重新初始化WAL(Write-Ahead Logging)日志,它会删除WAL日志文件并重置相关控制信息。通常情况下,我们不需要使用pg_resetwal命令,因为PostgreSQL会自动管理WAL日志。

但是,在某些情况下,可能需要使用pg_resetwal命令。例如,当WAL日志文件已经被损坏或者丢失时,我们可以使用pg_resetwal命令来重新初始化WAL日志。另外,我们也可以使用pg_resetwal命令来恢复备份服务器上的主服务器。

需要注意的是,使用pg_resetwal命令会删除所有的WAL日志文件,并重置控制信息,这将导致所有未备份的数据丢失。因此,在使用pg_resetwal命令之前,必须先备份数据库。

pg_resetwal命令的使用方法如下:

pg_resetwal [option...] [DATADIR]

其中,DATADIR表示PostgreSQL服务器的数据目录路径,默认为$PGDATA环境变量所指定的路径。常用的选项包括:

-f:强制执行操作,即使WAL日志文件存在
-n:不执行操作,只输出将会执行的操作
-o:指定一个偏移量,用于定位WAL日志文件
-x:不删除旧的WAL日志文件

例如,要重新初始化本地主机上的PostgreSQL服务器的WAL日志,可以使用以下命令:

[postgres@Euler0 ~]$ pg_resetwal -D $PGDATA -n
当前的pg_control的值:

pg_control 版本:                      1300
Catalog 版本:                         202209061
数据库系统标识符:                     7230106184266038915
最新检查点的 TimeLineID:              1
最新检查点的full_page_writes: 开启
最新检查点的NextXID:          0:742
最新检查点的 NextOID:                 16396
最新检查点的NextMultiXactId: 1
最新检查点的NextMultiOffsetD: 0
最新检查点的oldestXID:            716
最新检查点的oldestXID所在的数据库:1
最新检查点的oldestActiveXID:  0
最新检查点的oldestMultiXid:  1
最新检查点的oldestMulti所在的数据库:1
最新检查点的oldestCommitTsXid:0
最新检查点的newestCommitTsXid:0
最大数据校准:     8
数据库块大小:                         8192
大关系的每段块数:                     131072
WAL的块大小:    8192
每一个 WAL 段字节数:                  16777216
标识符的最大长度:                     64
在索引中可允许使用最大的列数:    32
TOAST区块的最大长度:                1996
大对象区块的大小:         2048
日期/时间 类型存储:                   64位整数
正在传递Flloat8类型的参数:                   由值
数据页校验和版本:  0

要更改的值:
First log segment after reset:        000000010000000000000005
9、pg_test_fsync

用于测试PostgreSQL数据库在存储设备上执行fsync操作的性能。该命令可以帮助用户确定文件系统和存储设备的性能,以及确定适当的fsync设置,以平衡数据库性能和数据安全性。

使用pg_test_fsync命令的语法如下:

pg_test_fsync [OPTIONS] [FILE]

其中,OPTIONS是可选参数,用于指定测试的参数和选项,FILE是要测试的文件路径。

常用的选项包括:

-D:指定数据库目录,默认为$PGDATA。
-N:指定测试执行的次数,默认为10。
-s:指定测试数据大小,默认为4KB。
-S:指定测试数据大小的单位,默认为B。
-T:指定测试执行的时间,单位为秒,默认为5秒。

例如,

[postgres@Euler0 ~]$ pg_test_fsync
5 seconds per test
O_DIRECT supported on this platform for open_datasync and open_sync.

Compare file sync methods using one 8kB write:
(in wal_sync_method preference order, except fdatasync is Linux's default)
        open_datasync
     6839.271 ops/sec     146 usecs/op
        fdatasync                          6267.022 ops/sec     160 usecs/op
        fsync                              4036.436 ops/sec     248 usecs/op
        fsync_writethrough                              n/a
        open_sync                          3496.256 ops/sec     286 usecs/op

Compare file sync methods using two 8kB writes:
(in wal_sync_method preference order, except fdatasync is Linux's default)
        open_datasync                      3604.562 ops/sec     277 usecs/op
        fdatasync                          6225.222 ops/sec     161 usecs/op
        fsync                              5401.704 ops/sec     185 usecs/op
        fsync_writethrough                              n/a
        open_sync                          3306.276 ops/sec     302 usecs/op

10、pg_verifybackup

用于验证基于pg_basebackup的备份文件的完整性和一致性。它可以检查备份文件的元数据、数据文件的完整性和一致性,并确保备份文件中的数据可以成功还原到PostgreSQL数据库中。

pg_verifybackup通常用于检查备份文件是否已被篡改或损坏,以及确定备份文件是否可以用于恢复数据库。它还可以用于验证备份文件是否包含完整和一致的数据,以确保备份文件的可靠性和可用性。

使用pg_verifybackup的语法如下:

pg_verifybackup [OPTIONS] BACKUP_DIRECTORY

其中,OPTIONS是可选参数,用于指定验证备份文件的选项,BACKUP_DIRECTORY是备份文件所在的目录。

常用的选项包括:

-d:指定要验证的数据库目录。
-j:指定要使用的并发工作进程数。
-P:指定备份期间使用的原始基本备份命令。
-V:显示pg_verifybackup的版本信息。
  -e, --exit-on-error         出错时立即退出
  -i, --ignore=RELATIVE_PATH  忽略指定的路径
  -m, --manifest-path=PATH    使用清单的指定路径
  -n, --no-parse-wal          不试图解析WAL文件
  -q, --quiet                 不打印任何输出,错误除外
  -s, --skip-checksums        跳过校验和验证
  -w, --wal-directory=PATH    对WAL文件使用指定路径
  -V, --version               输出版本信息,然后退出
  -?, --help                  显示此帮助,然后退出
11、vacuumdb

VACUUM操作用于回收被删除或更新的行所占用的空间,并且可以帮助修复破碎的索引。ANALYZE操作用于收集表和索引的统计信息,这些统计信息可以用于优化查询执行计划。

vacuumdb可以对整个数据库、一个或多个指定的表、或者所有的表执行VACUUM和ANALYZE操作。它还支持并行执行VACUUM操作,以加快整个过程的执行速度。

以下是一些常用的vacuumdb命令:

对整个数据库执行VACUUM和ANALYZE操作:
vacuumdb -z -a
对指定的表执行VACUUM和ANALYZE操作:
vacuumdb -z -t table_name
对多个指定的表执行VACUUM和ANALYZE操作:
vacuumdb -z -t table1,table2,table3
对所有的表执行VACUUM和ANALYZE操作:
vacuumdb -z -A
并行执行VACUUM操作:
vacuumdb -z -j 4
12、createdb

用于创建新的数据库。

以下是一些常用的createdb命令:

创建一个新的数据库:
createdb dbname
其中,dbname是要创建的数据库名称。

指定数据库所属的用户和字符集:
createdb -O username -E encoding dbname
其中,-O参数指定数据库所属的用户,-E参数指定数据库使用的字符集,dbname是要创建的数据库名称。

创建一个模板数据库:
createdb -T template1 template2
其中,-T参数指定要使用的模板数据库,template2是新的数据库名称。

创建一个具有特定模式的数据库:
createdb -O username -E encoding -T template_name -n schema_name dbname
其中,-n参数指定要创建的数据库的模式名称,其余参数与前面的相同。
13、dropuser

以下是一些常用的dropuser命令:

删除一个数据库用户:
dropuser username
其中,username是要删除的数据库用户名称。

删除一个数据库用户并强制关闭该用户的所有活动会话:
dropuser -W -i username
其中,-W参数要求输入要删除的用户的密码以确认操作,-i参数要求强制关闭该用户的所有活动会话。

删除一个数据库用户并指定要连接的数据库:
dropuser -h host -p port -U user_name --if-exists -d database_name username
其中,-h参数指定要连接的主机,-p参数指定要连接的端口,-U参数指定要使用的用户名,-d参数指定要连接的数据库,–if-exists参数要求只有在该用户存在时才执行删除操作,username是要删除的数据库用户名称。
14、oid2name

用于将PostgreSQL数据库中的OID转换为其对应的名称。 它通常用于管理和维护PostgreSQL数据库,并允许用户以更友好的方式查看数据库对象。

oid2name命令的语法如下:

oid2name [-U username] [-d dbname] [-h hostname] [-p port] [-t] [-T] [oid [oid …]]
其中,选项说明如下:

-U:指定要连接的数据库用户。
-d:指定要连接的数据库名称。
-h:指定要连接的主机名。
-p:指定要连接的端口号。
-t:指定要转换为名称的OID类型。
-T:指定要转换为名称的所有OID类型。
oid:要转换为名称的OID。

[postgres@Euler0 bin]$ oid2name -d postgres -t t1
From database "postgres":
  Filenode  Table Name
----------------------
     16388          t1

15、pg_basebackup

用于创建基本备份。它允许用户将一个PostgreSQL数据库复制到一个新的服务器上,并在新服务器上创建一个与原数据库相同的复制。pg_basebackup主要用于创建备份服务器,用于灾难恢复和高可用性。

pg_basebackup命令的语法如下:

pg_basebackup [-D directory] [-U username] [-X stream|fetch] [-P] [--progress] [-c] [-S slotname] [-l label] [-R] [-T tablespaces_mapping_file] [-v] [-h host] [-p port] [--no-password] [--password] [--replication] [--write-recovery-conf] [--wal-method=stream|fetch] [--max-rate=rate] [--tablespace-mapping=old_dir=new_dir] [--help] [--version]

其中,选项说明如下:

-D:指定备份文件目录。
-U:指定连接到数据库的用户名。
-X:指定用于从服务器复制数据的方法。stream表示使用流复制,fetch表示使用基于文件的复制。
-P:在备份过程中显示进度。
–progress:在备份过程中显示进度。
-c:在备份过程中创建一个复制点。
-S:指定用于复制的复制槽的名称。
-l:指定备份标签。
-R:备份过程中执行指定的恢复命令。
-T:指定表空间映射文件的路径。
-v:在备份期间显示详细输出。
-h:指定要连接的主机名。
-p:指定要连接的端口号。
–no-password:不提示输入密码。
–password:强制提示输入密码。
–replication:使用流复制模式进行备份。
–write-recovery-conf:在备份目录中写入一个恢复配置文件。
–wal-method:指定用于复制WAL文件的方法。
–max-rate:指定复制速率的限制。
–tablespace-mapping:指定表空间的映射关系。

例如,要将PostgreSQL数据库复制到一个新的服务器上,可以使用以下命令:

pg_basebackup -D /path/to/backup -h old_host -U old_user -P -c

这将创建一个基本备份,并将其保存在指定的目录中。

16、pg_config

用于检查PostgreSQL的安装和编译配置信息。它可以提供有关PostgreSQL安装和编译选项的详细信息,包括编译器和头文件路径、库文件路径、配置选项和版本号等。

pg_config命令的语法如下:

pg_config [--bindir] [--includedir] [--pkgincludedir] [--includedir-server] [--includedir-client] [--libdir] [--pkglibdir] [--pgxs] [--configure] [--version] [--help]

其中,选项说明如下:

–bindir:显示PostgreSQL二进制文件所在的目录。
–includedir:显示PostgreSQL头文件所在的目录。
–pkgincludedir:显示PostgreSQL公共头文件所在的目录。
–includedir-server:显示PostgreSQL服务器头文件所在的目录。
–includedir-client:显示PostgreSQL客户端头文件所在的目录。
–libdir:显示PostgreSQL库文件所在的目录。
–pkglibdir:显示PostgreSQL公共库文件所在的目录。
–pgxs:显示PostgreSQL扩展模块的Makefile所在的目录。
–configure:显示PostgreSQL编译时的配置参数。
–version:显示PostgreSQL的版本号。
–help:显示帮助信息。

例如,要查看PostgreSQL的库文件所在的目录,可以使用以下命令:

pg_config --libdir

这将显示PostgreSQL库文件所在的目录路径,例如:

/usr/local/pgsql/lib

使用pg_config可以方便地查看PostgreSQL的安装和编译配置信息,以便在需要时进行诊断和修复。

17、pgdump

用于备份PostgreSQL数据库的数据和结构。它可以将一个数据库或者一个数据库集合(多个数据库)的所有数据和结构导出为可执行的SQL脚本,这样可以方便地在另一个PostgreSQL服务器上重建该数据库或者恢复数据库的数据。

pg_dump命令的语法如下:

pg_dump [option...] [dbname]

其中,选项说明如下:

-f, --file=FILENAME:将导出的SQL脚本输出到指定的文件中。
-F, --format=c|t|p:指定导出文件的格式,可以是自定义格式(c)、纯文本格式(t)或平面文本格式(p)。
-Z, --compress=0-9:指定压缩级别,可以是0-9之间的任意数字,0表示不压缩。
-U, --username=USERNAME:指定连接数据库的用户名。
-h, --host=HOSTNAME:指定连接数据库的主机名。
-p, --port=PORT:指定连接数据库的端口号。
-W, --password:提示输入连接数据库的密码。
-s, --schema-only:只导出数据库的结构(不包括数据)。
-a, --data-only:只导出数据库的数据(不包括结构)。
-c, --clean:在导出之前清空目标数据库。
-n, --schema=SCHEMA:只导出指定的模式。
-t, --table=TABLE:只导出指定的表。
–exclude-schema=SCHEMA:排除指定的模式。
–exclude-table=TABLE:排除指定的表。

例如,要将一个名为testdb的数据库导出为一个名为testdb.sql的SQL脚本文件,可以使用以下命令:

pg_dump -U postgres -f testdb.sql testdb

这将在当前目录下生成一个名为testdb.sql的文件,其中包含testdb数据库的所有数据和结构。

使用pg_dump可以方便地备份和迁移PostgreSQL数据库,以确保数据的安全性和可移植性。同时,pg_dump也支持多种选项,可以根据需要进行灵活的设置。

18、pg_receivewal

用于流复制(streaming replication)中的物理备份。它可以将主服务器(master)上的WAL(Write-Ahead Log)日志文件流式传输到备份服务器(standby)上,以保持备份服务器与主服务器的数据同步。pg_receivewal通常与pg_basebackup一起使用,以在备份服务器上创建一个与主服务器相同的数据副本。

pg_receivewal命令的语法如下:

pg_receivewal [option...] [destination]

其中,选项说明如下:

-D, --directory=DIR:指定接收WAL日志文件的目录。
-U, --username=USERNAME:指定连接数据库的用户名。
-h, --host=HOSTNAME:指定连接数据库的主机名。
-p, --port=PORT:指定连接数据库的端口号。
-W, --password:提示输入连接数据库的密码。
–no-loop:接收完所有的WAL日志文件后退出。
–status-interval=SECS:指定打印接收状态的时间间隔。
–verbose:打印更详细的调试信息。

例如,要将主服务器上的WAL日志文件流式传输到备份服务器的目录/data/pg_wal中,可以使用以下命令:

pg_receivewal -D /data/pg_wal -U replicator -h 192.168.1.100 -p 5432 -W

这将在备份服务器上创建一个WAL日志文件目录/data/pg_wal,用于接收主服务器上的WAL日志文件流。需要注意的是,为了使用pg_receivewal进行流复制,主服务器必须是一个启用了WAL日志的PostgreSQL服务器,并且备份服务器必须已经在主服务器上注册为一个流复制的备份服务器。

19、pg_restore

用于恢复PostgreSQL数据库的备份文件。它支持多种备份文件格式,包括普通的SQL脚本、自定义格式、压缩格式等。pg_restore可以将备份文件中的数据和对象还原到一个新的或现有的PostgreSQL数据库中。

pg_restore命令的语法如下:

pg_restore [option...] [backupfile]

其中,选项说明如下:

-c, --clean:在还原之前清空数据库。
-C, --create:在还原之前创建新的数据库。
-d, --dbname=DBNAME:指定目标数据库名。
-h, --host=HOSTNAME:指定连接数据库的主机名。
-p, --port=PORT:指定连接数据库的端口号。
-U, --username=USERNAME:指定连接数据库的用户名。
-j, --jobs=NUM:指定使用的并发作业数。
-n, --schema=SCHEMA:指定要还原的模式(schema)。
-O, --no-owner:不还原对象的所有者。
-t, --table=TABLE:指定要还原的表(table)或其他对象。
-v, --verbose:打印详细的还原信息。
20、pg_test_timing

一个基准测试工具,用于测试PostgreSQL数据库的性能和响应时间。它可以模拟多个客户端同时访问数据库,执行一系列的SQL查询,并记录每个查询的响应时间和执行时间等信息。pg_test_timing可以帮助用户评估数据库的性能和优化效果,找出潜在的性能瓶颈。

pg_test_timing命令的语法如下:

pg_test_timing [option...] [dbname]

其中,选项说明如下:

-c, --clients=NUM:指定模拟的客户端数量,默认为1。
-T, --transactions=NUM:指定每个客户端执行的事务数量,默认为10。
-t, --time=SECONDS:指定测试的总时间(秒数),默认为60。
-h, --host=HOSTNAME:指定连接数据库的主机名。
-p, --port=PORT:指定连接数据库的端口号。
-U, --username=USERNAME:指定连接数据库的用户名。
–no-vacuum:禁止在测试结束后自动执行VACUUM操作。
–no-index:禁止在测试结束后自动创建索引。
21、pg_waldump

用于分析和解析PostgreSQL的WAL(Write-Ahead Log)日志文件。WAL是PostgreSQL中用于保证数据持久性和事务一致性的核心机制,它记录了数据库中所有修改操作的详细信息,包括插入、更新、删除等操作。

通过分析WAL日志文件,可以了解数据库中所有修改操作的历史记录,包括操作的时间、事务ID、表名、行号、修改前后的数据值等信息,从而可以进行数据恢复、故障排查等工作。

pg_waldump命令的语法如下:

pg_waldump [option...] WALFILE

其中,选项说明如下:

-p, --page:显示WAL日志中的每个页面内容。
-d, --rmgr=RMGR:指定要显示的资源管理器类型,例如:Heap、Btree等。
-n, --namespace=OID:指定要显示的命名空间OID。
-t, --table=OID:指定要显示的表OID。
-U, --unpack:显示WAL日志中的每个条目的详细内容。
-V, --verbose:显示更多的详细信息。
-?, --help:显示帮助信息。
22、vacuumlo

用于清理 PostgreSQL 数据库中的大型对象(Large Objects,简称 LOB)。大型对象是 PostgreSQL 中的二进制数据类型,通常用于存储大型文件、图像等。

vacuumlo removes unreferenced large objects from databases.

Usage:
  vacuumlo [OPTION]... DBNAME...

Options:
  -l, --limit=LIMIT         commit after removing each LIMIT large objects
  -n, --dry-run             don't remove large objects, just show what would be done
  -v, --verbose             write a lot of progress messages
  -V, --version             output version information, then exit
  -?, --help                show this help, then exit

Connection options:
  -h, --host=HOSTNAME       database server host or socket directory
  -p, --port=PORT           database server port
  -U, --username=USERNAME   user name to connect as
  -w, --no-password         never prompt for password
  -W, --password            force password prompt

23、createuser

用于创建新的数据库用户。使用 createuser 命令需要连接到 PostgreSQL 数据库,并具有创建用户的权限。

下面是 createuser 命令的基本语法:

createuser [options] [username]

其中,options 是一些可选的参数,username 是要创建的新用户的名称。如果不指定 username,则会使用当前操作系统用户的名称作为默认值。

下面是一些常用的 createuser 命令选项:

-D:不允许新用户创建自己的数据库。
-E:要求新用户使用加密密码登录。
-P:提示用户输入密码,并使用加密方式存储。
-R:不允许新用户创建新角色(即子用户)。
-S:不允许新用户创建超级用户。
-d:允许新用户创建新的数据库。
-l:列出所有现有的 PostgreSQL 角色。
-r:允许新用户创建新角色。
-s:允许新用户成为超级用户。

例如,要创建一个名为 testuser 的新用户,可以使用以下命令:

createuser -d -P testuser

这会提示您输入新用户的密码,并允许该用户创建新的数据库。如果成功创建用户,则会显示一条类似以下的消息:

CREATE ROLE testuser PASSWORD '********' CREATEDB;

这表示新用户已成功创建,密码已加密,并允许该用户创建新的数据库。

24、ecpg

是一个用于编写 PostgreSQL 服务器端嵌入式 SQL 程序的预处理器。它可以将 SQL 语句嵌入到 C 语言程序中,并在编译时将 SQL 语句转换为 C 函数调用。

使用 ecpg 可以使 C 语言程序与 PostgreSQL 数据库进行交互,从而实现对数据库的访问和操作。ecpg 支持大部分 SQL 标准,包括 SELECT、INSERT、UPDATE、DELETE、CREATE TABLE、DROP TABLE 等命令,并提供了一些扩展功能,如声明游标、处理结果集、处理事务等。

下面是一个使用 ecpg 的示例,该示例显示如何在 C 语言程序中执行 SQL 查询。

首先,我们需要使用 ecpg 编写 SQL 语句。在 C 语言程序中,可以使用 EXEC SQL 前缀来标记 SQL 语句。例如,以下代码使用 ecpg 编写了一个查询所有用户的 SQL 语句:

EXEC SQL BEGIN DECLARE SECTION;
char username[20];
EXEC SQL END DECLARE SECTION;

EXEC SQL SELECT name INTO :username FROM users;

然后,可以使用 ecpg 命令将上述代码转换为 C 语言程序。例如,以下命令将 query.sql 文件中的 SQL 语句转换为 C 语言程序:

ecpg query.sql

这会生成一个名为 query.c 的 C 语言程序,其中包含了上述 SQL 查询的代码。

最后,可以使用 C 编译器编译生成的 query.c 文件,并链接到 PostgreSQL 客户端库中。例如,以下命令使用 GCC 编译器编译 query.c 文件,并链接到 PostgreSQL 客户端库中:

gcc -o query query.c -lecpg -lpq

这会生成一个名为 query 的可执行文件,可以使用该文件执行上述 SQL 查询并获取查询结果。

需要注意的是,使用 ecpg 编写的程序需要连接到 PostgreSQL 数据库,并具有对数据库的访问权限。可以使用 PGUSER、PGPASSWORD、PGDATABASE 等环境变量来指定连接到 PostgreSQL 数据库的用户名、密码和数据库名称。例如:

PGUSER=myuser PGPASSWORD=mypassword PGDATABASE=mydb ./query

这会使用 myuser 用户名和 mypassword 密码连接到名为 mydb 的 PostgreSQL 数据库,并执行上述 SQL 查询。

25、pg_amcheck

用于检查 PostgreSQL 索引和存储引擎的一致性和完整性的工具。它可以检测到索引中的损坏和不一致,并帮助修复这些问题。

使用 pg_amcheck 可以帮助管理员及时发现索引中的问题,并防止数据丢失和性能下降。它支持所有 PostgreSQL 默认的存储引擎,包括 B-tree、Hash、GiST 和 SP-GiST 等。

以下是一个使用 pg_amcheck 的示例,该示例检查名为 mytable 的表中的索引是否存在问题。

首先,可以使用以下命令安装 pg_amcheck 扩展:

CREATE EXTENSION pg_amcheck;

然后,可以使用以下命令检查名为 myindex 的索引是否存在问题:

SELECT * FROM pg_amcheck('mytable', 'myindex');

如果索引存在问题,pg_amcheck 会返回错误消息,并指示问题的类型和位置。例如,以下是一个 pg_amcheck 返回的示例错误消息:

ERROR:  index "myindex" is not consistent: number of heap tuples (10) does not match number of index tuples (9)
DETAIL:  The index has 9 entries, but there are 10 tuples in the table.

该错误消息指示索引 myindex 中存在一个不一致性,即索引中的元组数量与表中的元组数量不匹配。

最后,可以使用以下命令修复索引中的问题:

SELECT pg_index_consistency_check('myindex');

该命令会检查并修复索引中的问题,如果修复成功,则返回 true,否则返回 false。

需要注意的是,pg_amcheck 只能检查存储引擎中的问题,而不能检查应用程序中可能存在的问题。因此,在使用 pg_amcheck 之前,应该确保应用程序已经正确地使用了索引,并避免了潜在的问题。

26、pgbench

用于测试 PostgreSQL 数据库的性能和吞吐量。它可以模拟多个客户端并发地执行各种任务,例如插入、更新和查询数据。

使用 pgbench 可以帮助管理员评估 PostgreSQL 数据库的性能和稳定性,并找出系统中可能存在的瓶颈。它还可以帮助开发人员测试他们的应用程序在高负载情况下的性能表现。

以下是一个使用 pgbench 的示例,该示例模拟 10 个并发客户端,每个客户端执行 1000 次事务,每个事务包含 5 个随机查询:

首先,可以使用以下命令创建一个名为 mydatabase 的数据库:

createdb mydatabase

然后,可以使用以下命令初始化数据库并生成测试数据:

pgbench -i mydatabase

该命令会创建一个名为 pgbench_accounts 的表,并向其中插入 100000 条随机数据。

接下来,可以使用以下命令运行基准测试:

pgbench -c 10 -j 2 -T 60 -U postgres mydatabase

该命令会模拟 10 个并发客户端,每个客户端使用 2 个线程并执行 60 秒。每个事务包含 5 个随机查询,其中包括查询、插入和更新操作。

在测试运行期间,pgbench 会输出各种性能指标,例如每秒事务数、每秒查询数和平均事务延迟等。

27、pg_dumpall

用于备份PostgreSQL数据库系统中所有数据库的命令行工具。它可以将所有的数据库和它们的对象(如表、索引、触发器等)以及角色和权限等信息全部备份到一个文件中。

使用pg_dumpall需要在命令行中输入以下命令:

pg_dumpall > backup.sql

其中,">"符号表示将备份输出到一个文件backup.sql中。备份文件的名称和路径可以根据需要进行修改。执行完该命令后,系统会提示用户输入PostgreSQL管理员密码以确认备份操作。

备份完成后,可以使用以下命令来还原备份:

psql -f backup.sql postgres
28、pg_recvlogical

pg_recvlogical是一个用于从PostgreSQL中获取逻辑复制流的命令行工具。逻辑复制流是一种基于逻辑对象而非二进制对象的复制方式,可以更加灵活地进行数据复制和同步。

pg_recvlogical的主要功能是接收逻辑复制流并将其输出到标准输出或文件中。使用pg_recvlogical需要在命令行中输入以下命令:

pg_recvlogical -d dbname -S slotname [--startpos=startpos] [--endpos=endpos] [--option=optionname=value] > output_file

其中,dbname为要获取逻辑复制流的数据库名称,slotname为复制流槽名称。可以使用pg_create_logical_replication_slot命令创建复制流槽。startpos和endpos参数用于指定获取复制流的起始和结束位置,可以是一个LSN(逻辑序列号)或XID(事务ID)。option参数用于指定其他的选项,例如过滤表或发布DDL语句等。

29、pg_rewind

用于将PostgreSQL数据库回滚到指定时间点的命令行工具。它可以将数据库目录回滚到指定的WAL位置或时间点,以便进行数据恢复或切换主备服务器等操作。

使用pg_rewind需要在命令行中输入以下命令:

pg_rewind -D /path/to/data/directory --target-pgdata=target_data_directory [--target-history=target_timeline_history_file] [--source-server=source_conninfo_string]

其中,/path/to/data/directory为当前的数据库目录,target_data_directory为要回滚到的目标数据库目录。可以使用pg_basebackup命令创建一个目标目录的副本作为回滚目标。target_timeline_history_file为指定的时间轴历史文件的路径,source_conninfo_string为源数据库连接信息,可以是一个libpq连接字符串。

执行完该命令后,系统会自动将目标数据库目录回滚到指定的WAL位置或时间点,并进行一些必要的清理工作

30、pg_upgrade

用于升级PostgreSQL数据库的命令行工具。它可以将旧版本的数据库升级到新版本,并保留数据和配置文件等信息。

使用pg_upgrade需要在命令行中输入以下命令:

pg_upgrade -b oldbindir -B newbindir -d olddatadir -D newdatadir [-k] [-c] [-o options]
其中,oldbindir和newbindir分别为旧版本和新版本的二进制文件目录,olddatadir和newdatadir分别为旧版本和新版本的数据库目录。-k参数表示在升级后保留旧版本的数据库目录,-c参数表示使用旧版本的配置文件,-o参数用于传递其他选项,例如指定需要升级的数据库名称等。

31、postgres

postgres命令是用于启动、停止和管理PostgreSQL数据库服务器的命令行工具。它可以用于启动和停止服务器、创建和管理用户和数据库、执行SQL查询和操作等。

以下是postgres命令的一些常用用法:

1、启动PostgreSQL服务器:

postgres -D /path/to/data/directory
其中,/path/to/data/directory为数据库目录。

2、停止PostgreSQL服务器:

postgres -D /path/to/data/directory stop
3、创建新用户:

postgres -D /path/to/data/directory -c "CREATE USER username WITH PASSWORD 'password';"
其中,username为新用户的名称,password为新用户的密码。

4、创建新数据库:

postgres -D /path/to/data/directory -c "CREATE DATABASE dbname OWNER username;"
其中,dbname为新数据库的名称,username为新数据库的所有者。

5、执行SQL查询:

postgres -D /path/to/data/directory -c "SELECT * FROM tablename;"
32、reindexdb

用于重建PostgreSQL数据库索引的命令行工具。它可以对指定的数据库或表重建索引,以提高数据库查询性能和减少索引损坏的风险。

使用reindexdb需要在命令行中输入以下命令:

reindexdb -d dbname [-t tablename] [-i indexname] [-U username] [-e]

其中,dbname为要重建索引的数据库名称;-t参数用于指定要重建索引的表名;-i参数用于指定要重建的索引名称;-U参数用于指定连接数据库时使用的用户名;-e参数用于启用安全模式。

执行该命令后,系统会自动进行索引重建操作,并输出重建进度和结果等信息。如果没有指定表名或索引名称,则会对整个数据库进行重建索引操作。

5、主要目录文件说明

[postgres@19c01 data]$ ls
base              log           pg_hba.conf    pg_multixact  pg_serial     pg_stat_tmp  pg_twophase  pg_xact               postmaster.opts
current_logfiles  pg_commit_ts  pg_ident.conf  pg_notify     pg_snapshots  pg_subtrans  PG_VERSION   postgresql.auto.conf  postmaster.pid
global            pg_dynshmem   pg_logical     pg_replslot   pg_stat       pg_tblspc    pg_wal       postgresql.conf

base 每个数据库对于的子目录的子目录
global 包含集簇范围的表的文件和全局控制信息等。
pg_commit_ts 包含事务提交时间戳数据的子目录
pg_dynshmem 包含被动态共享内存子系统所使用文件的子目录
pg_logical 包含用于逻辑复制的状态数据的子目录
pg_multixact 包含多事务状态数据的子目录(用户共享的行锁)
pg_notify 包含LISTEN/NOTIFY状态数据的子目录
pg_repslot 包含复制槽数据的子目录
pg_serial 包含已提交的可序列化事务信息的子目录
pg_snapshots 包含快照的子目录
pg_stat 包含用于统计子系统的永久文件的子目录
pg_stat_tmp 包含用于统计信息子系统临时文件的子目录
pg_subtrans 包含子事务状态数据的子目录
pg_tblspc 包含指向表空间的符号链接的子目录
pg_twophase 用于预备事务状态文件的子目录
pg_wal 保存预写日志
pg_xact 包含事务提交状态数据的子目录, 记录事务提交状态数据
postgresql.conf 参数文件
pg_hba.conf 客户端认证控制文件(host-based access control )
postgresql.auto.conf 参数文件,只保存alter system命令修改的参数
postmaster.opts 记录服务器最后一次启动时使用的命令行参数
postmaster.pid 记录进程的信息

6、PostgreSQL 模块及代码目录结构

[postgres@19c01 include]$ ls
access     common    funcapi.h      Makefile     partitioning        pg_config_os.h  port            postmaster    stamp-ext-h  utils
backup     datatype  getaddrinfo.h  mb           pg_config_ext.h     pg_getopt.h     portability     regex         stamp-h      windowapi.h
bootstrap  executor  getopt_long.h  miscadmin.h  pg_config_ext.h.in  pgstat.h        port.h          replication   statistics
catalog    fe_utils  jit            nodes        pg_config.h         pgtar.h         postgres_ext.h  rewrite       storage
c.h        fmgr.h    lib            optimizer    pg_config.h.in      pgtime.h        postgres_fe.h   rusagestub.h  tcop
commands   foreign   libpq          parser       pg_config_manual.h  pg_trace.h      postgres.h      snowball      tsearch
目录文件 说明
Makefile makefile
access/ 各种存储访问方法(在各个子目录下) common(共同函数)、gin (Generalized Inverted Index通
用逆向索引)、gist (Generalized Search Tree通用索引)、 hash (哈希索引)、heap (heap的访问方法)
、 index (通用索引函数)、 nbtree (Btree函数)、transam (事务处理)
bootstrap/ 数据库的初始化处理(initdb的时候)
catalog/ 系统目录
commands/ SELECT/INSERT/UPDATE/DELETE以为的SQL文的处理
executor/ 执行器(访问的执行)
foreign/ FDW(Foreign Data Wrapper)
lib/ 公共函数
libpq/ 前端/后端通信处理
main/ postgres的主函数
nodes/ 构文树节点相关的处理函数
optimizer/ 优化器
parser/ SQL构文解析器
port/ 平台相关的代码
postmaster/ postmaster的主函数 (常驻postgres)
replication/ streaming replication
regex/ 正则处理
rewrite/ 规则及视图相关的重写处理
snowball/ 全文检索相关(语干处理)
storage/ 共享内存、磁盘上的存储、缓存等全部一次/二次记录管理(以下的目录)buffer/(缓存管理)、
file/(文件)、freespace/(Fee Space Map管理) ipc/(进程间通信)、large_object /(大对象的访问函数)、
lmgr/(锁管理)、page/(页面访问相关函数)、 smgr/(存储管理器)
tcop/ postgres (数据库引擎的进程)的主要部分
tsearch/ 全文检索
utils/ 各种模块(以下目录) adt/(嵌入的数据类型)、cache/(缓存管理)、 error/(错误处理)、fmgr/(函数管理)、hash/(hash函数)、 init/(数据库初始化、postgres的初期处理)、 mb/(多字节文字处理)、misc/(其他)、mmgr/(内存的管理函数)、 resowner/(查询处理中的数据(buffer pin及表锁)的管理)、sort/(排序处理)、time/(事务的 MVCC 管理)
最后修改时间:2023-05-10 10:49:31
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论