如何从命令行删除PostgreSQL中的所有表?
我不想删除数据库本身,只想删除其中的所有表和所有数据。
如何从命令行删除PostgreSQL中的所有表?
我不想删除数据库本身,只想删除其中的所有表和所有数据。
当前回答
在pgAdmin中使用此脚本:
DO $$
DECLARE
brow record;
BEGIN
FOR brow IN (select 'drop table "' || tablename || '" cascade;' as table_name from pg_tables where schemaname = 'public') LOOP
EXECUTE brow.table_name;
END LOOP;
END; $$
其他回答
只需执行以下查询:
DO $$ DECLARE
r RECORD;
BEGIN
FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP
EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE';
END LOOP;
END $$;
这是一个非常有趣的问题,您可以通过多种方式完成:
1.通过删除并重新创建当前架构
这里,通常情况下,我们有一个默认的公共模式。所以,我用它作为一个例子。
-- Recreate the schema
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
-- Restore default permissions
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
如果您使用PostgreSQL 9.3或更高版本,您可能还需要恢复默认授权。
赞成的意见:
这将清理整个架构并将其重新创建为新架构。
欺骗:
您将丢失其他实体,如函数、视图、物化视图等。
2.通过使用从pg_tables表中获取所有表名。
PostgreSQL将所有表存储在其名为pg_table的记录表中。
SELECT
'DROP TABLE IF EXISTS "' || tablename || '" CASCADE;'
from
pg_tables WHERE schemaname = 'public';
如您所见,通过使用子查询,我们可以从模式中删除整个表。
赞成的意见:
当其他数据实体很重要,并且您只想从模式中删除表时,这种方法对您非常有用。
3.终端
使用shell上的postgres用户登录
$ sudo -u postgres psql
连接数据库
$ \c mydatabase
粘贴这些命令:
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
注意:这一组命令与第一点类似,因此优点和缺点将保持不变。。
继Pablo和LenW之后,这里有一个单行程序,它既准备又执行:
psql-U$PGUSER$PGDB-t-c“从pg_tables中选择'drop table\”'||tablename||'\“cascade;',其中schemaname='public'”|psql-U$PGUSER$PGDB
注意:设置$PGUSER和$PGDB或将其替换为所需的值
drop schema public cascade;
应该会成功。
下面是现成的查询:
选择
'drop table if exists "' || tablename || '" cascade;' as pg_drop
FROM
pg_tables
哪里
schemaname='your schema';