在PostgreSQL数据库的所有架构中向表添加列
我有一个Postgres 8.4模式,如下所示:在PostgreSQL数据库的所有架构中向表添加列,sql,postgresql,plpgsql,ddl,postgresql-8.4,Sql,Postgresql,Plpgsql,Ddl,Postgresql 8.4,我有一个Postgres 8.4模式,如下所示: My_Database |-> Schemas |-> AccountA |-> AccountB |-> AccountC |-> AccountD |-> AccountE ... |-> AccountZ 所有模式都有一个名为product的表,我想立即向它们添加一个布尔列。有可能这样做吗 到目前为止
My_Database
|-> Schemas
|-> AccountA
|-> AccountB
|-> AccountC
|-> AccountD
|-> AccountE
...
|-> AccountZ
所有模式都有一个名为product
的表,我想立即向它们添加一个布尔列。有可能这样做吗
到目前为止,我找到的唯一方法是逐个帐户运行下面的SQL帐户
ALTER TABLE product ADD COLUMN show_price boolean NOT NULL DEFAULT TRUE;
无论如何,你都需要这样做 您可以做的是通过查询目录,然后将代码包装在一个文件中(在Postgres 9.0或更高版本中)或使用迁移脚本来实现自动化。如果您不熟悉查询目录,要查找所需的查询,最简单的方法是使用
psql-E
。它将显示在您输入\dn
和\dt
时运行的隐藏查询
DO
$do$
DECLARE
_schema text;
_sp
BEGIN
FOR _schema IN
SELECT quote_ident(nspname) -- prevent SQL injection
FROM pg_namespace n
WHERE nspname !~~ 'pg_%'
AND nspname <> 'information_schema'
LOOP
EXECUTE 'SET LOCAL search_path = ' || _schema;
ALTER TABLE product ADD COLUMN show_price boolean NOT NULL DEFAULT TRUE;
END LOOP;
END
$do$
SHOW search_path INTO _text_var;
...
EXECUTE 'SET search_path = ' || _text_var;