在PostgreSQL中备份和还原数据库(pg_dump,pg_restore)

在这里,我演示了如何在PostgreSQL中备份和还原dabatase

1)使用pg_dump备份数据

pg_dump -i -h localhost -p 5432 -U postgres -F c -b -v -f
"/usr/local/backup/10.70.0.61.backup" old_db

要列出pg_dump的所有可用选项,请使用以下命令。

pg_dump -?

-p,-port = PORT数据库服务器端口号
-i,-ignore -version 即使服务器版本不匹配,也要继续进行
-h,-host = HOSTNAME数据库服务器主机或套接字目录
-U,-username = NAME以指定的数据库用户身份连接
- W,–password强制输入密码提示(应该自动发生)
-d,–dbname = NAME连接到数据库名称
-v,–详细详细模式
-F,–format = c|t|p输出文件格式(自定义,tar,纯文本)
-c,–clean在创建之前清理(删除)模式
-b,–blobs 在转储中包含大对象
-v,-verbose 详细模式
-f,–file = FILENAME输出文件名

2)使用pg_restore还原数据

pg_restore -i -h localhost -p 5432 -U postgres -d old_db -v
"/usr/local/backup/10.70.0.61.backup"

要列出pg_restore的所有可用选项,请使用以下命令。

pg_restore -?

-p,-port = PORT数据库服务器端口号

-i,-ignore -version 即使服务器版本不匹配,也要继续进行

-h,-host = HOSTNAME数据库服务器主机或套接字目录
-U,-username = NAME以指定的数据库用户身份连接
- W,–password强制输入密码提示(应该自动发生)
-d,–dbname = NAME连接到数据库名称
-v,–verbose 详细模式

### 3.1 使用兼容版本的 `pg_dump` `pg_restore` 在 PostgreSQL 15 17 之间保持 `pg_dump` 与 `pg_restore` 版本一致,关键在于确保用于导出导入的工具属于相同的 PostgreSQL 主版本。PostgreSQL 的 `pg_restore` 工具支持一定的向后兼容性,但无法处理比其版本更高的 `pg_dump` 所生成的文件格式。例如,PostgreSQL 15 的 `pg_restore` 无法识别由 PostgreSQL 16 或 17 的 `pg_dump` 生成的版本 1.16 的文件格式[^1]。 为保持版本一致,可以在执行 `pg_dump` 时使用与目标数据库服务器相同版本的 PostgreSQL 工具。例如,在 PostgreSQL 15 上执行备份时,应使用 PostgreSQL 15 的 `pg_dump`;在 PostgreSQL 17 上还原时,应使用 PostgreSQL 17 的 `pg_restore`。这样可以确保文件格式与工具版本兼容。 ```bash # 使用 PostgreSQL 15 的 pg_dump 进行备份 "/Program Files/PostgreSQL/15/bin/pg_dump.exe" -Fc -f backup_file.dump -U postgres dbname # 使用 PostgreSQL 17 的 pg_restore 进行还原 "/Program Files/PostgreSQL/17/bin/pg_restore.exe" -d dbname -U postgres backup_file.dump ``` ### 3.2 升级 PostgreSQL 以支持更高版本的备份格式 如果 `pg_restore` 报告 `unsupported version (1.16)` 错误,则表明备份文件是由更高版本的 `pg_dump` 生成的。例如,PostgreSQL 15 的 `pg_restore` 无法识别由 PostgreSQL 16 或 17 的 `pg_dump` 生成的版本 1.16 的文件格式。此时,最直接的解决方案是将 PostgreSQL 15 升级到 PostgreSQL 16 或 17,以支持该版本的文件格式。 升级后,`pg_restore` 将能够识别并处理版本 1.16 的文件格式。升级过程通常包括停止数据库服务、备份现有数据、安装新版本,并将旧数据迁移到新版本中。 ### 3.3 使用纯 SQL 格式进行跨版本还原 为避免版本不兼容问题,可以在导出时使用 `pg_dump` 的 `-Fp`(纯文本 SQL 转储)格式代替默认的自定义格式(`-Fc`)。生成的 `.sql` 文件为纯 SQL 脚本,可以在不同版本的 PostgreSQL 中使用 `psql` 命令进行还原,从而避免 `pg_restore` 的版本兼容性问题。 ```bash # 使用纯 SQL 格式导出 pg_dump -Fp -f backup_file.sql -U postgres dbname # 使用 psql 进行还原 psql -U postgres -d dbname -f backup_file.sql ``` 虽然此方法在性能灵活性方面不如自定义格式,但其优势在于兼容性较强,适用于不同 PostgreSQL 主版本之间的数据迁移。 ### 3.4 使用软链接确保工具版本一致 如果系统中安装了多个 PostgreSQL 版本,可以通过创建软链接的方式,确保 `pg_dump` `pg_restore` 指向正确的版本。例如,在 Linux 系统中,可以创建指向 PostgreSQL 17 的 `pg_restore`: ```bash ln -sfn /usr/lib/postgresql/17/bin/pg_restore /usr/bin/pg_restore ``` 在 Windows 系统中,可以通过修改环境变量或使用 `mklink` 命令实现类似效果。这样可以确保命令行调用的 `pg_restore` 与目标数据库版本一致,从而避免版本不兼容问题。 ### 3.5 检查当前 `pg_restore` 支持的文件格式版本 可以通过以下命令检查当前 `pg_restore` 支持的文件格式版本: ```bash pg_restore --version ``` 该命令将输出当前 `pg_restore` 的版本号,从而判断其支持的文件格式范围。例如,PostgreSQL 15 的 `pg_restore` 支持文件格式版本 1.15 及以下,而 PostgreSQL 16 及以上版本则支持 1.16 及更高版本。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值