Как зациклить запрос postgresql над списком условий `где` - PullRequest
0 голосов
/ 25 апреля 2018

'использую postgresql 9.5.

Для одного идентификатора я могу запросить следующее:

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

Q1.
У меня есть 50 уникальных идентификаторов интереса в текстовом файле. Как запустить ^ query для всех этих 50 идентификаторов за один раз?

(Всего в mytable около 100000 записей)

Q2.
Если возможно, я бы также хотел рекурсивно сохранять результаты в разных текстовых файлах.

Для 1 файла я могу сделать

COPY "select a,b from mytable where id = '1234' order by a,b;" TO STDOUT CSVHEADER > '/tmp/1234.csv'

Ref: psql - сохранить результаты команды в файл
Сохранение вывода PL / pgSQL из PostgreSQL в файл CSV

Дополнительная информация: Я запрашиваю с моей локальной машины.
Postgres установлен на AWS. (Я прочитал доступ к БД).

1 Ответ

0 голосов
/ 25 апреля 2018

Вы можете импортировать этот ваш текстовый файл, содержащий идентификаторы, во временную таблицу и использовать его в качестве фильтра в предложении IN.

Рассмотрим файл, содержащий эти идентификаторы ...

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

Импортируйте идентификаторы во временную таблицу:

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 ... ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...