根据标题。
我查看了手册,似乎没有命令行参数可以在"CREATE TABLE"语句中包含"IF NOT EXISTS"子句。
根据标题。
我查看了手册,似乎没有命令行参数可以在"CREATE TABLE"语句中包含"IF NOT EXISTS"子句。
不行。 pg_dump 最接近这个内置选项的是 --if-exists
,但它只能与 --clean
一起使用,这意味着它仅适用于像 DROP
命令之类的内容。
如果你想添加这样的内容,我认为你最好的选择是对转储文件进行后处理(假设你正在转储到纯 SQL 而不是二进制格式)。要覆盖各种情况,你需要一个正则表达式来覆盖CREATE TABLE
命令语法的这部分:
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE
[ IF NOT EXISTS ] table_name
然而,一个更简单的正则表达式可能已经涵盖了大部分情况(例如,我认为您永远不会倾销临时表格,从定义上来说,因此可以忽略这一部分)。同样,GLOBAL
和LOCAL
已被弃用,所以根据您的数据,这些也可以安全地忽略。
pg_dump文档供参考。
DO
块中,该块检查information_schema
以查看表是否存在。原因是IF NOT EXISTS
无法处理存在完全不同的具有相同名称的表的情况。 - Craig Ringer