Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres:将多个副本合并到输出到Postgres可导入文件_Postgresql_Heroku_Import_Copy_Export - Fatal编程技术网

Postgresql Postgres:将多个副本合并到输出到Postgres可导入文件

Postgresql Postgres:将多个副本合并到输出到Postgres可导入文件,postgresql,heroku,import,copy,export,Postgresql,Heroku,Import,Copy,Export,我的数据库托管在heroku上,我想在单个文件中下载数据库的特定部分,例如表1中id>x的所有行,表2中名称=x的所有行,等等 通过一些研究和提问,似乎某种改进的pg_转储可以解决我的问题。但是,我将无法使用pg_dump,因为我将无法访问命令行基本上我希望能够在我的web应用程序中单击一个按钮,它将生成并下载数据库文件 所以我的新策略是使用postgres命令。我将浏览服务器数据库中的各个表,运行COPY Select*FROM。。。哪里到filename,其中filename只是一个临时文件

我的数据库托管在heroku上,我想在单个文件中下载数据库的特定部分,例如表1中id>x的所有行,表2中名称=x的所有行,等等

通过一些研究和提问,似乎某种改进的pg_转储可以解决我的问题。但是,我将无法使用pg_dump,因为我将无法访问命令行基本上我希望能够在我的web应用程序中单击一个按钮,它将生成并下载数据库文件

所以我的新策略是使用postgres命令。我将浏览服务器数据库中的各个表,运行COPY Select*FROM。。。哪里到filename,其中filename只是一个临时文件,完成后我将下载它


问题是这个文件名文件将只包含行,所以我不能掉头将其导入pgadmin。假设我设置了一个“空”数据库,模式、索引和内容都已经设置好了,有没有办法格式化我的文件名文件,以便轻松地将其导入postgres db

在我关于发送/发送stdout/stdin的评论的基础上,回答关于在一个文件中包含多个表的实际问题;您可以构造输出文件以交错复制。。。使用实际数据从stdin加载,并通过psql加载。例如,psql将支持如下所示的输入文件:

copy my_table (col1, col2, col3) from stdin;
foo    bar    baz
fizz   buzz   bizz
\.
注意后面的\。分离器应为凸耳式;您还可以在copy命令中指定分隔符选项

psql将处理“;”之间的所有内容和“.”作为标准。这本质上模拟了当您导出表数据而不导出模式(例如pg_dump-a-t my_表)时pg_dump所做的操作


产生的负载可以像psqlmydb我认为您需要使用您的应用程序创建一个空的DB模式,因为它听起来像是在使用模式生成。然后逐行导入。您可以通过从“filename”运行COPY TABLENAME从该文件名导入数据。。。导出时请记住,如果使用一个文件名,它将被每个copy语句覆盖。另一个问题是文件名在服务器上解析;您将无法访问该文件系统。PostgreSQL不支持复制到标准输出;一些驱动程序(例如Python的psycopg2)让您可以访问它。例如:stmt.copy_tosys.stdout,从my_表中选择*或stmt.copy_expertcopy select*从my_表到stdout csv头,sys.stdout