PostgreSQL ALTER TABLE 命令详解

PostgreSQL ALTER TABLE
命令用于 修改已有表的结构,包括添加、修改、删除列,添加约束,修改存储设置等。
1. 基本语法
ALTER TABLE table_name action;
table_name
:要修改的表名。action
:修改表的具体操作(如添加列、删除列、更改数据类型等)。
2. 添加列
使用 ADD COLUMN
添加新的列。
2.1 添加单个列
ALTER TABLE employees ADD COLUMN age INT;
示例:
ALTER TABLE employees ADD COLUMN department VARCHAR(50);
2.2 添加多个列
ALTER TABLE employees
ADD COLUMN phone VARCHAR(15),
ADD COLUMN address TEXT;
3. 修改列
3.1 修改列的数据类型
ALTER TABLE employees ALTER COLUMN age TYPE BIGINT;
3.2 修改列的默认值
ALTER TABLE employees ALTER COLUMN age SET DEFAULT 25;
3.3 删除列的默认值
ALTER TABLE employees ALTER COLUMN age DROP DEFAULT;
3.4 修改列的 NOT NULL 约束
- 添加
NOT NULL
:
ALTER TABLE employees ALTER COLUMN age SET NOT NULL;
- 删除
NOT NULL
:
ALTER TABLE employees ALTER COLUMN age DROP NOT NULL;
3.5 修改列的名称
ALTER TABLE employees RENAME COLUMN age TO emp_age;
4. 删除列
4.1 删除单个列
ALTER TABLE employees DROP COLUMN phone;
4.2 删除多个列
ALTER TABLE employees
DROP COLUMN phone,
DROP COLUMN address;
5. 重命名表
ALTER TABLE employees RENAME TO staff;
6. 约束操作
6.1 添加主键
ALTER TABLE employees ADD CONSTRAINT emp_pk PRIMARY KEY (id);
6.2 删除主键
ALTER TABLE employees DROP CONSTRAINT emp_pk;
6.3 添加唯一约束
ALTER TABLE employees ADD CONSTRAINT unique_email UNIQUE (email);
6.4 添加外键
ALTER TABLE employees ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dept_id) REFERENCES departments(id);
6.5 删除外键
ALTER TABLE employees DROP CONSTRAINT emp_dept_fk;
7. 修改表的存储设置
7.1 设置表的 FILLFACTOR
ALTER TABLE employees SET (FILLFACTOR = 70);
FILLFACTOR
控制表的数据块填充比例,默认 100
。
7.2 解除表的存储参数
ALTER TABLE employees RESET (FILLFACTOR);
8. 设置表的继承
ALTER TABLE employees INHERIT company_records;
取消继承
ALTER TABLE employees NO INHERIT company_records;
9. 禁用或启用触发器
9.1 禁用触发器
ALTER TABLE employees DISABLE TRIGGER ALL;
9.2 启用触发器
ALTER TABLE employees ENABLE TRIGGER ALL;
10. 例子总结
示例:完整修改表
ALTER TABLE employees
ADD COLUMN salary NUMERIC(10,2),
ALTER COLUMN age TYPE SMALLINT,
ALTER COLUMN email SET NOT NULL,
DROP COLUMN phone,
RENAME COLUMN address TO home_address,
ADD CONSTRAINT unique_email UNIQUE (email);
这条命令做了以下修改:
- 添加
salary
列。 - 修改
age
的数据类型为SMALLINT
。 - 设置
email
列NOT NULL
约束。 - 删除
phone
列。 - 将
address
列改名为home_address
。 - 添加
email
列的唯一约束。
11. 使用 ALTER TABLE
时的注意事项
✅ 删除列时要谨慎:DROP COLUMN
不可逆,可能会丢失重要数据。
✅ 修改数据类型时注意兼容性:新数据类型必须能兼容已有数据,否则需要手动转换。
✅ 添加约束可能影响性能:NOT NULL
、UNIQUE
、FOREIGN KEY
可能会降低插入和更新速度。
✅ 尽量避免在大表上直接修改:ALTER TABLE
可能会锁表,影响性能。对于大表,建议:
- 创建新表,复制数据,然后重命名表
- 使用
CONCURRENTLY
选项(索引相关)
ALTER TABLE
是管理 PostgreSQL 表结构的重要工具,更多详细内容请关注其他相关文章!