How to loop a postgresql query over a list of `where` conditions
我正在使用postgresql 9.5。
对于一个id,我可以查询如下:
Q1。
我在txt文件中有50个唯一感兴趣的id。 如何一次性对所有50个id进行^查询?
(总的来说,
Q2。
如果可能的话,我还想将结果递归地保存到不同的文本文件中。
对于1个文件,我可以做
1 | COPY"select a,b from mytable where id = '1234' order by a,b;" TO STDOUT CSVHEADER > '/tmp/1234.csv' |
参考:psql - 将命令结果保存到文件中
将PostgreSQL的PL / pgSQL输出保存为CSV文件
额外信息:
我在本地机器上查询。
postgres安装在AWS上。 (我已读取数据库的访问权限)。
您可以将包含ids的此文本文件导入临时表,并将其用作
考虑一个包含这些ID的文件......
1 2 | 1 3 |
..和这个表结构和数据样本......
1 2 3 4 5 6 7 8 9 10 | CREATE TABLE t (id SERIAL, val TEXT); INSERT INTO t (val) VALUES ('foo'),('bar'),('foo2'),('bar2'); SELECT * FROM t; id | val ----+------ 1 | foo 2 | bar 3 | foo2 4 | bar2 |
将id导入临时表:
1 2 | CREATE TEMPORARY TABLE tmp (id INT); COPY tmp FROM '/tmp/ids.csv'; |
并在您的查询中使用它:
1 2 3 4 5 6 | SELECT * FROM t WHERE id IN (SELECT id FROM tmp); id | val ----+------ 1 | foo 3 | foo2 (2 Zeilen) |
或者使用
1 | COPY (SELECT * FROM t WHERE id IN (SELECT id FROM tmp)) TO ... ; |