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

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 6.5 已于 2004 年 6 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

ALTER TABLE

ALTER TABLE — 修改表属性

大纲

ALTER TABLE table
    [ * ] ADD [ COLUMN ] ER">coBLE> type
ALTER TABLE table
    [ * ] RENAME [ COLUMN ] ER">coBLE> TO newcolumn
ALTER TABLE table
    RENAME TO newtable
  

输入

table

要更改的现有表的名称。

column

新列或现有列的名称。

type

新列的类型。

newcolumn

现有列的新名称。

newtable

现有列的新名称。

输出

ALTER

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

NEW

添加列后返回的消息。

ERROR

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

描述

ALTER TABLE 更改一个现有表的定义。 新列及其类型的指定风格和限制与 CREATE TABLE 中相同。 RENAME 子句更改表或列的名称,而不更改受影响表中包含的任何数据。因此,该命令执行后,表或列仍保持相同的类型和大小。

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

注意

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

“[*]” 跟在表名之后表示该语句应作用于该表以及继承层次中位于其下的所有表。 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;
   

兼容性

SQL92

ALTER TABLE/RENAME 是 Postgres 的语言扩展。

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

ALTER TABLE table ALTER [
       COLUMN ] column
    SET DEFAULT default
ALTER TABLE table ALTER [
       COLUMN ] column
    ADD [ CONSTRAINT >constrain> ] table-constraint
      

把指定的默认值或约束放入表中该列的定义。 默认值和表约束子句的语法见 CREATE TABLE。 如果默认值子句已存在,它将被新定义替换。如果该列上已有任何约束,它们将通过与新约束的布尔 AND 关系保留。

目前,要为现有列设置新的默认约束,必须重建并重新装载该表:

CREATE TABLE temp AS SELECT * FROM distributors;
DROP TABLE distributors;
CREATE TABLE distributors (
    did      DECIMAL(3) DEFAULT 1,
    name     VARCHAR(40) NOT NULL,
    city     VARCHAR(30)
);
INSERT INTO distributors SELECT * FROM temp;
DROP TABLE temp;
       
ALTER TABLE table
    DROP DEFAULT default
ALTER TABLE table
    DROP CONSTRAINT constraint { RESTRICT | CASCADE }
      

从表的定义中移除由 default 指定的默认值或由 constraint 指定的规则。如果指定了 RESTRICT,只有没有依赖约束的约束才能被销毁。如果指定了 CASCADE,任何依赖于该约束的约束也会被删除。

目前,要移除现有列上的默认值或约束,必须重建并重新装载该表:

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 }
      

从表中移除一个列。如果指定了 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;
       

提交更正

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