postgres如何通过命令将所有表删除到架构中


Answers:


17

您要使用的CASCADE选项DROP SCHEMA。从文档中

CASCADE -自动删除架构中包含的对象(表,函数等),然后删除所有依赖于这些对象的对象

要小心-强调我的重点。

显然,您之后需要重新创建架构。

要仅删除当前模式中的所有表,可以使用以下脚本:

DO $$ DECLARE
    tabname RECORD;
BEGIN
    FOR tabname IN (SELECT tablename 
                    FROM pg_tables 
                    WHERE schemaname = current_schema()) 
LOOP
    EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(tabname.tablename) || ' CASCADE';
END LOOP;
END $$;

WHERE schemaname = current_schema()如果要将所有表放在不同的架构中,请进行更改。


当我使用DROP SCHEMA schemaname CASCADE时;正在收到错误错误:“ DROP”处或附近的语法错误第2行:DROP模式
asalthangam,2013年

2
LINE 2?第1行是什么?
菲尔·

实际上,我需要删除所有表及其依赖对象。但它不应删除程序及所有程序
。.– asalthangam

但是当我使用drop schema命令时,它也会删除该架构。就我而言,模式应该存在
asalthangam '16

@asalthangam答案已更新
Phil16

3
yourdb=# DROP SCHEMA *schema_name* CASCADE;

(仅使用Postgresql 9.6.3进行测试的作品可能不适用于以前的版本)


1

@Techno精明

使用postgres语法删除表:

select '-- drop table ' || tablename || ' cascade;' from pg_tables 
where tablename not like 'pg%' and tablename not like 'sql%';

将结果文本复制到sql脚本或psql终端中。请注意,命令已被注释掉。


我认为问题是关于在特定模式中删除表。
mustaccio

-2

如果您只是想要一种非常简单的方法来执行此操作。.这是我过去使用的脚本

select 'drop table '||table_name||' cascade constraints;' from user_tables;

这将为模式中的所有表打印一系列放置命令。假脱机查询结果并执行。

同样,如果您想清除多个表格,则可以编辑以下内容以适合您的需求

select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')

资料来源:https : //forums.oracle.com/forums/thread.jspa?threadID=614090


3
问题是Postgres,而不是Oracle。
菲尔ᵀᴹ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.