Обновить столбец в нескольких таблицах

Допустим, у меня есть столбец с именем partner в нескольких таблицах в одной схеме:

select table_name from information_schema.columns where column_name = 'partner';

Как мне обновить все столбцы, где значение partner = 100 до partner = 101?


person Marek Jan-Alexander    schedule 17.12.2014    source источник
comment
Динамический SQL — PL/PgSQL, EXECUTE format(...) USING .... Кроме того, если вам когда-либо понадобится это сделать, это, вероятно, признак проблемного дизайна базы данных.   -  person Craig Ringer    schedule 17.12.2014


Ответы (1)


Для одноразовой операции вполне подойдет оператор DO, выполняющий динамический SQL:

DO
$do$
DECLARE
   _tbl text;
BEGIN
FOR _tbl  IN
    SELECT quote_ident(table_name)  -- escape identifier!
    FROM   information_schema.columns
    WHERE  table_schema = 'public'  -- your schema (!!)
    AND    column_name = 'partner'  -- your column name
LOOP
   RAISE NOTICE '%',
-- EXECUTE
  'UPDATE ' || _tbl || ' SET partner = 101 WHERE partner = 100';
END LOOP;
END
$do$

Проверьте сгенерированный код, прежде чем комментировать RAISE и раскомментировать EXECUTE.

Это в значительной степени упрощенная версия более универсальной функции в этом связанном ответе с дополнительным объяснением:

Информационная схема или системный каталог?

person Erwin Brandstetter    schedule 17.12.2014