使用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个文件
COPY "select a,b from mytable where id = '1234' order by a,b;" TO STDOUT CSVHEADER > '/tmp/1234.csv'
参考:psql - save results of command to a file
Save PL/pgSQL output from PostgreSQL to a CSV file
额外信息: 我在当地的机器上查询 postgres安装在AWS上。 (我已读取数据库的访问权限)。
答案 0 :(得分:1)
您可以将包含ID的此文本文件导入临时表,并将其用作IN
子句中的过滤器。
考虑一个包含这些ID的文件......
1
3
..和这个表结构和数据样本......
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导入临时表:
CREATE TEMPORARY TABLE tmp (id INT);
COPY tmp FROM '/tmp/ids.csv';
在查询中使用它:
SELECT * FROM t WHERE id IN (SELECT id FROM tmp);
id | val
----+------
1 | foo
3 | foo2
(2 Zeilen)
或使用COPY
COPY (SELECT * FROM t WHERE id IN (SELECT id FROM tmp)) TO ... ;