更新多个表中的列

时间:2014-12-17 13:58:01

标签: postgresql plpgsql dynamic-sql information-schema

假设我在一个架构中的多个表中有一个名为partner的列:

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

如何将值partner = 100的所有列更新为partner = 101

1 个答案:

答案 0 :(得分:1)

对于一次性操作,执行动态SQL的DO语句应该可以正常运行:

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

这是相关答案中更多功能的大致简化版本,有更多解释:

信息架构或系统目录?