【发布时间】:2015-05-27 06:02:33
【问题描述】:
我的数据库托管在 heroku 上,我想下载数据库的特定部分(例如,来自table 1 的所有 id > x 的行,来自table 2 的所有名称 = x 的行等)在一个文件中。
从一些研究和提问here 看来,某种修改后的 pg_dump 可以解决我的问题。但是,我将无法使用 pg_dump,因为我无法访问命令行(基本上我希望能够在我的网络应用程序中单击一个按钮,它会生成 + 下载数据库文件)。
所以我的新策略是使用 postgres copy 命令。我将浏览我的服务器数据库中的各种表,运行 COPY (Select * FROM ... WHERE ...) TO filename ,其中 filename 只是一个临时文件,我将在完成后下载。
问题是这个filename 文件只有行,所以我不能转身将它导入pgadmin。假设我设置了一个“空”数据库(架构、索引和东西都已经设置好了),有没有办法可以格式化我的 filename 文件,以便可以轻松地将其导入 postgres 数据库?
【问题讨论】:
-
我认为您需要使用您的应用程序创建一个空的数据库架构,因为听起来您正在使用架构生成。然后逐行导入。
-
您可以通过运行 COPY TABLENAME from 'filename' 从该“文件名”“导入”数据...在“导出”时请记住,如果您使用一个“文件名”,它将被覆盖每个副本声明
-
另一个小问题是
filename在服务器上解析;您将无权访问该文件系统。 PostgreSQL 确实支持复制to stdout;一些驱动程序(例如,Python 的psycopg2)让您可以访问它。例如:stmt.copy_to(sys.stdout, "(select * from my_table)")或stmt.copy_expert("copy (select * from my_table) to stdout csv header", sys.stdout)
标签: postgresql heroku import copy export