有一个 PostgreSQL 数据库,我只能有限地访问它(例如,我不能使用 pg_dump)。我试图通过从数据库中导出某些 表来创建一个本地“镜像”。我没有从 psql 中将表转储为 SQL 所需的权限。现在,我只有一个 Python 脚本,它遍历我的 table_names,选择所有字段,然后将它们导出为 CSV:
for table_name, file_name in zip(table_names, file_names):
cmd = """echo "\\\copy (select * from %s)" to stdout WITH CSV HEADER | psql -d remote_db | gzip > ./%s/%s.gz"""%(table_name,dir_name,file_name)
os.system(cmd)
如果可能,我不想使用 CSV,因为我丢失了字段类型并且编码可能会弄乱。首先最好的可能是使用\copy 获取表的生成 SQL 代码的某种方法。其次最好的是 XML,最好使用某种方式来保留字段类型。如果这不起作用,我认为最终的选择可能是两个查询——一个获取字段数据类型,另一个获取实际数据。
任何想法或建议将不胜感激 - 谢谢!
最佳答案
让我有点困惑的是 “我没有从 psql 中将表转储为 SQL 所需的权限。” pg_dump
独立运行,外部 psql
(两者都是客户端)并且如果您有权连接到数据库并选择一个表,我猜您也可以使用 pg_dump -t <table>
转储它.我错过了什么吗?
关于python - 不使用 pg_dump 从 PostgreSQL 数据库中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2770792/