我有一个分配给我的用户(jason)的模式。我无法删除架构,因为我没有权限这样做。 是否有一种很好的方法可以删除每个表,数据,模式中的所有内容,并使其好像我有一个新创建的模式。 基本上与以下效果相同:
drop schema jason cascade;
create schema jason;
但没有实际删除架构。
答案 0 :(得分:6)
接受的答案很棒,但你可以在一步中利用匿名块(PosgreSQL 9.0 +)来做到这一点:
DO $$
DECLARE
r record;
BEGIN
FOR r IN SELECT quote_ident(tablename) AS tablename, quote_ident(schemaname) AS schemaname FROM pg_tables WHERE schemaname = 'public'
LOOP
RAISE INFO 'Dropping table %.%', r.schemaname, r.tablename;
EXECUTE format('DROP TABLE IF EXISTS %I.%I CASCADE', r.schemaname, r.tablename);
END LOOP;
END$$;
答案 1 :(得分:5)
试试这个:
select 'drop table if exists "' || tablename || '" cascade;'
from pg_tables
where schemaname = 'jason';
来自stackoverflow.com/questions/3327312/drop-all-tables-in-postgresql
然后运行返回的命令!