我确实想在数据库转储中搜索一些数据,但这些转储使用的是二进制压缩格式(PGDMP
标头)。
如何在不恢复它们的情况下将这些转换为SQL?
答案 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的类似命令来帮助您确定已安装的版本。