我需要动态创建,管理和删除模式.如果我去创建一个已经存在的模式,我想(有条件地,通过外部手段)删除并按指定重新创建它.如何检查Postgres 9服务器上是否存在所述模式?
目前,我这样做:
select exists (select * from pg_catalog.pg_namespace where nspname = 'schemaname');
但我觉得可能有另一种方式......这是查询Postgres特定模式存在的"正确"方法吗?
Pet*_*aut 84
以下查询将告诉您模式是否存在.
SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'name';
Bor*_*rys 55
如果你是一个纯粹的纯粹主义者,或者你想获得一些诅咒.我建议你使用postgres原生系统目录.可以避免然后通过调用pg_catalog引起的嵌套循环......
SELECT EXISTS(SELECT 1 FROM information_schema.schemata 
              WHERE schema_name = 'name');

如果直接查询pg_namespace:
SELECT EXISTS(SELECT 1 FROM pg_namespace WHERE nspname = 'name');
刨床的工作要简单得多:

所以你自己的解决方案是最好的.
Gle*_*enn 18
与寻找条件架构创建的其他人有点相关并且可能感兴趣.我发现自己在一些创建脚本中使用了这样的代码:
DO $$
BEGIN
    IF NOT EXISTS(
        SELECT schema_name
          FROM information_schema.schemata
          WHERE schema_name = 'pgcrypto'
      )
    THEN
      EXECUTE 'CREATE SCHEMA pgcrypto';
    END IF;
END
$$;
这可能是其中一种方法.首先删除架构,然后创建它.
IF EXISTS:
Do not throw an error if the schema does not exist. A notice is issued in this case.
所以,
DROP SCHEMA IF EXISTS schema_Name
Create SCHEMA schema_Name
如果您想创建一个模式(如果它不存在),您可以执行:
CREATE SCHEMA IF NOT EXISTS foo
来源: https: //www.postgresql.org/docs/current/sql-createschema.html
| 归档时间: | 
 | 
| 查看次数: | 47765 次 | 
| 最近记录: |