0

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

例如:

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

在这个例子中,说table1andtable3用在视图中,而表 2、4 和 5 没有。如果我运行脚本,我会收到一条错误消息table1。然后我必须评论该行并再次运行脚本。然后,table2被正确删除,我再次收到一条错误消息table3。然后我必须评论这一行并再次运行脚本。我最终得到了最后两张桌子。

关键是我有数百个这样的表,使用和不使用混合在一起......

4

2 回答 2

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'
    

这滴table1table3

于 2015-11-24T10:58:33.807 回答
0

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

http://www.jaredlog.com/?p=137上有一个例子

只需将函数中的“EXCEPTION WHEN UNDEFINED_TABLE THEN”替换为尝试执行时抛出的异常名称,它应该可以工作。

我认为您甚至可以删除“WHEN UNDEFINED_TABLE”,以便它捕获所有异常。

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

于 2015-11-24T10:43:24.607 回答