Skip to content

PostgreSQL 工具命令常用选项

通用连接选项

PostgreSQL工具命令通常支持以下通用连接选项,用于连接到数据库服务器:

选项缩写描述示例
--host=HOSTNAME-h HOSTNAME指定数据库服务器的主机名或IP地址-h localhost-h 192.168.1.100
--port=PORT-p PORT指定数据库服务器的端口号-p 5432
--dbname=DBNAME-d DBNAME指定要连接的数据库名称-d mydb
--username=USERNAME-U USERNAME指定连接数据库的用户名-U postgres
--no-password-w不提示输入密码,适用于已配置信任认证的环境-w
--password-W强制提示输入密码-W
--maintenance-db=DBNAME指定维护操作使用的数据库名称--maintenance-db postgres

适用工具:psql, pg_dump, pg_restore, pg_basebackup, createdb, dropdb, createuser, dropuser等

示例

bash
# 使用通用连接选项连接到数据库
psql -h localhost -p 5432 -U postgres -d mydb -W

# 备份数据库时使用连接选项
pg_dump -h remote-server -p 5432 -U backup_user -d mydb -f backup.sql

认证选项

认证选项用于控制工具命令如何进行身份验证:

选项缩写描述示例
--no-password-w不提示输入密码-w
--password-W强制提示输入密码-W
--auth=METHOD指定认证方法--auth md5

适用工具:几乎所有PostgreSQL客户端工具

示例

bash
# 不提示密码,适用于信任认证环境
psql -h localhost -U postgres -d mydb -w

# 强制提示密码
pg_restore -h localhost -U postgres -d mydb -W -f backup.dump

输出选项

输出选项用于控制工具命令的输出格式和行为:

选项缩写描述示例适用工具
--format=FORMAT-F FORMAT指定输出格式-F c (自定义格式)pg_dump, pg_restore, pg_basebackup
--file=FILENAME-f FILENAME将输出写入指定文件-f output.sql大多数工具
--verbose-v详细输出模式,显示更多信息-v大多数工具
--quiet-q安静模式,减少输出信息-q大多数工具
--progress-P显示进度信息-Ppg_dump, pg_restore, pg_basebackup
--compress=LEVEL-Z LEVEL指定压缩级别 (0-9)-Z 5pg_dump, pg_basebackup
--gzip-z使用gzip压缩输出-zpg_basebackup
--no-owner-O不恢复对象所有者-Opg_restore
--no-privileges-x不恢复权限-xpg_restore

示例

bash
# 使用详细模式备份数据库
pg_dump -h localhost -U postgres -d mydb -F c -v -f backup.dump

# 显示恢复进度
pg_restore -h localhost -U postgres -d mydb -P -v backup.dump

# 使用压缩备份
pg_basebackup -h localhost -U replication -D /backup -z -P

事务选项

事务选项用于控制工具命令如何处理事务:

选项缩写描述示例适用工具
--single-transaction-1将整个操作作为单个事务执行-1pg_dump, psql
--exit-on-error-e遇到错误时退出-epg_restore, psql
--clean-c在创建对象前先删除现有对象-cpg_dump, pg_restore
--create-C在操作前创建数据库-Cpg_dump, pg_restore

示例

bash
# 将脚本作为单个事务执行
psql -h localhost -U postgres -d mydb -1 -f script.sql

# 恢复前清理现有对象
pg_restore -h localhost -U postgres -d mydb -c -v backup.dump

# 备份时包含创建数据库语句
pg_dump -h localhost -U postgres -d mydb -C -f backup.sql

数据选项

数据选项用于控制工具命令如何处理数据:

选项缩写描述示例适用工具
--data-only-a只处理数据,不处理schema-apg_dump
--schema-only-s只处理schema,不处理数据-spg_dump
--table=TABLE-t TABLE指定要处理的表-t userspg_dump, psql
--schema=SCHEMA-n SCHEMA指定要处理的schema-n publicpg_dump
--exclude-table=TABLE-T TABLE排除指定的表-T temp_tablepg_dump
--exclude-schema=SCHEMA-N SCHEMA排除指定的schema-N test_schemapg_dump

示例

bash
# 只备份数据
pg_dump -h localhost -U postgres -d mydb -a -f data.sql

# 只备份schema
pg_dump -h localhost -U postgres -d mydb -s -f schema.sql

# 备份指定表
pg_dump -h localhost -U postgres -d mydb -t users -t orders -f tables.sql

# 备份指定schema
pg_dump -h localhost -U postgres -d mydb -n public -n sales -f schemas.sql

WAL相关选项

WAL (Write-Ahead Log) 相关选项用于控制工具命令如何处理WAL日志:

选项缩写描述示例适用工具
--wal-method=METHOD-X METHOD指定WAL获取方法-X streampg_basebackup
--wal-segsize=SIZE指定WAL段大小--wal-segsize 64initdb
--no-sync不等待数据写入磁盘--no-syncpg_basebackup, initdb

示例

bash
# 使用流式WAL获取方法进行基础备份
pg_basebackup -h localhost -U replication -D /backup -X stream -v

# 创建数据库集群时指定WAL段大小
initdb -D /data/postgres --wal-segsize 64

模式选项

模式选项用于控制工具命令如何处理数据库对象的模式:

选项缩写描述示例适用工具
--schema=SCHEMA-n SCHEMA指定要处理的schema-n publicpg_dump
--exclude-schema=SCHEMA-N SCHEMA排除指定的schema-N test_schemapg_dump
--include=PATTERN包含匹配pattern的对象--include "*.table"pg_dump
--exclude=PATTERN排除匹配pattern的对象--exclude "temp_*"pg_dump

示例

bash
# 备份多个schema
pg_dump -h localhost -U postgres -d mydb -n public -n hr -n sales -f schemas.sql

# 排除测试schema
pg_dump -h localhost -U postgres -d mydb -N test -N dev -f production.sql

表空间选项

表空间选项用于控制工具命令如何处理表空间:

选项缩写描述示例适用工具
--tablespace-mapping=OLD=new将旧表空间映射到新表空间--tablespace-mapping old_ts=new_tspg_restore
--tablespaces-only-t只备份表空间-tpg_dumpall
--tablespace=TABLESPACE指定新对象使用的表空间--tablespace ts_datacreatedb

示例

bash
# 恢复时映射表空间
pg_restore -h localhost -U postgres -d mydb --tablespace-mapping old_data=new_data -v backup.dump

# 只备份表空间
pg_dumpall -h localhost -U postgres -t -f tablespaces.sql

# 创建数据库时指定表空间
createdb -h localhost -U postgres -D ts_data newdb

并行处理选项

并行处理选项用于控制工具命令如何使用并行处理:

选项缩写描述示例适用工具
--jobs=NUM-j NUM指定并行作业数-j 4pg_dump, pg_restore

示例

bash
# 使用4个并行作业备份数据库
pg_dump -h localhost -U postgres -d mydb -F d -j 4 -f /backup/parallel

# 使用4个并行作业恢复数据库
pg_restore -h localhost -U postgres -d mydb -j 4 -v /backup/parallel

日志选项

日志选项用于控制工具命令如何处理日志:

选项缩写描述示例适用工具
--log-file=FILENAME-l FILENAME指定日志文件-l /var/log/pg_ctl.logpg_ctl
--log-destination=DEST指定日志目标--log-destination stderrinitdb
--redirect-stderr将stderr重定向到日志文件--redirect-stderrpg_ctl

示例

bash
# 启动服务器时指定日志文件
pg_ctl -D /data/postgres -l /var/log/postgres.log start

# 初始化数据库集群时指定日志目标
initdb -D /data/postgres --log-destination csvlog

其他常用选项

选项缩写描述示例适用工具
--version-V显示版本信息并退出-V所有工具
--help-?显示帮助信息并退出-?所有工具
--list-l列出数据库或对象-lpsql, createdb
--echo-e显示执行的命令-ecreatedb, dropdb, psql
--interactive-i交互式确认-idropdb, dropuser
--template=TEMPLATE-T TEMPLATE指定模板数据库-T template0createdb
--encoding=ENCODING-E ENCODING指定字符编码-E UTF8createdb, pg_dump
--locale=LOCALE-l LOCALE指定区域设置-l en_US.UTF-8createdb, initdb
--lc-collate=LOCALE-C LOCALE指定排序规则-C en_US.UTF-8createdb, initdb
--lc-ctype=LOCALE-c LOCALE指定字符分类-c en_US.UTF-8createdb, initdb

示例

bash
# 显示工具版本
psql -V
pg_dump -V

# 获取帮助信息
pg_basebackup --help

# 交互式删除数据库
dropdb -h localhost -U postgres -i mydb

# 创建数据库时指定编码和区域设置
createdb -h localhost -U postgres -E UTF8 -l en_US.UTF-8 newdb

常用选项组合示例

1. 备份数据库常用选项组合

bash
# 完整备份数据库,包含schema和数据,使用自定义格式,压缩级别5,详细模式
pg_dump -h localhost -p 5432 -U postgres -d mydb -F c -Z 5 -v -f mydb_backup.dump

# 只备份数据,使用纯文本格式
pg_dump -h localhost -p 5432 -U postgres -d mydb -a -F p -f mydb_data.sql

# 并行备份,使用目录格式,4个并行作业
pg_dump -h localhost -p 5432 -U postgres -d mydb -F d -j 4 -v -f /backup/mydb_parallel

2. 恢复数据库常用选项组合

bash
# 恢复数据库,详细模式,显示进度
pg_restore -h localhost -p 5432 -U postgres -d mydb -v -P mydb_backup.dump

# 恢复前清理现有对象,不恢复所有者和权限
pg_restore -h localhost -p 5432 -U postgres -d mydb -c -O -x -v mydb_backup.dump

# 并行恢复,4个并行作业
pg_restore -h localhost -p 5432 -U postgres -d mydb -j 4 -v /backup/mydb_parallel

3. 基础备份常用选项组合

bash
# 流式WAL,tar格式,gzip压缩,显示进度
pg_basebackup -h localhost -p 5432 -U replication -D /backup/base -F t -X stream -z -P -v

# 普通格式,fetch WAL,详细模式
pg_basebackup -h localhost -p 5432 -U replication -D /backup/base -F p -X fetch -v

常见问题(FAQ)

Q1:如何查看某个工具命令的所有选项?

A1:可以使用--help-?选项查看工具命令的所有可用选项:

bash
# 查看psql的所有选项
psql --help

# 查看pg_dump的所有选项
pg_dump -?

Q2:如何在脚本中使用工具命令的选项?

A2:在脚本中使用工具命令选项的示例:

bash
#!/bin/bash
# 自动备份脚本
BACKUP_DIR="/backup"
DB_NAME="mydb"
USER="postgres"
HOST="localhost"
PORT="5432"
DATE=$(date +%Y%m%d_%H%M%S)

# 创建备份目录
mkdir -p $BACKUP_DIR

# 使用常用选项组合备份数据库
pg_dump -h $HOST -p $PORT -U $USER -d $DB_NAME -F c -Z 5 -v -f $BACKUP_DIR/${DB_NAME}_${DATE}.dump

# 保留最近30天的备份
find $BACKUP_DIR -name "${DB_NAME}_*.dump" -type f -mtime +30 -delete

Q3:如何在Windows系统中使用这些选项?

A3:在Windows系统中使用PostgreSQL工具命令的选项与Linux/Unix系统基本相同,只需注意路径分隔符使用反斜杠\或正斜杠/

cmd
REM Windows系统中备份数据库
pg_dump -h localhost -p 5432 -U postgres -d mydb -F c -Z 5 -v -f C:\backup\mydb_backup.dump

Q4:如何优化工具命令的执行性能?

A4:优化工具命令执行性能的建议:

  1. 对于大型数据库备份,使用并行备份(-j选项)
  2. 使用合适的压缩级别,平衡压缩率和CPU使用率
  3. 备份到快速存储设备(如SSD)
  4. 避免在业务高峰期执行大型备份操作
  5. 对于恢复操作,使用并行恢复(-j选项)
  6. 恢复前关闭不必要的服务和应用

Q5:如何确保工具命令的安全性?

A5:确保工具命令安全性的建议:

  1. 不要在命令行中明文指定密码,使用.pgpass文件或环境变量
  2. 限制备份文件的访问权限(如chmod 600 backup.dump
  3. 加密敏感数据的备份
  4. 使用专用的备份用户,授予最小必要权限
  5. 定期轮换备份用户密码
  6. 监控工具命令的执行情况