【发布时间】:2010-05-05 05:17:53
【问题描述】:
有一个 PostgreSQL 数据库,我只有有限的访问权限(例如,我不能使用 pg_dump)。我正在尝试通过从数据库中导出 certain 表来创建本地“镜像”。我没有从 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,最好是通过某种方式保留字段类型。如果这不起作用,我认为最后的选择可能是两个查询——一个获取字段数据类型,另一个获取实际数据。
任何想法或建议将不胜感激 - 谢谢!
【问题讨论】:
-
如何连接数据库? ODBC、JDBC (Jython)、Pygres、psycopg?
-
为什么不能使用pg_dump?你认为你必须拥有什么样的权限才能使用 pg_dump?
标签: python sql xml postgresql