PostgreSQL ALTER TABLE 命令详解
                           
天天向上
发布: 2025-03-12 23:41:08

原创
511 人浏览过

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);

这条命令做了以下修改:

  1. 添加 salary 列。
  2. 修改 age 的数据类型为 SMALLINT
  3. 设置 emailNOT NULL 约束。
  4. 删除 phone 列。
  5. address 列改名为 home_address
  6. 添加 email 列的唯一约束。

11. 使用 ALTER TABLE 时的注意事项

删除列时要谨慎DROP COLUMN 不可逆,可能会丢失重要数据。
修改数据类型时注意兼容性:新数据类型必须能兼容已有数据,否则需要手动转换。
添加约束可能影响性能NOT NULLUNIQUEFOREIGN KEY 可能会降低插入和更新速度。
尽量避免在大表上直接修改ALTER TABLE 可能会锁表,影响性能。对于大表,建议:

  • 创建新表,复制数据,然后重命名表
  • 使用 CONCURRENTLY 选项(索引相关)

ALTER TABLE 是管理 PostgreSQL 表结构的重要工具,更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *