将 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 数据库中的所有 SMALLINT 列转换为 BOOLEAN?
将 PostgreSql 时间戳查询转换为 MS SQL/Azure SQL