pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
ALTER TABLE — 修改表属性
ALTER TABLEtable[ * ] ADD [ COLUMN ]ER">coBLE>typeALTER TABLEtable[ * ] RENAME [ COLUMN ]ER">coBLE> TOnewcolumnALTER TABLEtableRENAME TOnewtable
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;
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 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。