删除带有前缀的模式

delete schemas with prefix

我想删除数据库中以 'u_' 开头的所有架构,出于某种原因,每当我尝试创建时,我都会创建超过 200 个架构并修改 pgSQL.

中的表

我尝试使用

drop schema u_* cascade;

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

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

但从那以后我不知道该怎么做。我只想删除所有为空或以 "u_".

开头的架构

此语句将删除名称以 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 本身不做这样的事情。