【问题标题】:Update column in multiple tables更新多个表中的列
【发布时间】:2015-02-16 02:21:26
【问题描述】:

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

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

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

【问题讨论】:

  • 动态 SQL - PL/PgSQL,EXECUTE format(...) USING ...。此外,如果您需要这样做,这可能表明数据库设计存在问题。

标签: postgresql plpgsql dynamic-sql information-schema


【解决方案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

这是此相关答案中更通用功能的很大程度上简化版本,并提供了更多解释:

信息架构或系统目录?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 2016-04-05
    • 2015-04-02
    • 2012-12-25
    • 2015-10-03
    相关资源
    最近更新 更多