将 PostgreSQL SQL 转储转换为 PostgreSQL 自定义格式转储

Sim*_*ano 2 postgresql pg-dump

我的用例如下:

  • pg_dump -F p我有用(纯文本 SQL 脚本文件)制作的 PostgreSQL 转储,我无法控制它们的制作方式
  • 我喜欢pg_restore灵活性(--no-owner、--data-only、--clean 等)

我知道我应该使用psql纯文本 SQL 转储,但是有什么方法可以将 SQL 转储转换为 PostgreSQL 自定义格式转储,以便我可以使用 pg_restore 或某种获取其所有选项的方法?

感谢您的关注。

nbw*_*ard 5

正如其他答案/评论提到的,您无法直接转换它。您应该做的是从 sql 备份文件创建一个临时数据库,并使用 pg_dump 从中创建自定义格式。

检查 sql 备份是否不是“干净”的恢复文件,这意味着它不会删除文件顶部的数据库。如果是,请删除“DROP DATABASE dbase”。

创建临时数据库:

psql
CREATE DATABASE mytempdb;
\q
Run Code Online (Sandbox Code Playgroud)

然后恢复您的备份:

psql mytempdb < my_database_backup.sql
Run Code Online (Sandbox Code Playgroud)

注意:这就是为什么您不希望在 sql 文件顶部出现“drop database...”行。它会删除您的原始数据库。

将其转储为自定义格式:

pg_dump mytempdb -Fc -f custom_format.dump
Run Code Online (Sandbox Code Playgroud)

  • 完成后最好删除这个临时数据库:`psql --command="DROP DATABASE mytempdb;"` (2认同)