You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免繁琐输入,用pg_dump备份指定Schema中的部分表?

批量指定Schema内特定表的pg_dump备份方案

当然有办法,以下几种方案可以避免逐个输入-t参数,让脚本更简洁易维护:

1. 使用--table-file参数(推荐)

pg_dump支持从文件中读取需要备份的表列表,这是最直接的解决方案:

步骤:

  • 创建一个文本文件(比如backup_tables.txt),每行写入一个需要备份的全限定表名(格式为schema_name.table_name):
student.student_basic_info
student.student_course_scores
employee.employee_personal_profile
employee.employee_salary_record
# 继续添加剩余需要备份的表...
  • 执行pg_dump命令时指定该文件:
pg_dump -d your_database_name --table-file=backup_tables.txt -F c -b -v -f targeted_backup.dump

参数说明:

  • -F c:生成PostgreSQL自定义格式备份(压缩率高、恢复灵活)
  • -b:包含大对象(如bytea类型字段)
  • -v:显示详细备份过程
  • -f:指定输出备份文件路径

2. Shell变量拼接(临时快速操作)

如果不想额外创建文件,可以用Shell数组存储表名,动态生成-t参数列表:

# 定义需要备份的表数组(全限定名)
target_tables=(
  "student.student_basic_info"
  "student.student_course_scores"
  "employee.employee_personal_profile"
  # 补充其他表...
)

# 生成pg_dump参数列表
pg_dump_options=()
for table in "${target_tables[@]}"; do
  pg_dump_options+=("-t" "$table")
done

# 执行备份
pg_dump -d your_database_name "${pg_dump_options[@]}" -F c -b -v -f targeted_backup.dump

3. 动态生成表列表(适合有规律的表筛选)

如果需要备份的表可以通过数据库查询筛选(比如按命名规则、创建时间等),可以用psql直接生成表列表文件:

# 从pg_catalog中查询并导出需要备份的表名
psql -d your_database_name -t -c "
  SELECT schemaname || '.' || tablename
  FROM pg_tables
  WHERE (schemaname = 'student' AND tablename IN ('student_basic_info', 'student_course_scores'))
     OR (schemaname = 'employee' AND tablename IN ('employee_personal_profile', 'employee_salary_record'))
" > backup_tables.txt

# 再用--table-file参数备份
pg_dump -d your_database_name --table-file=backup_tables.txt -F c -b -v -f targeted_backup.dump

注意事项:

  • 必须使用全限定表名(schema.table),避免不同Schema下重名表导致备份错误
  • 如果表名包含特殊字符(如空格、大写字母),需要用双引号包裹,比如student."Student_Info"
  • 自定义格式备份恢复时,使用pg_restore工具更便捷,支持选择性恢复表

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:32:38