ALTER TABLE [ IF EXISTS ] { ONLY $name$ | $name$ [ * ] }
    $action$ [ , ... ]

ALTER TABLE [ IF EXISTS ] { ONLY $name$ | $name$ [ * ] }
    RENAME [ COLUMN ] $column_name$ TO $new_column_name$

ALTER TABLE [ IF EXISTS ] { ONLY $name$ | $name$ [ * ] }
    RENAME CONSTRAINT $constraint_name$ TO $new_constraint_name$

ALTER TABLE [ IF EXISTS ] $name$
    RENAME TO $new_name$

ALTER TABLE [ IF EXISTS ] $name$
    SET SCHEMA $new_schema$

ALTER TABLE ALL IN TABLESPACE $name$ [ OWNED BY $role_name$ [ , ... ] ]
    SET TABLESPACE $new_tablespace$ [ NOWAIT ]

ALTER TABLE [ IF EXISTS ] $name$
    ATTACH PARTITION $partition_name$ { FOR VALUES $partition_bound_spec$ | DEFAULT }

ALTER TABLE [ IF EXISTS ] $name$
    DETACH PARTITION $partition_name$ [ CONCURRENTLY | FINALIZE ]

where $action$ is:

ADD [ COLUMN ] [ IF NOT EXISTS ] $column_name$ $data_type$ [ COLLATE $collation$ ] [ $column_constraint$ [ ... ] ] |
    DROP [ COLUMN ] [ IF EXISTS ] $column_name$ [ RESTRICT | CASCADE ] | |
    ALTER [ COLUMN ] $column_name$ [ SET DATA ] TYPE $data_type$ [ COLLATE $collation$ ] [ USING $expression$ ] | |
    ALTER [ COLUMN ] $column_name$ SET DEFAULT $expression$ | |
    ALTER [ COLUMN ] $column_name$ DROP DEFAULT | |
    ALTER [ COLUMN ] $column_name$ { SET | DROP } NOT NULL | |
    ALTER [ COLUMN ] $column_name$ DROP EXPRESSION [ IF EXISTS ] | |
    ALTER [ COLUMN ] $column_name$ ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( $sequence_options$ ) ] | |
    ALTER [ COLUMN ] $column_name$ { SET GENERATED { ALWAYS | BY DEFAULT } | SET $sequence_option$ | RESTART [ [ WITH ] $restart$ ] } [ ... ] |
    ALTER [ COLUMN ] $column_name$ DROP IDENTITY [ IF EXISTS ] |
    ALTER [ COLUMN ] $column_name$ SET STATISTICS $integer$ |
    ALTER [ COLUMN ] $column_name$ SET ( $attribute_option$ = $value$ [ , ... ] ) |
    ALTER [ COLUMN ] $column_name$ RESET ( $attribute_option$ [ , ... ] ) |
    ALTER [ COLUMN ] $column_name$ SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } |
    ALTER [ COLUMN ] $column_name$ SET COMPRESSION $compression_method$ |
    ADD $table_constraint$ [ NOT VALID ] |
    ADD $table_constraint_using_index$ |
    ALTER CONSTRAINT $constraint_name$ [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] |
    VALIDATE CONSTRAINT $constraint_name$ |
    DROP CONSTRAINT [ IF EXISTS ] $constraint_name$ [ RESTRICT | CASCADE ] |
    DISABLE TRIGGER [ $trigger_name$ | ALL | USER ] |
    ENABLE TRIGGER [ $trigger_name$ | ALL | USER ] |
    ENABLE REPLICA TRIGGER $trigger_name$ |
    ENABLE ALWAYS TRIGGER $trigger_name$ |
    DISABLE RULE $rewrite_rule_name$ |
    ENABLE RULE $rewrite_rule_name$ |
    ENABLE REPLICA RULE $rewrite_rule_name$ |
    ENABLE ALWAYS RULE $rewrite_rule_name$ |
    DISABLE ROW LEVEL SECURITY |
    ENABLE ROW LEVEL SECURITY |
    FORCE ROW LEVEL SECURITY |
    NO FORCE ROW LEVEL SECURITY |
    CLUSTER ON $index_name$ |
    SET WITHOUT CLUSTER |
    SET WITHOUT OIDS |
    SET ACCESS METHOD $new_access_method$ |
    SET TABLESPACE $new_tablespace$ |
    SET { LOGGED | UNLOGGED } |
    SET ( { $storage_parameter$ [ = $value$ ] } [ , ... ] ) |
    RESET ( $storage_parameter$ [ , ... ] ) |
    INHERIT $parent_table$ |
    NO INHERIT $parent_table$ |
    OF $type_name$ |
    NOT OF |
    OWNER TO { $new_owner$ | CURRENT_ROLE | CURRENT_USER | SESSION_USER } |
    REPLICA IDENTITY { DEFAULT | USING INDEX $index_name$ | FULL | NOTHING }

where $partition_bound_spec$ is:

IN ( $partition_bound_expr$ [ , ... ] ) |
    FROM ( { $partition_bound_expr$ | MINVALUE | MAXVALUE } [ , ... ] )
    TO ( { $partition_bound_expr$ | MINVALUE | MAXVALUE } [ , ... ] ) |
    WITH ( MODULUS $numeric_literal$, REMAINDER $numeric_literal$ )

where $column_constraint$ is:

[ CONSTRAINT $constraint_name$ ]
    { NOT NULL |
    NULL |
    CHECK ( $expression$ ) [ NO INHERIT ] |
    DEFAULT $default_expr$ |
    GENERATED ALWAYS AS ( $generation_expr$ ) STORED |
    GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( $sequence_options$ ) ] |
    UNIQUE [ NULLS [ NOT ] DISTINCT ] $column_index_parameters$ |
    PRIMARY KEY $column_index_parameters$ |
    REFERENCES $reftable$ [ ( $refcolumn$ ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
    [ ON DELETE $referential_action$ ] [ ON UPDATE $referential_action$ ] }
    [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

where $table_constraint$ is:

[ CONSTRAINT $constraint_name$ ]
    { CHECK ( $expression$ ) [ NO INHERIT ] |
    UNIQUE [ NULLS [ NOT ] DISTINCT ] ( $column_name$ [ , ... ] ) $index_parameters$ |
    PRIMARY KEY ( $column_name$ [ , ... ] ) $index_parameters$ |
    EXCLUDE [ USING $index_method$ ] ( { $exclude_element$ WITH $operator$ } [ , ... ] ) $index_parameters$ [ WHERE ( $predicate$ ) ] |
    FOREIGN KEY ( $column_name$ [ , ... ] ) REFERENCES $reftable$ [ ( $refcolumn$ [ , ... ] ) ]
    [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE $referential_action$ ] [ ON UPDATE $referential_action$ ] }
    [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

where $table_constraint_using_index$ is:

[ CONSTRAINT $constraint_name$ ]
    { UNIQUE | PRIMARY KEY } USING INDEX $index_name$
    [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

where $index_parameters$ is:

[ INCLUDE ( $column_name$ [ , ... ] ) ]
    [ WITH ( { $storage_parameter$ [ = $value$ ] } [ , ... ] ) ]
    [ USING INDEX TABLESPACE $tablespace_name$ ]

where $column_index_parameters$ is:

USING INDEX TABLESPACE $tablespace_name$

where $exclude_element$ is:

{ $column_name$ | ( $expression$ ) } [ $opclass$ ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ]

where $referential_action$ is:

{ NO ACTION | RESTRICT | CASCADE | SET NULL [ ( $column_name$ [ , ... ] ) ] | SET DEFAULT [ ( $column_name$ [ , ... ] ) ] }
