PostgreSQL ALTER TABLE 修改表教程
ALTER TABLE 修改已有表的结构:增删列、改列类型、重命名、增删约束。多数操作只是修改系统目录,很快;但改类型会重写整表,需要注意锁。
本篇内容
- 添加 / 删除 / 重命名列
- 修改列类型与默认值
- 重命名表
- 添加 / 删除约束
- 锁与重写表的风险
列的增删改
-- 添加列(带默认值)
ALTER TABLE users ADD COLUMN nickname VARCHAR(50) DEFAULT '';
-- 删除列
ALTER TABLE users DROP COLUMN nickname;
-- 重命名列
ALTER TABLE users RENAME COLUMN name TO full_name;
-- 修改类型(注意:可能重写全表并锁写)
ALTER TABLE users ALTER COLUMN age TYPE BIGINT;
-- 修改默认值与非空
ALTER TABLE users ALTER COLUMN status SET DEFAULT 1;
ALTER TABLE users ALTER COLUMN name SET NOT NULL;
约束与表名
-- 添加约束(已存在数据不满足约束时会失败)
ALTER TABLE orders ADD CONSTRAINT orders_amount_check CHECK (amount >= 0);
-- 删除约束
ALTER TABLE orders DROP CONSTRAINT orders_amount_check;
-- 重命名表
ALTER TABLE users RENAME TO app_users;
待补充(TODO)
- 补充:大表加列/改类型的锁机制与在线变更方案(先加可空列、分批回填)
- 补充:ADD COLUMN IF NOT EXISTS / DROP COLUMN IF EXISTS 等幂等写法
- 补充:NOT NULL 约束的安全添加步骤(加 CHECK NOT VALID → 校验 → VALIDATE)
- 补充:ALTER TABLE 各类操作所需锁级别汇总表