PostgreSQL: как перебирать список таблиц и выполнять обновления - PullRequest
0 голосов
/ 20 ноября 2018

Я изучаю PostgreSQL и наткнулся на очень простое требование.Я хочу перебрать массив таблиц и обновить определенный столбец (имя столбца одинаково во всех этих таблицах).Моя идея состоит в том, чтобы хранить имена этих таблиц в массиве и использовать цикл for для итерации по каждой таблице и обновления столбца.

Это то, что я сделал до сих пор:

DO
$do$
DECLARE
  old_value varchar := 'old_value';
  new_value varchar := 'new_value';

  affected_table_names  TEXT[] := '{"table_1", "table_2"}';

BEGIN
  FOREACH tableName IN affected_table_names
    LOOP

      update tableName
      set column_name = old_value
      where column_name = new_value;

  END LOOP;
END
$do$;

Однако, когда я выполняю этот pgAdmin4, я получаю следующую ошибку:

ERROR:  syntax error at or near "affected_table_names"
LINE 25:   FOR tableName IN affected_table_names
                                ^
********** Error **********

ERROR: syntax error at or near "affected_table_names"
SQL state: 42601
Character: 836

Я не уверен, что нужно сделать, чтобы исправить ошибку.Я знаю, что это синтаксическая ошибка, потому что здесь так сказано: https://www.postgresql.org/docs/8.1/errcodes-appendix.html

Может кто-нибудь указать мне правильное направление?

1 Ответ

0 голосов
/ 20 ноября 2018

Вам нужно будет использовать EXECUTE и создать строку, содержащую ваш запрос.Имя таблицы (или любые имена столбцов и т. Д.) Не являются частью «изменяющейся» части запроса.Вы можете использовать любой произвольный текст, и запрос может / не может работать - планировщик запросов не может определить его «форму».

Рекомендуется использовать функцию quote_ident, как показано в примере.на этой странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...