跨所有postgresql架构更改表

时间:2016-02-14 17:36:07

标签: postgresql schema

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

提前致谢!

1 个答案:

答案 0 :(得分:3)

我认为您想要更改表而不是更新表。如果是,则下面的代码将适合您,

-- 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;