如何将二进制pgdump(压缩)转换为纯SQL文件?

时间:2014-01-29 11:12:03

标签: postgresql pg-dump pg-restore

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

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

3 个答案:

答案 0 :(得分:57)

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

pg_restore -f mydatabase.sql mydatabase.dump 

答案 1 :(得分:12)

我使用过的最快的方法是:

pg_restore mybinaryfile.backup > mysqlfile.sql

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

答案 2 :(得分:0)

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

  

pg_restore:[archiver]文件头

中不支持的版本(1.12)

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

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

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

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

pgsql --port 5433 template1

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

  

psql(9.3.6,server 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的类似命令来帮助您确定已安装的版本。