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

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

drop schema jason cascade;
create schema jason;

但没有实际删除架构。

【问题讨论】:

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

标签: sql postgresql


【解决方案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
    

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

    【讨论】:

    • 我还想评论一下,这只会创建您需要在此之后运行以删除表的命令集。
    • 是和否,是的,创建命令集并运行它们。
    猜你喜欢
    • 2011-03-20
    • 2015-03-30
    • 1970-01-01
    • 2021-05-26
    • 2020-04-18
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多