ALTER TABLE

用于更改表定义的 SQL 命令

ALTER TABLE 是用于更改表定义的 DDL 命令。

ALTER TABLE 在 PostgreSQL 的所有版本中都存在。

变更历史

注意:此列表可能不完整,特别是对于 PostgreSQL 9.0 之前的版本。.

  • PostgreSQL 18
    • ALTER TABLE ... SET [UN]LOGGED 不再允许用于 分区表(提交 e2bab2d7
    • CHECK 约束添加了 ENFORCED / NOT ENFORCED 语法 (提交 ca87c415)
    • 添加了 ALTER TABLE ... ALTER CONSTRAINT ... SET [NO] INHERIT 语法(提交 f4e53e10
  • PostgreSQL 17
    • 添加了 CONSTRAINT ... NOT NULL ... 语法 (提交 b0e96f31)
    • 添加了 ALTER TABLE ... SET EXPRESSION AS ... 语法(提交 5d06e99a
    • 添加了 ALTER TABLE ... SET STATISTICS DEFAULT 语法(提交 4f622503
    • 添加了 ALTER TABLE ... SET ACCESS METHOD DEFAULT 语法(提交 d61a6cad
    • ALTER TABLE ... MERGE PARTITIONS ... 语法已添加(提交 1adf16b8 已回滚(提交 3890d90c
    • ALTER TABLE ... SPLIT PARTITION ... 语法已添加(提交 87c21bb9 已回滚(提交 3890d90c
  • PostgreSQL 16
    • 添加了 SET STORAGE DEFAULT 语法(提交 b9424d01
  • PostgreSQL 15
    • 添加了 ALTER TABLE ... SET ACCESS METHOD 语法(提交 b0483263
    • 外键 ON DELETE SET ... 操作可以提供显式列列表 (提交 d6f96ed9)
    • 添加了 UNIQUE [ NULLS [ NOT ] DISTINCT ] 语法 (提交 94aa7cc5)
  • PostgreSQL 14
    • 添加了 ALTER TABLE ... DETACH PARTITION ... CONCURRENTLY 语法(提交 71f4c8c6
    • 添加了 ALTER TABLE ... ALTER [ COLUMN ] ... SET COMPRESSION 语法(提交 bbe0a81d
    • 添加了 ALTER TABLE ... OWNER TO CURRENT_ROLE 语法(提交 45b98057
  • PostgreSQL 13
  • PostgreSQL 12
    • ALTER TABLE ... ATTACH PARTITION 现在使用更低的锁定要求执行(提交 898e5e32
    • ALTER TABLE ... SET DATA TYPE 当会话时区为 UTC 时,在 timestamptimestamptz 之间更改可避免表重写(提交 3c592630
    • ALTER TABLE ... SET NOT NULL 可以避免不必要的表扫描(提交 bbb96c37
    • ALTER TABLE 现在可以干净地在 系统目录 表上执行(提交 590a8702
    • 添加了 GENERATED ALWAYS AS ( ... ) STORED 语法(提交 fc22b662
  • PostgreSQL 11
    • 带有非空常量默认值的 ALTER TABLE ... ADD COLUMN 不再需要表重写(初始提交 16828d5c
  • PostgreSQL 10
    • ALTER TABLE ... ADD PRIMARY KEY 会将任何 NOT NULL 更改传播到继承的子表(提交 c30f1770
  • PostgreSQL 9.6
    • 添加了 ALTER TABLE ... ADD COLUMN ... IF NOT EXISTS(提交 2cd40adb
    • ALTER TABLE ... SET (fillfactor = ...) 可以在较低的锁定级别执行(提交 fcb4bfdd
    • ALTER TABLE ... SET (autovacuum* = ...) 可以在较低的锁定级别执行(提交 47167b79
  • PostgreSQL 9.5
    • 添加了 ALTER TABLE ... (ENABLE|DISABLE) ROW SECURITY(提交 491c029d
    • 添加了 ALTER TABLE ... SET (LOGGED|UNLOGGED)(提交 f41872d0
    • ALTER TABLE ... RENAME CONSTRAINT 支持 ALTER TABLE IF EXISTS(提交 1d8198bb
    • ALTER TABLE 现在将执行 table_rewrite 事件触发器(提交 618c9430
  • PostgreSQL 9.4
    • 添加了 ALTER TABLE ALL IN TABLESPACE ...(初始提交 fbe19ee3;提交 d9b2bc45 确立了此语法)
    • 添加了 ALTER TABLE ... REPLICA IDENTITY ...  语法(初始提交 07cacba9
    • 以下 ALTER TABLE 命令已修改为在较低的锁定级别执行(提交 e5550d5f
      • ALTER COLUMN SET STATISTICS
      • ALTER COLUMN SET (...)
      • ALTER COLUMN RESET (...)
      • CLUSTER ON
      • SET WITHOUT CLUSTER
      • VALIDATE CONSTRAINT
  • PostgreSQL 9.2
    • 添加了 ALTER TABLE [ IF EXISTS] ... RENAME CONSTRAINT ... TO ... 语法(提交 39d74e34
  • PostgreSQL 9.1
    • ALTER TABLE ... ADD constraint 添加了 NOT VALID 选项(提交 722bf701
    • 添加了 ALTER TABLE VALIDATE constraint 语法(提交 722bf701
    • 添加了 ALTER TABLE name {OF type | NOT OF type} 语法(提交 68739ba8
    • 添加了 ALTER TABLE ... ADD { UNIQUE | PRIMARY KEY } USING INDEX 语法(提交 88452d5b
    • ALTER TABLE ... SET DATA TYPE ... 对于某些数据类型组合不再需要表重写(提交 d31e2a49
  • PostgreSQL 8.4
    • 添加了 ALTER TABLE ... ALTER COLUMN ... SET DATA TYPE 语法(提交 1471e384
  • PostgreSQL 8.2
    • 添加了 ALTER TABLE ... [ NO ] INHERIT 语法(提交 8c092781
  • PostgreSQL 8.1
    • 添加了 ALTER TABLE ... SET SCHEMA ... 语法(提交 35508d1c
    • 添加了 ALTER TABLE ... { ENABLE | DISABLE } TRIGGER 语法(提交 188c7c8c
  • PostgreSQL 8.0
    • ALTER TABLE ... ADD COLUMN 带有默认值和 NOT NULL 约束(提交 077db40f
    • 添加了 ALTER TABLE ... SET TABLESPACE ... 语法(提交 af4de814
    • 添加了 ALTER TABLE ... SET WITHOUT CLUSTER 语法(提交 1cdc5872
    • 可以更改列类型(提交 077db40f
    • 支持在单个 ALTER TABLE 命令中执行多个 ALTER 操作(提交 077db40f
  • PostgreSQL 7.4
    • 添加了 ALTER TABLE ... CLUSTER ON ... 语法(提交 432b9b0f
  • PostgreSQL 7.3
    • 添加了 ALTER TABLE ... DROP COLUMN ... 语法(提交 38bb77a5
    • 添加了 ALTER TABLE ... SET STORAGE ... 语法(提交 03194432
  • PostgreSQL 7.0
    • 添加了 ALTER TABLE ... ADD CONSTRAINT ... 语法(提交 ddd596d3

示例

ALTER TABLE 的基本用法示例

postgres=# CREATE TABLE foo (id int);
CREATE TABLE

postgres=# ALTER TABLE foo RENAME TO bar;
ALTER TABLE

分类

DDL, SQL 命令

另请参阅

CREATE TABLE, DROP TABLE, ALTER FOREIGN TABLE

反馈

请在此处提交关于 "ALTER TABLE" 的任何评论、建议或更正。