pg_dump可以被指示创建带有“IF NOT EXISTS”的表吗?

15

根据标题。

我查看了手册,似乎没有命令行参数可以在"CREATE TABLE"语句中包含"IF NOT EXISTS"子句。


没有这样的方法。如果您想要这样做,请将其包装在一个DO块中,该块检查information_schema以查看表是否存在。原因是IF NOT EXISTS无法处理存在完全不同的具有相同名称的表的情况。 - Craig Ringer
2
这在我看来没有什么好的理由。如果有一个完全不同列的表,则应该命名为不同的名称。所以,在我看来,IF NOT EXISTS 是有意义的。 - user3676604
1个回答

13

不行。 pg_dump 最接近这个内置选项的是 --if-exists,但它只能与 --clean 一起使用,这意味着它仅适用于像 DROP 命令之类的内容。

如果你想添加这样的内容,我认为你最好的选择是对转储文件进行后处理(假设你正在转储到纯 SQL 而不是二进制格式)。要覆盖各种情况,你需要一个正则表达式来覆盖CREATE TABLE 命令语法的这部分:

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE
       [ IF NOT EXISTS ] table_name

然而,一个更简单的正则表达式可能已经涵盖了大部分情况(例如,我认为您永远不会倾销临时表格,从定义上来说,因此可以忽略这一部分)。同样,GLOBALLOCAL已被弃用,所以根据您的数据,这些也可以安全地忽略。

pg_dump文档供参考。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接