Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PostgreSQL数据库的所有架构中向表添加列_Sql_Postgresql_Plpgsql_Ddl_Postgresql 8.4 - Fatal编程技术网

在PostgreSQL数据库的所有架构中向表添加列

在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的表,我想立即向它们添加一个布尔列。有可能这样做吗 到目前为止

我有一个Postgres 8.4模式,如下所示:

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;