关于数据库:如何在`where`条件列表上循环postgresql查询

How to loop a postgresql query over a list of `where` conditions

我正在使用postgresql 9.5。

对于一个id,我可以查询如下:

select a,b from mytable where id = '1234' order by a,b;

Q1。
我在txt文件中有50个唯一感兴趣的id。 如何一次性对所有50个id进行^查询?

(总的来说,mytable中有大约100000条记录)

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的此文本文件导入临时表,并将其用作IN子句中的过滤器。

考虑一个包含这些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)

或者使用COPY导出:

1
COPY (SELECT * FROM t WHERE id IN (SELECT id FROM tmp)) TO ... ;