56

我确实想在数据库转储中搜索一些数据,但这些转储使用二进制压缩格式(PGDMP标头)。

如何在不恢复它们的情况下将它们转换为 SQL?

4

3 回答 3

93

pg_restore,在没有数据库名称的情况下运行时,将文本转储输出到标准输出;-f您可以使用或使用 I/O 重定向将其发送到其他地方。

pg_restore -f mydatabase.sql mydatabase.dump 
于 2014-01-29T11:26:58.827 回答
20

我用过的最快的方法是:

pg_restore mybinaryfile.backup > mysqlfile.sql

没有特殊标志,因为 pg_restore 只是将它吐出到标准输出。

于 2014-11-26T18:53:26.160 回答
1

请注意,如果您运行多个集群,restore 命令可能不像默认版本...

pg_restore: [archiver] 文件头中不支持的版本 (1.12)

在这种情况下,您必须指定版本、主机和端口,如下所示:

pg_restore --cluster 9.1/localhost:5433 -f db.sql db.pgsql

(请注意,host:port使用 -f 选项会忽略该信息。)

可以使用以下pgsql命令确定端口 (5433):

pgsql --port 5433 template1

连接时pgsql,它会写一条评论,例如:

psql(9.3.6,服务器 9.1.13)

这意味着您正在运行 pgsql 9.3.6,并且端口 5433 引用服务器 9.1.13。

如果不确定当前使用了哪些端口,可以使用如下netstat命令:

sudo netstat -a64np | grep LISTEN | grep postgres

打印进程名称的选项是sudo必需的。-p这会给你一个端口列表(通常是 TCP 和 UDP 端口)。

最后,在 Debian/Ubuntu 系统上,您可以使用以下dpkg -l命令获取已安装集群的列表:

dpkg -l '*postgres*'

当前已安装以“ii”(最左侧列)开头的条目列表。当然,您对其他 Unices 也有类似的命令来帮助您确定已安装的版本。

于 2015-04-13T21:16:14.987 回答