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
运行返回的命令!