删除带前缀的模式

时间:2016-07-19 14:01:58

标签: postgresql database-schema

我想删除以' u _' 开头的数据库中的所有架构,出于某种原因,每当我尝试创建和修改时,我都会创建200多个架构 pgSQL 中的表格。

我尝试使用

drop schema u_* cascade;

但我不认为通配符是这样工作的(这里会得到语法错误代码)。我知道我可以通过

获取所有模式名称
select schema_name
from information_schema.schemata;

但是从那以后我就不知道该怎么做了。我只想删除所有空的模式或以" u _"开头。

1 个答案:

答案 0 :(得分:0)

此语句将删除名称以u_开头的所有模式及其内容:

DO $$DECLARE
   s text;
BEGIN
   FOR s IN
      SELECT nspname FROM pg_namespace
         WHERE nspname LIKE 'u\_%'
   LOOP
      EXECUTE 'DROP SCHEMA "' || quote_ident(s) || '" CASCADE';
   END LOOP;
END;$$;

要删除所有空架构,请使用

DO $$DECLARE
   s text;
BEGIN
   FOR s IN
      SELECT nspname FROM pg_namespace
         WHERE nspname NOT LIKE 'pg_%' AND nspname <> 'public'
   LOOP
      BEGIN
         EXECUTE 'DROP SCHEMA "' || quote_ident(s) || '"';
      EXCEPTION
         WHEN OTHERS THEN
            NULL;
      END;
   END LOOP;
END;$$;

但如果我是你,我会弄清楚是什么创造了这些模式并阻止了它。 PostgreSQL本身没有这样的东西。