跳到主要内容

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 各类操作所需锁级别汇总表