我确实想在数据库转储中搜索一些数据,但这些转储使用二进制压缩格式(PGDMP
标头)。
如何在不恢复它们的情况下将它们转换为 SQL?
pg_restore
,在没有数据库名称的情况下运行时,将文本转储输出到标准输出;-f
您可以使用或使用 I/O 重定向将其发送到其他地方。
pg_restore -f mydatabase.sql mydatabase.dump
我用过的最快的方法是:
pg_restore mybinaryfile.backup > mysqlfile.sql
没有特殊标志,因为 pg_restore 只是将它吐出到标准输出。
请注意,如果您运行多个集群,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 也有类似的命令来帮助您确定已安装的版本。