↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 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 已结束支持。 请参阅 当前版本手册.

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;

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.