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

时间:2018-09-03 13:53:22

标签: postgresql pg-dump

我的用例如下:

  • 我有使用pg_dump -F p(纯文本SQL脚本文件)制作的PostgreSQL转储,我无法控制它们的制作方式
  • 我喜欢pg_restore的灵活性(-无所有者,-仅数据,-clean等)

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

感谢您的关注。

2 个答案:

答案 0 :(得分:1)

正如其他答案/评论所述,您不能直接将其转换。您应该做的是从sql备份文件创建一个临时数据库,然后使用pg_dump从中创建自定义格式。

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

创建一个临时数据库:

GlobalSection(ExtensibilityGlobals) = postSolution
    SolutionGuid = {11C1100F-B9F8-4105-9516-95973732AD48}
    ISWCFSolution = True
    Locked = False
    UnLocked = True
EndGlobalSection

然后将备份还原到该备份:

psql
CREATE DATABASE mytempdb;
\q

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

将其转储为自定义格式:

psql mytempdb < my_database_backup.sql

答案 1 :(得分:0)

使用pg_dump取纯文本格式后,无法进行自定义格式。

pg_dump -d dbname> data.sql 使用以下方法,我们可以恢复

psql -d dbname -f data.sql

自定义格式: pg_dump --create --clean -h <127.0.0.1> -p 5432 -d dbname -Fc -f data.sql

还原: pg_restore -h <127.0.0.1> -p 5432 -d dbname -C -Fd /tmp/data.sql