删除表时处理依赖项错误消息

时间:2015-11-24 07:38:07

标签: postgresql pgadmin drop-table

我需要删除未在我的数据库中的其他位置使用的表(主要是视图)。我列出了一系列DROP TABLE...命令但我无法立即运行它们,因为每次找到使用过的表时都会发出错误消息。我需要一个忽略这些消息的命令(然后不要删除使用过的表)并跳转到下一个命令。

例如:

DROP TABLE schema1.table1 ;
DROP TABLE schema1.table2 ;
DROP TABLE schema1.table3 ;
DROP TABLE schema1.table4 ;
DROP TABLE schema1.table5 ;

在此示例中,假设table1table3用于视图,而表2,4和5则不是。如果我运行脚本,则会显示table1的错误消息。然后我要对该行进行注释并再次运行该脚本。然后,table2被正确删除,我再次收到table3的错误消息。然后,我必须评论此行并再次运行脚本。我最终得到了最后两张牌桌。

关键是我有数百个这样的表,使用过的,不是混合使用的......

2 个答案:

答案 0 :(得分:0)

它的plpgsql实际上(我在评论中写了plsql)。

http://www.jaredlog.com/?p=137

上有一个例子

只需更换" EXEPTION WHEN UNDEFINED_TABLE那么"在函数中,当你尝试执行它时会抛出异常的名称,它应该可以工作。

我认为你甚至可以删除" WHEN UNDEFINED_TABLE"所以它捕获了所有异常。

将此函数与您的表名一起用作参数(不是整个查询)。

答案 1 :(得分:0)

感谢@Nick Barnes的评论,我找到了一种更简单的方法:

  1. 使用以下内容创建一个SQL文件:

    \set ON_ERROR_STOP 0
    
    DROP TABLE schema1.table1;
    DROP TABLE schema1.table2;    
    DROP TABLE schema1.table3;
    DROP TABLE schema1.table4;
    DROP TABLE schema1.table5;
    
  2. 通过psql客户端调用此文件:

    'D:/myFile.sql'
    
  3. 这会丢弃table1table3