【问题标题】:Alter table across all postgresql schemas跨所有 postgresql 模式更改表
【发布时间】:2016-05-25 12:11:41
【问题描述】:

如果我有多个包含同一个表的模式,有没有办法一次更新所有表?例如,如果我有 3 个模式,每个模式都有一个带有 first_name, last_name, email 列的 user 表,并且我想为所有 3 个模式中的每个 user 表添加一个 phone_num 列,有没有办法我可以做它?我在 postgresql 文档中找不到方法...

提前致谢!

【问题讨论】:

    标签: postgresql schema


    【解决方案1】:

    我认为您想更改表而不是更新表。如果是,那么下面的代码将为您工作,

    -- Function: alter_table()
    
    -- DROP FUNCTION alter_table();
    
    CREATE OR REPLACE FUNCTION alter_table()
      RETURNS integer AS
    $BODY$
    
    DECLARE
      v_schema text;
    BEGIN
    
    FOR v_schema IN
        SELECT quote_ident(nspname)  
        FROM   pg_namespace n
        WHERE  nspname !~~ 'pg_%'
        AND    nspname <>  'information_schema'
    LOOP
       EXECUTE 'SET LOCAL search_path = ' || v_schema;
       ALTER TABLE "user"  ADD COLUMN show_price boolean NOT NULL DEFAULT TRUE;
    END LOOP;
    
    return 1;
        END;
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
    ALTER FUNCTION alter_table()
      OWNER TO postgres;
    

    【讨论】:

      猜你喜欢
      • 2010-09-20
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      相关资源
      最近更新 更多