ALTER TABLE
是一个 DDL 命令,用于更改表的定义
ALTER TABLE
出现在每个 PostgreSQL 版本中。
更改历史记录
注意:此列表可能不完整,特别是对于 PostgreSQL 9.0 之前的版本。.
- PostgreSQL 18
- 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
- PostgreSQL 14
- PostgreSQL 13
ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION
命令已添加,用于将 生成列 转换为普通列(提交 f595117e)- 删除了对使用预 PostgreSQL 7.3 语法的外键约束的支持(提交 e58a5997)
- PostgreSQL 12
ALTER TABLE ... ATTACH PARTITION
现在以降低的锁定要求执行(提交 898e5e32)
在会话时区为 UTC 时,在ALTER TABLE ... SET DATA TYPE
timestamp
和timestamptz
之间更改时,避免表重写(提交 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
- PostgreSQL 9.5
- 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
- PostgreSQL 8.4
ALTER TABLE ... ALTER COLUMN ... SET DATA TYPE
语法已添加 (提交 1471e384)
- PostgreSQL 8.2
ALTER TABLE ... [ NO ] INHERIT
语法已添加 (提交 8c092781)
- PostgreSQL 8.1
- PostgreSQL 8.0
- PostgreSQL 7.4
ALTER TABLE ... CLUSTER ON ...
语法已添加 (提交 432b9b0f)
- PostgreSQL 7.3
ALTER TABLE ... SET STORAGE ...
语法已添加 (提交 03194432)
- PostgreSQL 7.0
ALTER TABLE ... DROP COLUMN ...
已添加 (初始提交 fa5400c0)
示例
ALTER TABLE
的基本用法示例
postgres=# CREATE TABLE foo (id int); CREATE TABLE postgres=# ALTER TABLE foo RENAME TO bar; ALTER TABLE
参考文献
- PostgreSQL 文档: ALTER TABLE
有用链接
- PostgreSQL:ALTER TABLE … ADD COLUMN … 正确的做法 - 2022 年 8 月 Hans-Jürgen Schönig / CyberTec 博客文章