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

Posted

技术标签:

【中文标题】如何删除所有表而不是 Postgresql 中的模式?【英文标题】:How do I remove all tables and not the schema in Postgresql? 【发布时间】:2015-10-03 00:54:57 【问题描述】:

我有一个分配给我的用户 (jason) 的架构。我无法删除架构,因为我没有这样做的权限。 有没有一种很好的方法可以删除架构中的每个表、数据和所有内容,并让它就像我有一个新创建的架构一样。 效果基本一样:

drop schema jason cascade;
create schema jason;

但没有实际删除架构。

【问题讨论】:

我想最好的方法是从 infomration_schema.tables 中生成 DROP TABLE 语句列表,然后一次运行所有这些语句。 【参考方案1】:

公认的答案很好,但您可以利用匿名块(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$$;

【讨论】:

【参考方案2】:

从 psql 试试这个:

-- Turn off headers:
\t
-- Use SQL to build SQL:
select 'drop table if exists "' || tablename || '" cascade;' 
  from pg_tables
 where schemaname = 'jason'; 
-- If the output looks good, write it to a file and run it:
\g out.tmp
\i out.tmp

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

【讨论】:

我还想评论一下,这只会创建您需要在此之后运行以删除表的命令集。 是和否,是的,创建命令集并运行它们。

以上是关于如何删除所有表而不是 Postgresql 中的模式?的主要内容,如果未能解决你的问题,请参考以下文章

在一个命令中删除所有表而不删除 django dbshel​​l 中的 postgres 中的数据库?

如何确保将 Tkinter 表单中的值输入 MySQL 表而不是收到错误消息?

sql 从数据库中重新加载所有表而不删除MySQL中的数据库

如何从 Laravel 5.1 中的表而不是“用户”表中对用户进行身份验证?

在 MySQL 中,如何编写 SQL 来连接两个表而不是一个子查询?

Django,级联移动到单独的表而不是级联删除