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 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。