前提条件:
- 确保已经安装了PostgreSQL数据库及其客户端工具,并且 pg_dump 命令在系统路径中。
- 具备对目标数据库的连接权限和表的读取权限。
脚本内容:
bash
#!/bin/bash
# 数据库连接信息
DB_USER="your_username"
DB_PASSWORD="your_password"
DB_HOST="your_host"
DB_PORT="your_port"
DB_NAME="your_database"
# 要备份的表名
TABLE_NAME="your_table"
# 备份条件
WHERE_CONDITION="column_name = 'value'"
# 备份文件路径
BACKUP_FILE="/path/to/backup.sql"
# 设置环境变量以提供密码
export PGPASSWORD=$DB_PASSWORD
# 执行pg_dump命令备份指定表指定条件的数据
pg_dump -U $DB_USER -h $DB_HOST -p $DB_PORT -t $TABLE_NAME -a -Fp --inserts -c -w -v --data-only --column-inserts --exclude-table-data='*' --table-data-only -f $BACKUP_FILE $DB_NAME --where="$WHERE_CONDITION"
# 取消环境变量以避免密码泄露风险
unset PGPASSWORD
脚本说明:
- 数据库连接信息部分:
- DB_USER :数据库用户名。
- DB_PASSWORD :数据库用户密码。注意,在实际使用中,应避免在脚本中明文存储密码,可考虑使用更安全的方式,如环境变量或密钥管理系统。
- DB_HOST :数据库主机地址。
- DB_PORT :数据库端口号。
- DB_NAME :要备份的数据库名称。
- 表和备份条件部分:
- TABLE_NAME :指定要备份的表名。
- WHERE_CONDITION :指定备份数据的条件,例如 column_name = 'value' ,这里可以根据实际需求修改为具体的SQL条件。
- 备份文件路径部分:
- BACKUP_FILE :指定备份文件的保存路径及文件名。
- pg_dump 命令部分:
- -U $DB_USER :指定数据库用户名。
- -h $DB_HOST :指定数据库主机地址。
- -p $DB_PORT :指定数据库端口号。
- -t $TABLE_NAME :指定要备份的表。
- -a :只备份数据,不备份模式(表结构等)。
- -Fp :使用纯文本格式备份。
- --inserts :使用 INSERT 语句备份数据,这样恢复时不需要依赖表结构已存在。
- -c :在恢复时添加 DELETE 语句以清空表数据,确保恢复的数据是完整的备份数据。
- -w :不提示输入密码(因为通过 PGPASSWORD 环境变量提供了密码)。
- -v :显示详细信息。
- --data - only :只备份数据。
- --column - inserts :使用带列名的 INSERT 语句,即 INSERT INTO table_name (column1, column2) VALUES (value1, value2) 形式。
- --exclude - table - data='*' :排除所有表的数据(除了指定的表)。
- --table - data - only :只备份表的数据。
- -f $BACKUP_FILE :指定备份文件的输出路径。
- --where="$WHERE_CONDITION" :指定备份数据的条件。
- 环境变量部分:
- export PGPASSWORD=$DB_PASSWORD :设置环境变量 PGPASSWORD 以提供数据库密码,这样 pg_dump 命令在连接数据库时不需要手动输入密码。
- unset PGPASSWORD :备份完成后取消环境变量,以避免密码泄露风险。
将上述脚本保存为一个文件(例如 backup_table.sh ),给予可执行权限( chmod +x backup_table.sh ),然后根据实际的数据库和表信息修改脚本中的相应部分,即可运行备份。