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 TYPEtimestamp和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 STATISTICSALTER COLUMN SET (...)ALTER COLUMN RESET (...)CLUSTER ONSET WITHOUT CLUSTERVALIDATE 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
- PostgreSQL 8.0
- PostgreSQL 7.4
- 添加了
ALTER TABLE ... CLUSTER ON ...语法(提交 432b9b0f)
- 添加了
- PostgreSQL 7.3
- 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
参考资料
- PostgreSQL 文档: ALTER TABLE
有用链接
- PostgreSQL: ALTER TABLE … ADD COLUMN … done right - 2022 年 8 月,Hans-Jürgen Schönig / CyberTec 的博客文章
反馈
请在此处提交关于 "ALTER TABLE" 的任何评论、建议或更正。