我需要删除未在我的数据库中的其他位置使用的表(主要是视图)。我列出了一系列DROP TABLE...
命令但我无法立即运行它们,因为每次找到使用过的表时都会发出错误消息。我需要一个忽略这些消息的命令(然后不要删除使用过的表)并跳转到下一个命令。
例如:
DROP TABLE schema1.table1 ;
DROP TABLE schema1.table2 ;
DROP TABLE schema1.table3 ;
DROP TABLE schema1.table4 ;
DROP TABLE schema1.table5 ;
在此示例中,假设table1
和table3
用于视图,而表2,4和5则不是。如果我运行脚本,则会显示table1
的错误消息。然后我要对该行进行注释并再次运行该脚本。然后,table2
被正确删除,我再次收到table3
的错误消息。然后,我必须评论此行并再次运行脚本。我最终得到了最后两张牌桌。
关键是我有数百个这样的表,使用过的,不是混合使用的......
答案 0 :(得分:0)
它的plpgsql实际上(我在评论中写了plsql)。
http://www.jaredlog.com/?p=137
上有一个例子只需更换" EXEPTION WHEN UNDEFINED_TABLE那么"在函数中,当你尝试执行它时会抛出异常的名称,它应该可以工作。
我认为你甚至可以删除" WHEN UNDEFINED_TABLE"所以它捕获了所有异常。
将此函数与您的表名一起用作参数(不是整个查询)。
答案 1 :(得分:0)
感谢@Nick Barnes的评论,我找到了一种更简单的方法:
使用以下内容创建一个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;
通过psql客户端调用此文件:
'D:/myFile.sql'
这会丢弃table1
和table3
!