Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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 如何使用psql命令行将多个FOR循环结果远程保存到远程客户端文件?_Postgresql_Psql - Fatal编程技术网

Postgresql 如何使用psql命令行将多个FOR循环结果远程保存到远程客户端文件?

Postgresql 如何使用psql命令行将多个FOR循环结果远程保存到远程客户端文件?,postgresql,psql,Postgresql,Psql,我有一个匿名函数,在FOR循环中包含一个执行100次的查询,我需要将100个结果集作为100个文件保存在远程客户端上,而不是服务器上 看起来psql\copy meta命令应该是实现这一点的方法,但我不知所措。也许是这种形式的 \copy (anonymous_function_w/_FOR_loop_here) to 'filename.txt' 其中filename.txt是根据FOR循环变量在每次迭代中的值构建的。这很重要-远程客户端上的文件需要根据FOR循环的变量命名 有什么办法可以解

我有一个匿名函数,在FOR循环中包含一个执行100次的查询,我需要将100个结果集作为100个文件保存在远程客户端上,而不是服务器上

看起来psql\copy meta命令应该是实现这一点的方法,但我不知所措。也许是这种形式的

\copy (anonymous_function_w/_FOR_loop_here) to 'filename.txt'
其中filename.txt是根据FOR循环变量在每次迭代中的值构建的。这很重要-远程客户端上的文件需要根据FOR循环的变量命名

有什么办法可以解决这个问题吗?我认为另一种方法是将所有100个查询结果合并为一个大结果,在一个字段中使用FOR循环的变量值,然后使用bash脚本将其拆分为100个适当命名的文件。但是我的击打技术很差。如果psql可以直接完成这项工作,那就太好了

编辑:我应该补充一点,FOR循环变量如下所示:

FOR rec IN SELECT DISTINCT county FROM voter.counties

因此,文件名将从rec.country+'.txt'

构建。典型的方法是使用SQL语句生成必要的语句,将输出假脱机到脚本文件中,然后运行该文件

比如:

-- prepare for a "plain" output without headers or something similar
\a
\t 

-- spool the output into export.sql
\o export.sql
select format('\copy (select * from some_table where county = %L) to ''%s.txt''', county, county)
from (select distinct county from voter.counties) t;

-- turn spooling off
\o 

-- run the generated file
\i export.sql
因此,对于vorters.countries中的每个县名称,export.sql将包含:

\copy (select * from some_table where county = 'foobar') to 'foobar.txt'

我想对你非常有用的回答表示感谢。因为我不是专业人士,我发现从一个与我的需求相关的例子开始,然后回顾文档以确保我完全理解它在做什么,这是最容易学习的。在这个特殊的例子中,我学习了大量关于psql的知识——这之前让我感到困惑——以及关于postgreSQL格式函数的知识——我不知道——通过我的工作完成了您的答案。现在我只需要弄清楚如何在SQL查询中转义concat函数中的所有撇号……但我会做到的。@CheesyGrits:不要使用concat-use格式,这会使整个转义更容易。如果我错了,请纠正我:示例中紧跟在%s.txt前面的单引号不应该在那里,对吗?也就是说,该行应该从某些_表中读取选择格式“\copy select*,其中country=%L到%s.txt”,country,country从select distinct country到voter.t;是吗?@cheesgrits:实际上应该是两个单引号才能将它们放入字符串中。