如何在Postgresql中删除所有表而不删除模式?

时间:2015-07-14 11:48:53

标签: sql postgresql

我有一个分配给我的用户(jason)的模式。我无法删除架构,因为我没有权限这样做。 是否有一种很好的方法可以删除每个表,数据,模式中的所有内容,并使其好像我有一个新创建的模式。 基本上与以下效果相同:

drop schema jason cascade;
create schema jason;

但没有实际删除架构。

2 个答案:

答案 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

然后运行返回的命令!