历史版本。 PostgreSQL 7.4 已结束支持。 请参阅 当前版本手册.
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.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;
(请记住,非空约束没有名称。)