Fix ADD IF NOT EXISTS used in conjunction with ALTER TABLE ONLY
authorGreg Stark
Wed, 19 Dec 2018 23:28:35 +0000 (18:28 -0500)
committerGreg Stark
Thu, 20 Dec 2018 00:40:25 +0000 (19:40 -0500)
The flag for IF NOT EXISTS was only being passed down in the normal
recursing case. It's been this way since originally added in 9.6 in
commit 2cd40adb85 so backpatch back to 9.6.

src/backend/commands/tablecmds.c
src/test/regress/expected/alter_table.out
src/test/regress/sql/alter_table.sql

index c096a8c4bb3ea52ae1c423bb763256c6cfe06c83..7dcfa551bc42a15e53ad58e01264c2c98c94de4a 100644 (file)
@@ -4042,7 +4042,7 @@ ATExecCmd(List **wqueue, AlteredTableInfo *tab, Relation rel,
        case AT_AddColumnToView:    /* add column via CREATE OR REPLACE VIEW */
            address = ATExecAddColumn(wqueue, tab, rel, (ColumnDef *) cmd->def,
                                      false, false, false,
-                                     false, lockmode);
+                                     cmd->missing_ok, lockmode);
            break;
        case AT_AddColumnRecurse:
            address = ATExecAddColumn(wqueue, tab, rel, (ColumnDef *) cmd->def,
index 83febdae81660619454a09ab3b239ef445db7a26..b9aa4f189b350e0410427c70415cf6c9331e012a 100644 (file)
@@ -3306,6 +3306,9 @@ ALTER TABLE test_add_column
 ALTER TABLE test_add_column
    ADD COLUMN c2 integer; -- fail because c2 already exists
 ERROR:  column "c2" of relation "test_add_column" already exists
+ALTER TABLE ONLY test_add_column
+   ADD COLUMN c2 integer; -- fail because c2 already exists
+ERROR:  column "c2" of relation "test_add_column" already exists
 \d test_add_column
           Table "public.test_add_column"
  Column |  Type   | Collation | Nullable | Default 
@@ -3316,6 +3319,9 @@ ERROR:  column "c2" of relation "test_add_column" already exists
 ALTER TABLE test_add_column
    ADD COLUMN IF NOT EXISTS c2 integer; -- skipping because c2 already exists
 NOTICE:  column "c2" of relation "test_add_column" already exists, skipping
+ALTER TABLE ONLY test_add_column
+   ADD COLUMN IF NOT EXISTS c2 integer; -- skipping because c2 already exists
+NOTICE:  column "c2" of relation "test_add_column" already exists, skipping
 \d test_add_column
           Table "public.test_add_column"
  Column |  Type   | Collation | Nullable | Default 
index 8b2f7d5b2b22beef644f213c3551488a8e5604b2..d675579977b497ef9a969082b9a858c542935f79 100644 (file)
@@ -2054,9 +2054,13 @@ ALTER TABLE test_add_column
 \d test_add_column
 ALTER TABLE test_add_column
    ADD COLUMN c2 integer; -- fail because c2 already exists
+ALTER TABLE ONLY test_add_column
+   ADD COLUMN c2 integer; -- fail because c2 already exists
 \d test_add_column
 ALTER TABLE test_add_column
    ADD COLUMN IF NOT EXISTS c2 integer; -- skipping because c2 already exists
+ALTER TABLE ONLY test_add_column
+   ADD COLUMN IF NOT EXISTS c2 integer; -- skipping because c2 already exists
 \d test_add_column
 ALTER TABLE test_add_column
    ADD COLUMN c2 integer, -- fail because c2 already exists