背景:
全覆盖数据库首选为删除数据库后重建, 但存在当前数据库可能正在被使用,无法删除的情况。
虽然可以使用进程关闭的方法再删库,但没办法用代码自动处理这个过程。
所以使用将数据库中的所有schema 都删除的方法。
在postgresql 中没有直接的函数来删除所有的 schema ,只好自己写一个了。
实现过程:
查找所有的schema : SELECT nspname FROM pg_namespace
遍历所有的schema : for param in exec **** loop *** end loop;
执行删除schema :drop schema ***
具体代码
create or replace function del_schema()
returns void as $$
-- 定义函数内变量
declare
rec varchar;
begin
-- 遍历所有 schema
for rec in execute 'SELECT nspname FROM pg_namespace where nspname like ''a%'' ' loop
-- 输出变量值
raise notice ' %' ,rec ;
-- 执行删除 schema
execute ' drop schema ' || rec;
end loop;
return ;
end
$$
language 'plpgsql';
-- 执行函数
select del_schema();