删除带有前缀的模式
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 本身不做这样的事情。
我想删除数据库中以 '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 本身不做这样的事情。