↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3
历史版本PostgreSQL 7.4 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

5.6. 修改表 #

当你创建了一个表后发现犯了错误,或者 应用的需求变了,可以删除 该表再重新创建。但如果 表中已经装满数据,或者表被其他数据库对象 (例如外键 约束)引用,这就不是一个方便的选择。因此 PostgreSQL 提供了一族命令来修改现有的 表。

你可以

  • 增加列

  • 移除列

  • 增加约束

  • 移除约束

  • 修改默认值

  • 重命名列

  • 重命名表

All these actions are performed using the ALTER TABLE command.

5.6.1. 增加列

要添加一个列,使用这条命令:

ALTER TABLE products ADD COLUMN description text;

新列在表的现有行中最初将填充为空值。

你也可以同时在该列上定义约束, 使用通常的语法:

ALTER TABLE products ADD COLUMN description text CHECK (description <> '');

新列不能有非空约束,因为该列 最初必须包含空值。但你可以稍后添加非空 约束。此外,你不能在新列上定义默认值。按照 SQL 标准,这将必须用默认值 填充现有行中的新列, 这尚未实现。但你可以稍后调整列 默认值。

5.6.2. 移除列

要删除一个列,使用这条命令:

ALTER TABLE products DROP COLUMN description;

5.6.3. 增加约束

添加约束时使用表约束语法。例如:

ALTER TABLE products ADD CHECK (name <> '');
ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);
ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;

非空约束不能写成表约束,添加时应使用以下语法:

ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;

系统会立即检查约束,因此只有表中的数据满足约束,才能将其添加。

5.6.4. 移除约束

要删除约束,需要知道它的名称。如果曾为它指定名称,这很容易;否则系统会分配一个自动生成的名称,需要将其查出来。psql的命令\d tablename对此很有帮助;其他接口也可能提供检查表细节的方式。然后执行以下命令:

ALTER TABLE products DROP CONSTRAINT some_name;

(如果处理的是自动生成的约束名,例如$2,别忘了加上双引号,使其成为有效标识符。)

除非空约束之外,所有类型的约束都可以用相同方式删除。要删除非空约束,使用:

ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;

(请记住,非空约束没有名称。)

5.6.5. 更改默认值

要为列设置新的默认值,使用像这样的命令:

ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;

要删除任何默认值,使用

ALTER TABLE products ALTER COLUMN price DROP DEFAULT;

这等价于把默认值设为空值,至少在 PostgreSQL 中是这样。因此,删除一个 从未定义过的默认值并不是错误,因为 默认值隐式地就是空值。

5.6.6. 重命名列

要重命名一个列:

ALTER TABLE products RENAME COLUMN product_no TO product_number;

5.6.7. 重命名表

要重命名一个表:

ALTER TABLE products RENAME TO items;

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。