]> granicus.if.org Git - postgresql/commitdiff
Fix ADD IF NOT EXISTS used in conjunction with ALTER TABLE ONLY
authorGreg Stark <stark@mit.edu>
Wed, 19 Dec 2018 23:28:35 +0000 (18:28 -0500)
committerGreg Stark <stark@mit.edu>
Thu, 20 Dec 2018 00:41:18 +0000 (19:41 -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 7a30da5d0db4c51957c12e1619e7250e923e2ffe..78e30017714ff0d9d1c8f7dff0b4c098ecef7efa 100644 (file)
@@ -3477,7 +3477,7 @@ ATExecCmd(List **wqueue, AlteredTableInfo *tab, Relation rel,
                                                                                 * 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 b5c4e82410c2caf21559b9b1e5eb71e12ad4d5be..78bc4ffde623bf6ae4deafbf91af2e4b5cbc11fa 100644 (file)
@@ -3153,6 +3153,9 @@ Table "public.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   | Modifiers 
@@ -3163,6 +3166,9 @@ Table "public.test_add_column"
 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   | Modifiers 
index fdc300d6b721b1b7e7829ec018c6e76e5dfddd8b..f9f952eb87d133fc59908ef641d62fafc743b65e 100644 (file)
@@ -1970,9 +1970,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