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

Posted

技术标签:

【中文标题】将 PostgreSQL SQL 转储转换为 PostgreSQL 自定义格式转储【英文标题】:Convert PostgreSQL SQL dump to PostgreSQL custom-format dump 【发布时间】:2018-09-03 13:53:22 【问题描述】:

我的用例如下:

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

我知道我应该将psql 与纯文本 SQL 转储一起使用,但 有没有办法将 SQL 转储转换为 PostgreSQL 自定义格式转储 所以我可以使用 pg_restore,或者某种方式来获取它的所有选项?

感谢您的关注。

【问题讨论】:

不,您不能转换它。以自定义格式创建转储的唯一方法是使用 pg_dump -F c 我和没有名字的马先生站在一起,你真的不能那样做,除了很明显的转储。 【参考方案1】:

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

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

创建一个临时数据库:

psql
CREATE DATABASE mytempdb;
\q

然后将备份恢复到它:

psql mytempdb < my_database_backup.sql

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

将其转储为自定义格式:

pg_dump mytempdb -Fc -f custom_format.dump

【讨论】:

完成后最好删除这个临时数据库:psql --command="DROP DATABASE mytempdb;"

以上是关于将 PostgreSQL SQL 转储转换为 PostgreSQL 自定义格式转储的主要内容,如果未能解决你的问题,请参考以下文章

从 PostgreSQL 中的字段中提取数字

如何将 PostgreSQL 数据库中的所有 SMALLINT 列转换为 BOOLEAN?

将 PostgreSql 时间戳查询转换为 MS SQL/Azure SQL

sql 国家转储PostgreSQL

将 PostgreSQL 递归 CTE 转换为 SQL Server

需要帮助将 T-SQL 转换为 PostgreSQL