关于sql:如何在Postgresql中删除所有表而不删除模式?

How do I remove all tables and not the schema in Postgresql?

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

1
2
DROP schema jason cascade;
CREATE schema jason;

但不需要实际删除模式。


接受的答案很好,但是您可以利用匿名块(posgresql 9.0+)的优势,只需一步就可以做到这一点:

1
2
3
4
5
6
7
8
9
10
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
2
3
SELECT 'drop table if exists"' || tablename || '" cascade;'
  FROM pg_tables
 WHERE schemaname = 'jason';

来自stackoverflow.com/questions/3327312/drop-all-tables-in-postgresql

运行返回的命令!