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

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 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 7.1 已于 2006 年 4 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

ALTER TABLE

ALTER TABLE — 修改表属性

大纲

ALTER TABLE [ ONLY ] table [ * ]
    ADD [ COLUMN ] column type
ALTER TABLE [ ONLY ] table [ * ]
    ALTER [ COLUMN ] column { SET DEFAULT value | DROP DEFAULT }
ALTER TABLE table [ * ]
    RENAME [ COLUMN ] column TO newcolumn
ALTER TABLE table
    RENAME TO newtable
ALTER TABLE table
    ADD table constraint definition
ALTER TABLE table
        OWNER TO new owner 
  

输入

table

要更改的现有表的名称。

column

新列或现有列的名称。

type

新列的类型。

newcolumn

现有列的新名称。

newtable

表的新名称。

table constraint definition

表的新表约束

New user

表的新所有者的用户名。

输出

ALTER

列或表重命名后返回的消息。

ERROR

表或列不可用时返回的消息。

描述

ALTER TABLE 更改一个现有表的定义。 ADD COLUMN 形式使用与 CREATE TABLE 相同的语法向表添加一个新列。ALTER COLUMN 形式允许你为列设置或移除默认值。注意,默认值只会应用于新插入的行。 RENAME 子句更改表或列的名称,而不更改受影响表中包含的任何数据。因此,该命令执行后,表或列仍保持相同的类型和大小。 ADD table constraint definition 子句使用与 CREATE TABLE 相同的语法向表增加一个新约束。 OWNER 子句把表的所有者更改为用户 new user。

要更改表的模式,你必须拥有该表。

注意

关键字COLUMN只是噪声,可以省略。

在当前实现中,新列的默认值和约束子句会被忽略。可以在之后使用 ALTER TABLE 的 SET DEFAULT 形式设置默认值。(你还必须用 UPDATE 把已有的行更新为新默认值。)

在当前实现中,只能向表添加 FOREIGN KEY 约束。要创建或移除唯一约束,请创建唯一索引(见 CREATE INDEX )。要添加检查约束,你需要用 CREATE TABLE 命令的其他参数重建并重新装载该表。

要更改表,你必须拥有它。不允许重命名系统目录模式的任何部分。 PostgreSQL 用户指南中还有关于继承的更多信息。

有关有效参数的进一步说明,请参见CREATE TABLE。

用法

要添加类型为 VARCHAR 的列到表中:

ALTER TABLE distributors ADD COLUMN address VARCHAR(30);
   

要重命名一个现有列:

ALTER TABLE distributors RENAME COLUMN address TO city;
   

要重命名一个现有的表:

ALTER TABLE distributors RENAME TO suppliers;
   

为一个表增加一个外键约束:

ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses(address) MATCH FULL
   

兼容性

SQL92

ADD COLUMN 形式符合标准,但不支持默认值和约束,如上所述。 ALTER COLUMN 形式完全符合标准。

SQL92 为 ALTER TABLE 语句规定了一些 Postgres 尚不直接支持的附加能力:

ALTER TABLE table DROP CONSTRAINT constraint { RESTRICT | CASCADE }
      

移除一个表约束(例如检查约束、唯一约束或外键约束)。要移除唯一约束,请删除一个唯一索引。要移除其他种类的约束,你需要用 CREATE TABLE 命令的其他参数重建并重新装载该表。

例如,要删除表 distributors 上的任何约束:

CREATE TABLE temp AS SELECT * FROM distributors;
DROP TABLE distributors;
CREATE TABLE distributors AS SELECT * FROM temp;
DROP TABLE temp;
       
ALTER TABLE table DROP [ COLUMN ] column { RESTRICT | CASCADE }
      

从表中移除一个列。目前,要移除一个现有列,必须重建并重新装载该表:

CREATE TABLE temp AS SELECT did, city FROM distributors;    
DROP TABLE distributors;
CREATE TABLE distributors (
    did      DECIMAL(3)  DEFAULT 1,
    name     VARCHAR(40) NOT NULL
);
INSERT INTO distributors SELECT * FROM temp;
DROP TABLE temp;
       

重命名列和表的子句是 Postgres 对 SQL92 的扩展。

提交更正

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