postgres.git / summary / log / commit / refs

commit    9b0e5bd5320f95cfb35f0402c0f4bb7a1d3ecb0f
Author:   Fujii Masao <fujii@postgresql.org>
Date:     Thu Mar 05 03:55:52 2026 +0000
First released in: 14.23, 15.18, 16.14, 17.10, 18.4

    doc: Clarify that COLUMN is optional in ALTER TABLE ... ADD/DROP COLUMN.
    
    In ALTER TABLE ... ADD/DROP COLUMN, the COLUMN keyword is optional. However,
    part of the documentation could be read as if COLUMN were required, which may
    mislead users about the command syntax.
    
    This commit updates the ALTER TABLE documentation to clearly state that
    COLUMN is optional for ADD and DROP.
    
    Also this commit adds regression tests covering ALTER TABLE ... ADD/DROP
    without the COLUMN keyword.
    
    Backpatch to all supported versions.
    
    Author: Chao Li <lic@highgo.com>
    Reviewed-by: Robert Treat <rob@xzilla.net>
    Reviewed-by: Fujii Masao <masao.fujii@gmail.com>
    Discussion: https://postgr.es/m/CAEoWx2n6ShLMOnjOtf63TjjgGbgiTVT5OMsSOFmbjGb6Xue1Bw@mail.gmail.com
    Backpatch-through: 14


doc/src/sgml/ref/alter_table.sgml | 4 ++-- src/test/regress/expected/alter_table.out | 10 ++++++++++ src/test/regress/sql/alter_table.sql | 8 ++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index aab2c6eb19f..00817e90360 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -163,7 +163,7 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM <variablelist> <varlistentry id="sql-altertable-desc-add-column"> - <term><literal>ADD COLUMN [ IF NOT EXISTS ]</literal></term> + <term><literal>ADD [ COLUMN ] [ IF NOT EXISTS ]</literal></term> <listitem> <para> This form adds a new column to the table, using the same syntax as @@ -175,7 +175,7 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM </varlistentry> <varlistentry id="sql-altertable-desc-drop-column"> - <term><literal>DROP COLUMN [ IF EXISTS ]</literal></term> + <term><literal>DROP [ COLUMN ] [ IF EXISTS ]</literal></term> <listitem> <para> This form drops a column from a table. Indexes and diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out index ac1a7345d0f..5998c670aa3 100644 --- a/src/test/regress/expected/alter_table.out +++ b/src/test/regress/expected/alter_table.out @@ -3849,6 +3849,16 @@ Referenced by: ALTER TABLE test_add_column ADD COLUMN IF NOT EXISTS c5 SERIAL CHECK (c5 > 10); NOTICE: column "c5" of relation "test_add_column" already exists, skipping +ALTER TABLE test_add_column + ADD c6 integer; -- omit COLUMN +ALTER TABLE test_add_column + ADD IF NOT EXISTS c6 integer; +NOTICE: column "c6" of relation "test_add_column" already exists, skipping +ALTER TABLE test_add_column + DROP c6; -- omit COLUMN +ALTER TABLE test_add_column + DROP IF EXISTS c6; +NOTICE: column "c6" of relation "test_add_column" does not exist, skipping \d test_add_column* Table "public.test_add_column" Column | Type | Collation | Nullable | Default diff --git a/src/test/regress/sql/alter_table.sql b/src/test/regress/sql/alter_table.sql index 417202430a5..d6b6381ae5c 100644 --- a/src/test/regress/sql/alter_table.sql +++ b/src/test/regress/sql/alter_table.sql @@ -2331,6 +2331,14 @@ ALTER TABLE test_add_column \d test_add_column ALTER TABLE test_add_column ADD COLUMN IF NOT EXISTS c5 SERIAL CHECK (c5 > 10); +ALTER TABLE test_add_column + ADD c6 integer; -- omit COLUMN +ALTER TABLE test_add_column + ADD IF NOT EXISTS c6 integer; +ALTER TABLE test_add_column + DROP c6; -- omit COLUMN +ALTER TABLE test_add_column + DROP IF EXISTS c6; \d test_add_column* DROP TABLE test_add_column; \d test_add_column* [parent: 5f8124a0cf33]