ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PostgreSQL 数据库备份与恢复实战:pg_dump 自定义格式与 pg_restore 完整指南

PostgreSQL 数据库备份与恢复实战:pg_dump 自定义格式与 pg_restore 完整指南 文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载PostgreSQL 自带两套命令行工具用于数据库的导出与导入pg_dump负责将数据库内容导出Dumppg_restore负责将导出结果还原Restore。本文以本项目 postgres/dump-and-restore-a-database.md 记录的核心用法为主线完整讲解自定义格式Custom Format导出的优势、单库备份与恢复的标准流程、角色依赖等关键注意事项并结合仓库内其他相关笔记补充全集群导出、指定表导出、纯结构导出等实战变体帮助你构建一套可靠、可复用的 PostgreSQL 备份恢复方案。认识 pg_dump 与 pg_restore 这对搭档在 PostgreSQL 的备份工具箱中pg_dump与pg_restore是分别负责导出与还原的两个命令行工具pg_dump以逻辑备份的方式把指定数据库的结构与数据导出到标准输出stdout或文件中pg_restore读取pg_dump生成的备份文件将其中包含的对象重建到目标数据库中。两者的组合适用于跨版本迁移、本地开发环境复制、上线前的数据快照等绝大多数日常场景。仓库中的另一篇笔记 postgres/check-if-clusters-are-upgrade-compatible.md 也提到相比pg_upgrade这类物理升级手段pg_dumppg_restore通常是更通用、步骤更可控的迁移路径。用 -Fc 生成自定义格式备份最基本的备份方式是把数据库导出成自定义格式Custom Format只需给pg_dump加上-Fc标志$ pg_dump -Fc my_database my_database.dump这里.dump扩展名只是社区约定俗成的命名习惯见 postgres/dump-and-restore-a-database.md并非强制要求但建议沿用以便他人一眼识别备份文件类型。自定义格式带来的三个核心收益相比输出普通 SQL 文本的默认格式-Fc自定义格式在以下三个方面有明显优势体积显著压缩自定义格式内置压缩输出文件比等价的 SQL 转储plain SQL dump小得多节省磁盘空间与传输带宽。恢复更灵活自定义格式是 PostgreSQL 专有的归档格式恢复时可以通过pg_restore的丰富选项选择恢复全部、部分对象或按表、按模式选择性还原甚至可以中途调整目标详见下文恢复的灵活性。支持并行处理导出阶段如果机器有多个 CPU 核心可以用-j--jobs参数并行执行 dump相应地恢复阶段也能用-j参数以多个并发作业的方式加快pg_restore。这是 SQL 纯文本格式无法做到的。一个充分利用多核并行能力的示例# 4 个并行作业导出 $ pg_dump -Fc -j 4 my_database my_database.dump # 4 个并行作业恢复 $ pg_restore -d my_new_database -j 4 my_database.dump需要注意的是并行恢复要求目标连接数充足并且自定义格式是使用并行选项的前提条件。恢复先建库再 pg_restorepg_dump默认只导出数据库内部的 Schema 与数据不会创建数据库本身。因此恢复前需要先手动创建一个全新的空数据库再交给pg_restore填充$ createdb my_new_database $ pg_restore -d my_new_database my_database.dump这条命令会在my_new_database中重建被导出的表、索引、序列、约束等全部对象并载入数据。如果你想在恢复时一并重建数据库本身可以使用pg_restore的--create-C标志让恢复过程先执行CREATE DATABASE结合--clean-c则会在重建前先清理已存在的同名对象适合反复执行恢复的 CI 场景$ pg_restore -d postgres --create --clean my_database.dump关键注意点角色依赖这是新手最容易踩的坑。pg_dump导出的表等对象通常会依赖某个用户角色user role作为属主——如果目标集群上不存在这个角色恢复过程会报错失败。因此在恢复之前务必确认该角色已经在目标数据库集群中创建。若确实缺失用createuser命令补上即可$ createuser the_missing_role从单库备份到全家桶更完整的备份恢复变体仓库中围绕pg_dump系列工具还有多篇实战笔记与本文主题一脉相承遇到对应场景可直接参考整集群导出pg_dumpall如果你要迁移的不止一个数据库而是整个 PostgreSQL 实例例如重装本地 Postgres 前保存所有数据应使用随 PostgreSQL 一起安装的pg_dumpall。它会将数据目录下所有数据库以 SQL 形式输出到 stdout可重定向为.sql文件$ pg_dumpall postgres_13_1_cluster_dump.sql重装后可以用psql直接回放该 SQL 文件$ psql -f postgres_13_1_cluster_dump.sql postgrespg_dumpall还支持用--exclude-database排除特定模式的数据库——例如重装场景下知道template0、template1模板库会随新安装自动创建可将其排除以避免冲突$ pg_dumpall \ --exclude-databasetemplate* \ postgres_13_1_cluster_dump.sql完整过程详见 postgres/dump-all-databases-to-a-sql-file.md。只导出指定表-t 的多次使用与模式匹配当只需要备份个别表而非整个数据库时用-t标志指定表名并且多次使用该标志即可包含多张表$ pg_dump -t users -t users_roles -t roles my_database roles.dump.sql-t也支持正则模式一次匹配多张表$ pg_dump -t users*|roles my_database roles.dump.sql模式写法更简洁但需要你对数据模型有清晰认识以免意外多包或少包了表详见 postgres/include-multiple-tables-in-a-pg-dump.md。只要结构不要数据--schema-only若目标是拿到重建某张表的 DDL含默认值、not null约束、serial 序列、外键约束、索引等组合-t与--schema-only即可$ pg_dump -t users --schema-only my_database users.schema.sql生成的users.schema.sql是一串 SQL 命令既可以直接喂给pg_restore也可以交给psql手动执行详见 postgres/dump-the-sql-needed-recreate-a-table.md。导出查询结果COPY / \copy若只是想把查询结果分享给没有数据库访问权限的同事PostgreSQL 的COPY命令能把结果直接落盘为 CSVcopy (select * from pokemons) to /tmp/pokemon_dump.csv csv header;权限受限的用户可改用 psql 的\copy元命令客户端本地读写文件无需服务端文件权限详见 postgres/export-query-results-to-a-csv.md。备份之外的另一条路pg_upgrade当迁移目标是跨 PostgreSQL 大版本升级且双集群都在本机时仓库笔记提到pg_upgrade往往比 dump/restore 更快、手工步骤更少正式执行前务必用--check做一致性预检dry-run确认新旧集群兼容后再动手详见 postgres/check-if-clusters-are-upgrade-compatible.md。总结与最佳实践清单围绕pg_dump -Fcpg_restore一套可靠的单库备份恢复流程可以浓缩为备份pg_dump -Fc my_database my_database.dump多核机器可加-j并行建库createdb my_new_database或在pg_restore中加--create自动建库恢复pg_restore -d my_new_database my_database.dump可用-j并行、--clean反复执行前置检查确认对象依赖的角色在目标集群中存在缺失时用createuser补齐按需选择变体全集群迁移用pg_dumpall部分表用多次-t纯结构用--schema-only分享数据用COPY/\copy。需要更完整的参数说明时可查阅pg_dump --help、pg_restore --help以及仓库 postgres 目录下的系列备份恢复笔记。赞分享文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载相关推荐如何用开源微信机器人打造你的专属AI群聊助手智能消息管理的终极解决方案如何用开源微信机器人打造你的专属AI群聊助手智能消息管理的终极解决方案 还在为微信群消息太多而烦恼吗每天被各种群聊消息淹没错过重要通知今天我要分享一个超AI 应用人工智能AI Agent即时通讯掌握开源多模态AI从理论到实战的完整指南掌握开源多模态AI从理论到实战的完整指南 你是否曾想过一个模型能否同时理解图像和文字并在从未见过的任务上表现出色这正是开源多模态AI模型OpenCLIP人工智能深度学习多模态预训练计算机视觉NLP基础模型如何用 pg_dump 和 pg_restore 把现有 PostgreSQL 数据库导入 InsForge如何用 pg_dump 和 pg_restore 把现有 PostgreSQL 数据库导入 InsForge 如果你已经有一个在本地或其他环境运行的 Postg后端前端AI 应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表