跨所有 postgresql 模式更改表

Tru*_*ran 2 postgresql schema

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

提前致谢!

shi*_*hiv 6

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

-- 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;
Run Code Online (Sandbox Code Playgroud)