pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
当你创建了一个表后发现犯了错误,或者 应用的需求变了,可以删除 该表再重新创建。但如果 表中已经装满数据,或者表被其他数据库对象 (例如外键 约束)引用,这就不是一个方便的选择。因此 PostgreSQL 提供了一族命令来修改现有的 表。
你可以
增加列
移除列
增加约束
移除约束
修改默认值
重命名列
重命名表
All these actions are performed using the ALTER TABLE command.
要添加一个列,使用这条命令:
ALTER TABLE products ADD COLUMN description text;
新列在表的现有行中最初将填充为空值。
你也可以同时在该列上定义约束, 使用通常的语法:
ALTER TABLE products ADD COLUMN description text CHECK (description <> '');
新列不能有非空约束,因为该列 最初必须包含空值。但你可以稍后添加非空 约束。此外,你不能在新列上定义默认值。按照 SQL 标准,这将必须用默认值 填充现有行中的新列, 这尚未实现。但你可以稍后调整列 默认值。
添加约束时使用表约束语法。例如:
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;
系统会立即检查约束,因此只有表中的数据满足约束,才能将其添加。
要删除约束,需要知道它的名称。如果曾为它指定名称,这很容易;否则系统会分配一个自动生成的名称,需要将其查出来。psql的命令\d 对此很有帮助;其他接口也可能提供检查表细节的方式。然后执行以下命令:tablename
ALTER TABLE products DROP CONSTRAINT some_name;
(如果处理的是自动生成的约束名,例如$2,别忘了加上双引号,使其成为有效标识符。)
除非空约束之外,所有类型的约束都可以用相同方式删除。要删除非空约束,使用:
ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
(请记住,非空约束没有名称。)
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。