@poxgsouv

Как задать обозначить переменную в цикле postgreSQL?

Пытаюсь нарисовать скрипт где в цикле перебираются селекты, но SQL воспринимает переменную i, как название столбца, как правильно обозначить её?
DO
$do$
DECLARE
   a bigint[] := array[1,2,3];
   i bigint; 
BEGIN
   FOR i IN a
   LOOP
      COPY (select column_1 where column_2 = i) TO PROGRAM  'cat >>/tmp/file.csv' (format CSV);
   END LOOP;
END
$do$;
  • Вопрос задан
  • 29 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Никак напрямую. COPY не умеет параметры, в том числе внутри своего возможного select.

Вам нужен dynamic sql, собрать текст copy команды как именно текст и выполнить есть:
EXECUTE format($$
   COPY (
       select %L
   )
   TO '/tmp/file';
$$, my_var);


PS: TO PROGRAM в cat вместо напрямую copy в файл - у вас есть какая-то рациональная причина?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы