pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
CREATE TABLE — 创建一个新表
CREATE [ TEMPORARY | TEMP ] TABLEtable_name( {column_nametype[column_constraint[ ... ] ] |table_constraint} [, ... ] ) [ INHERITS (parent_table[, ... ] ) ] wherecolumn_constraintcan be: [ CONSTRAINTconstraint_name] { NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULTvalue| CHECK (condition) | REFERENCEStable[ (column) ] [ MATCH FULL | MATCH PARTIAL ] [ ON DELETEaction] [ ON UPDATEaction] [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] } andtable_constraintcan be: [ CONSTRAINTconstraint_name] { UNIQUE (column_name[, ... ] ) | PRIMARY KEY (column_name[, ... ] ) | CHECK (condition) | FOREIGN KEY (column_name[, ... ] ) REFERENCEStable[ (column[, ... ] ) ] [ MATCH FULL | MATCH PARTIAL ] [ ON DELETEaction] [ ON UPDATEaction] [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] }
如果指定,则该表仅为本次会话创建,并在会话退出时自动删除。 在临时表存在期间,(本会话中)同名的现有永久表不可见。 在临时表上创建的任何索引也都会自动成为临时索引。
table_name要创建的新表的名称。
column_name要在新表中创建的列的名称。
type列的类型。这可以包括数组说明符。有关数据类型和数组的更多信息,请参阅 PostgreSQL 用户指南。
parent_table可选的 INHERITS 子句指定一组表名,该表自动从中继承所有字段。
constraint_name列约束或表约束的可选名称。如果未指定,系统会生成一个名称。
value列的默认值。详见 DEFAULT 子句。
conditionCHECK 子句指定完整性约束(测试),要使插入或更新操作成功,新行或更新后的行必须满足这些约束。每个约束都必须是一个产生布尔结果的表达式。出现在列定义中的条件只应引用该列的值,而作为表约束出现的条件可以引用多个列。
table被外键约束引用的现有表的名称。
column被外键约束引用的现有表中的列名。如果未指定,则假定使用现有表的主键。
action一个关键字,指明外键约束被违反时要采取的动作。
CREATE表创建成功时返回的消息。
ERROR表创建失败时返回的消息。通常还伴随一些描述性文字,例如: ERROR: Relation ' ,如果指定的表在数据库中已存在,就会在运行时出现该错误。table' already exists
CREATE TABLE 将向当前数据库中输入一个新的、初始为空的表。 该表将由发出命令的用户“拥有”。
每个 type 可以是简单类型、复杂类型(集合)或数组类型。每个属性都可以指定为非空, 并且都可以有默认值,默认值由 DEFAULT 子句 指定。
不强制同一属性内的数组维数一致。这一点在将来的版本中很可能会改变。
CREATE TABLE 还会自动创建一种数据类型,表示与该表一行 对应的元组类型(结构类型)。因此,表不能与任何已有的数据类型同名。
一个表最多可以有 1600 列(实践中,由于元组长度限制,有效上限通常更低)。 表不能与系统目录表同名。
INHERITS ( parent_table [, ... ] )
可选的 INHERITS 子句指定一组表名,新表自动从中继承所有字段。如果同一字段名出现在多个父表中, 除非这些父表中该字段的定义全部匹配,否则 Postgres 会报错。如果没有定义冲突,这些重复字段会合并为新表中的单个字段。 如果新表自己的字段列表中包含一个同时也是继承来的字段名,该声明也必须与 继承字段匹配,并且字段定义会合并为一个。
同名的继承字段声明和新字段声明必须指定完全相同的数据类型,否则会报错。 它们不必指定相同的约束——来自任何声明的所有约束都会合并在一起, 并全部应用于新表。如果新表为该字段显式指定了默认值,该默认值将覆盖 字段的继承声明中的任何默认值。否则,为该字段指定默认值的所有父表 必须指定相同的默认值,否则将报错。
Postgres 会自动让新表继承其在继承层次中上方表上的函数;也就是说, 如果创建继承自 bar 的表 foo, 那么接受元组类型 bar 的函数也可以应用于 foo 的实例。(目前,这只对第一个或唯一的父表上的函数 可靠地工作,对其他父表上的函数则不太可靠。)
DEFAULT value
DEFAULT 子句为其所在列定义的列指定默认数据值。该值可以是任何不含变量的 表达式(注意:不支持子选择,也不支持对当前表中其他列的交叉引用)。 默认值的数据类型必须与列定义的数据类型匹配。
DEFAULT 表达式会用于任何未为该列指定值的 INSERT 操作。如果没有 DEFAULT 子句,则默认值为 NULL。
CREATE TABLE distributors (
name VARCHAR(40) DEFAULT 'luso films',
did INTEGER DEFAULT NEXTVAL('distributors_serial'),
modtime TIMESTAMP DEFAULT now()
);
上例为列 name 指定了一个字面常量默认值,并为列 did 安排了通过选择序列对象的下一个值来生成的默认值。 modtime 的默认值将是该行插入时的时间。
值得注意的是
modtime TIMESTAMP DEFAULT 'now'
会产生一个很可能不是预期的结果:字符串 'now' 会被立即转换为一个时间戳值,因此 modtime 的默认值 将总是表创建时的时间。把默认值指定为函数调用可以避免这一困难。
[ CONSTRAINTconstraint_name] { NULL | NOT NULL | UNIQUE | PRIMARY KEY | CHECKcondition| REFERENCESreftable[ (refcolumn) ] [ MATCHmatchtype] [ ON DELETEaction] [ ON UPDATEaction] [ [ NOT ] DEFERRABLE ] [ INITIALLYchecktime] }
constraint_name赋予约束子句的一个任意名称。
该列允许包含 NULL 值。这是默认情况。
该列不允许包含 NULL 值。这等价于列约束 CHECK (column NOT NULL)。
该列必须具有唯一值。在 Postgres 中,这是通过在该列上自动创建一个唯一索引来强制实现的。
该列是一个主键,这蕴含着其他表可以把该列当作行的唯一标识符来依赖。 PRIMARY KEY 同时蕴含 UNIQUE 和 NOT NULL。详见 PRIMARY KEY。
condition任意的布尔值约束条件。
可选的约束子句指定约束(测试),要使插入或更新操作成功,新行或更新后的行 必须满足这些约束。
约束是一条命名的规则:一个通过对在表上执行的 INSERT、UPDATE 或 DELETE 操作的结果加以限制,来帮助定义有效值集合的 SQL 对象。
定义完整性约束有两种方式:稍后讲述的表约束,以及这里讲述的列约束。
列约束是作为列定义的一部分定义的完整性约束,一旦创建,在逻辑上就成为 表约束。可用的列约束有:
| PRIMARY KEY |
| REFERENCES |
| UNIQUE |
| CHECK |
| NOT NULL |
[ CONSTRAINT name ] NOT NULL
NOT NULL 约束指定一条规则:一列只能包含非空值。 这只是列约束,不允许作为表约束。
statusERROR: ExecAppend: Fail to add null value in not null attribute "column".如果试图向一个带 NOT NULL 约束的列插入空值,就会在运行时出现该错误。
在表 distributors 上定义两个 NOT NULL 列约束, 其中一个显式指定了名称:
CREATE TABLE distributors (
did DECIMAL(3) CONSTRAINT no_null NOT NULL,
name VARCHAR(40) NOT NULL
);
[ CONSTRAINT constraint_name ] UNIQUE
constraint_name赋予约束子句的一个任意名称。
statusERROR: Cannot insert a duplicate key into a unique index.如果试图向一个列插入重复值,就会在运行时出现该错误。
UNIQUE 约束指定一条规则:表中一个或多个不同列组成的一组只能包含唯一值。
被指定列的列定义不必包含 NOT NULL 约束就可以纳入 UNIQUE 约束。 一个不带 NOT NULL 约束的列中有多个空值并不违反 UNIQUE 约束。 (这偏离了 SQL92 的定义,但是一个更合乎常理的约定。 详见兼容性一节。)
每个 UNIQUE 列约束所命名的列,必须与为该表定义的任何其他 UNIQUE 或 PRIMARY KEY 约束所命名的列集合不同。
Postgres 会自动为每个 UNIQUE 约束创建一个 唯一索引,以确保数据完整性。详见 CREATE INDEX。
为 name 列定义一个 UNIQUE 约束:
CREATE TABLE distributors (
did DECIMAL(3),
name VARCHAR(40) UNIQUE
);
它等价于把以下内容指定为表约束:
CREATE TABLE distributors (
did DECIMAL(3),
name VARCHAR(40),
UNIQUE(name)
);
[ CONSTRAINTconstraint_name] CHECK (condition)
constraint_name赋予约束子句的一个任意名称。
condition任何产生布尔结果的合法条件表达式。
statusERROR: ExecAppend: rejected due to CHECK constraint "constraint_name".如果试图向一个受 CHECK 约束约束的列插入非法值,就会在运行时出现该错误。
CHECK 约束对列中允许的值指定一个通用限制。CHECK 约束也允许作为表约束。
CHECK 指定一个涉及一个表的某一列或多列的通用布尔表达式。当把该布尔表达式 应用于一个新行的值时求值为 FALSE,则该新行将被拒绝。
目前,CHECK 表达式不能包含子选择,也不能引用当前行字段之外的变量。
SQL92 标准规定 CHECK 列约束只能引用它所作用的列;只有 CHECK 表约束才能 引用多个列。Postgres 不强制这一限制。 它对列 CHECK 约束和表 CHECK 约束一视同仁。
[ CONSTRAINT constraint_name ] PRIMARY KEY
constraint_name赋予约束子句的一个任意名称。
ERROR: Cannot insert a duplicate key into a unique index.如果试图向一个受 PRIMARY KEY 约束约束的列插入重复值,就会在运行时 出现该错误。
PRIMARY KEY 列约束指定一个表的某一列只能包含唯一(非重复)的非 NULL 值。 被指定列的定义不必包含显式的 NOT NULL 约束就可以纳入 PRIMARY KEY 约束。
一个表只能指定一个 PRIMARY KEY,无论是作为列约束还是表约束。
Postgres 会自动创建一个唯一索引来确保 数据完整性(见 CREATE INDEX 语句)。
PRIMARY KEY 约束所命名的列集合应当与为同一表定义的任何 UNIQUE 约束 所命名的列集合不同,否则会导致等价索引的重复和不必要的额外运行时开销。 不过,Postgres 并不特别禁止这样做。
[ CONSTRAINTconstraint_name] REFERENCESreftable[ (refcolumn) ] [ MATCHmatchtype] [ ON DELETEaction] [ ON UPDATEaction] [ [ NOT ] DEFERRABLE ] [ INITIALLYchecktime]
REFERENCES 约束指定一条规则:一个列的值会对照另一个列的值进行检查。 REFERENCES 也可以作为 FOREIGN KEY 表约束的一部分来指定。
constraint_name赋予约束子句的一个任意名称。
reftable包含要对照检查的数据的表。
refcolumnreftable 中要对照检查数据的列。 如果未指定,则使用 reftable 的 PRIMARY KEY。
matchtype共有三种匹配类型:MATCH FULL、MATCH PARTIAL,以及未指定时的默认 匹配类型。MATCH FULL 不允许多列外键中的某一列为 NULL,除非所有外键列 都为 NULL。默认的 MATCH 类型允许某些外键列为 NULL 而外键的其他部分 不为 NULL。MATCH PARTIAL 目前不支持。
action被引用表中被引用的行被删除时要执行的动作。有下列动作。
如果违反外键则产生错误。这是默认值。
与 NO ACTION 相同。
删除任何引用被删除行的行。
将引用列的值设置为 NULL。
将引用列的值设置为它们的默认值。
action被引用表中被引用的列被更新为新值时要执行的动作。如果行被更新了, 但被引用的列没有变化,则不执行任何动作。有下列动作。
如果违反外键则产生错误。这是默认值。
与 NO ACTION 相同。
将引用列的值更新为被引用列的新值。
将引用列的值设置为 NULL。
将引用列的值设置为它们的默认值。
这控制约束是否可以推迟到事务结束检查。如果为 DEFERRABLE, SET CONSTRAINTS ALL DEFERRED 将使外键只在事务结束时才被检查。 NOT DEFERRABLE 是默认值。
checktimechecktime 有两个可能的值, 指定检查约束的默认时间。
只在事务结束时检查约束。
每条语句之后检查约束。这是默认值。
statusERROR: name referential integrity violation - key referenced from table not found in reftable如果试图向一个列插入的值在被引用表中没有匹配的列,就会在运行时 出现该错误。
REFERENCES 列约束指定一个表的某一列只能包含与被引用表的被引用列中的值 相匹配的值。
加入该列的值会按照给定的匹配类型,与被引用表和被引用列中的值进行匹配。 此外,当被引用列的数据变化时,会对该列的匹配数据执行相应动作。
目前 Postgres 只支持 MATCH FULL 和一个默认 匹配类型。此外,被引用列应当是被引用表中某个 UNIQUE 约束的列, 不过 Postgres 并不强制这一点。
[ CONSTRAINT name ] { PRIMARY KEY | UNIQUE } ( column [, ... ] )
[ CONSTRAINT name ] CHECK ( constraint )
[ CONSTRAINT name ] FOREIGN KEY ( column [, ... ] )
REFERENCES reftable [ ( refcolumn [, ... ] ) ]
[ MATCH matchtype ]
[ ON DELETE action ]
[ ON UPDATE action ]
[ [ NOT ] DEFERRABLE ]
[ INITIALLY checktime ]
constraint_name赋予约束子句的一个任意名称。
column [, ... ]要为其定义唯一索引的列名,对于 PRIMARY KEY 还要加 NOT NULL 约束。
constraint )一个将被作为约束求值的布尔表达式。
表约束子句可能的输出与列约束子句相应部分的输出相同。
表约束是定义在一个表的一列或多列上的完整性约束。“表约束” 的四种变体是:
| UNIQUE |
| CHECK |
| PRIMARY KEY |
| FOREIGN KEY |
[ CONSTRAINTconstraint_name] UNIQUE (column[, ... ] )
constraint_name赋予约束子句的一个任意名称。
column表中某一列的名称。
status如果试图向一个列插入重复值,就会在运行时出现该错误。
UNIQUE 约束指定一条规则:表中一个或多个不同列组成的一组只能包含唯一值。 UNIQUE 表约束的行为与列约束相同,只是它还能跨越多列。
更多细节见 UNIQUE 列约束一节。
防止表 distributors 中出现重复行:
CREATE TABLE distributors (
did DECIMAL(3),
name VARCHAR(40),
UNIQUE(did,name)
);
[ CONSTRAINTconstraint_name] PRIMARY KEY (column[, ... ] )
constraint_name赋予约束子句的一个任意名称。
column [, ... ]表中一列或多列的名称。
status如果试图向一个受 PRIMARY KEY 约束约束的列插入重复值,就会在 运行时出现该错误。
PRIMARY KEY 约束指定一条规则:表中一个或多个不同列组成的一组只能包含 唯一(非重复)的非空值。被指定列的列定义不必包含 NOT NULL 约束就可以纳入 PRIMARY KEY 约束。
PRIMARY KEY 表约束与相应的列约束类似,只是它还能涵盖多列。
更多信息见 PRIMARY KEY 列约束一节。
[ CONSTRAINTconstraint_name] FOREIGN KEY (column[, ... ] ) REFERENCESreftable[ (refcolumn[, ... ] ) ] [ MATCHmatchtype] [ ON DELETEaction] [ ON UPDATEaction] [ [ NOT ] DEFERRABLE ] [ INITIALLYchecktime]
REFERENCES 约束指定一条规则:一个列值或一组列值会对照另一个表中的值 进行检查。
constraint_name赋予约束子句的一个任意名称。
column [, ... ]表中一列或多列的名称。
reftable包含要对照检查的数据的表。
referenced column [, ... ]reftable 中要对照检查数据的 一列或多列。如果未指定,则使用 reftable 的 PRIMARY KEY。
matchtype共有三种匹配类型:MATCH FULL、MATCH PARTIAL,以及未指定时的默认 匹配类型。MATCH FULL 不允许多列外键中的某一列为 NULL,除非所有外键列 都为 NULL。默认的 MATCH 类型允许某些外键列为 NULL 而外键的其他部分 不为 NULL。MATCH PARTIAL 目前不支持。
action被引用表中被引用的行被删除时要执行的动作。有下列动作。
如果违反外键则产生错误。这是默认值。
与 NO ACTION 相同。
删除任何引用被删除行的行。
将引用列的值设置为 NULL。
将引用列的值设置为它们的默认值。
action被引用表中被引用的列被更新为新值时要执行的动作。如果行被更新了, 但被引用的列没有变化,则不执行任何动作。有下列动作。
如果违反外键则产生错误。这是默认值。
不允许更新被引用的行。
将引用列的值更新为被引用列的新值。
将引用列的值设置为 NULL。
将引用列的值设置为它们的默认值。
这控制约束是否可以推迟到事务结束检查。如果为 DEFERRABLE, SET CONSTRAINTS ALL DEFERRED 将使外键只在事务结束时才被检查。 NOT DEFERRABLE 是默认值。
checktimechecktime 有两个可能的值, 指定检查约束的默认时间。
每条语句之后检查约束。这是默认值。
只在事务结束时检查约束。
statusERROR: name referential integrity violation - key referenced from table not found in reftable如果试图向一个列插入的值在被引用表中没有匹配的列,就会在运行时 出现该错误。
FOREIGN KEY 约束指定一条规则:表中一个或多个不同列组成的一组与被引用表 中一组不同的列相关联。
FOREIGN KEY 表约束与相应的列约束类似,只是它还能涵盖多列。
更多信息见 FOREIGN KEY 列约束一节。
创建表 films 和表 distributors:
CREATE TABLE films (
code CHARACTER(5) CONSTRAINT firstkey PRIMARY KEY,
title CHARACTER VARYING(40) NOT NULL,
did DECIMAL(3) NOT NULL,
date_prod DATE,
kind CHAR(10),
len INTERVAL HOUR TO MINUTE
);
CREATE TABLE distributors (
did DECIMAL(3) PRIMARY KEY DEFAULT NEXTVAL('serial'),
name VARCHAR(40) NOT NULL CHECK (name <> '')
);
创建一个带二维数组的表:
CREATE TABLE array (
vector INT[][]
);
为表 films 定义一个 UNIQUE 表约束。UNIQUE 表约束可以定义在表的一列或 多列上:
CREATE TABLE films (
code CHAR(5),
title VARCHAR(40),
did DECIMAL(3),
date_prod DATE,
kind CHAR(10),
len INTERVAL HOUR TO MINUTE,
CONSTRAINT production UNIQUE(date_prod)
);
定义一个 CHECK 列约束:
CREATE TABLE distributors (
did DECIMAL(3) CHECK (did > 100),
name VARCHAR(40)
);
定义一个 CHECK 表约束:
CREATE TABLE distributors (
did DECIMAL(3),
name VARCHAR(40)
CONSTRAINT con1 CHECK (did > 100 AND name > '')
);
为表 films 定义一个 PRIMARY KEY 表约束。PRIMARY KEY 表约束可以定义在 表的一列或多列上:
CREATE TABLE films (
code CHAR(5),
title VARCHAR(40),
did DECIMAL(3),
date_prod DATE,
kind CHAR(10),
len INTERVAL HOUR TO MINUTE,
CONSTRAINT code_title PRIMARY KEY(code,title)
);
为表 distributors 定义一个 PRIMARY KEY 列约束。PRIMARY KEY 列约束只能 定义在表的一列上(下面两个示例是等价的):
CREATE TABLE distributors (
did DECIMAL(3),
name CHAR VARYING(40),
PRIMARY KEY(did)
);
CREATE TABLE distributors (
did DECIMAL(3) PRIMARY KEY,
name VARCHAR(40)
);
除本地可见的临时表外,SQL92 还定义了 CREATE GLOBAL TEMPORARY TABLE 语句, 以及一个可选的 ON COMMIT 子句:
CREATE GLOBAL TEMPORARY TABLEtable(columntype[ DEFAULTvalue] [ CONSTRAINTcolumn_constraint] [, ... ] ) [ CONSTRAINTtable_constraint] [ ON COMMIT { DELETE | PRESERVE } ROWS ]
对于临时表,CREATE GLOBAL TEMPORARY TABLE 语句命名一个对其他客户端可见 的新表,并定义该表的列和约束。
CREATE TEMPORARY TABLE 的可选 ON COMMIT 子句指定每当执行 COMMIT 时是否清空临时表中的行。如果省略 ON COMMIT 子句,SQL92 规定默认为 ON COMMIT DELETE ROWS。但 Postgres 的行为 总是类似于 ON COMMIT PRESERVE ROWS。
SQL92 为 UNIQUE 指定了一些额外的能力:
表约束定义:
[ CONSTRAINTconstraint_name] UNIQUE (column[, ... ] ) [ { INITIALLY DEFERRED | INITIALLY IMMEDIATE } ] [ [ NOT ] DEFERRABLE ]
列约束定义:
[ CONSTRAINT constraint_name ] UNIQUE
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
[ [ NOT ] DEFERRABLE ]
NULL“约束”(实际上是一个非约束)是 Postgres 对 SQL92 的扩展,加入它是为了与 NOT NULL 子句对称(并与某些其他 RDBMS 兼容)。由于它是任何列的默认 情况,它的出现只是噪音。
[ CONSTRAINT constraint_name ] NULL
SQL92 为 NOT NULL 指定了一些额外的能力:
[ CONSTRAINT constraint_name ] NOT NULL
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
[ [ NOT ] DEFERRABLE ]
SQL92 为约束指定了一些额外的能力,并且还定义了断言和域约束。
Postgres 尚不支持域和断言。
断言是一种特殊类型的完整性约束,与其他约束共享同一名字空间。不过, 断言不一定像约束那样依赖于某个特定的表,因此 SQL-92 提供了 CREATE ASSERTION 语句作为定义约束的另一种方法:
CREATE ASSERTIONnameCHECK (condition)
域约束由 CREATE DOMAIN 或 ALTER DOMAIN 语句定义:
域约束:
[ CONSTRAINTconstraint_name] CHECKconstraint[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ]
表约束定义:
[ CONSTRAINTconstraint_name] { PRIMARY KEY (column, ... ) | FOREIGN KEYconstraint| UNIQUEconstraint| CHECKconstraint} [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ]
列约束定义:
[ CONSTRAINTconstraint_name] { NOT NULL | PRIMARY KEY | FOREIGN KEYconstraint| UNIQUE | CHECKconstraint} [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ]
一个 CONSTRAINT 定义可以按任意顺序包含一个可推迟性属性子句和/或一个 初始约束模式子句。
该约束必须在每条语句结束时检查。SET CONSTRAINTS ALL DEFERRED 对这种类型的约束没有影响。
这控制约束是否可以推迟到事务结束检查。如果使用了 SET CONSTRAINTS ALL DEFERRED,或者约束被设置为 INITIALLY DEFERRED,这将使外键 只在事务结束时才被检查。
SET CONSTRAINTS 只改变当前事务的外键约束模式。
每条语句之后检查约束。这是默认值。
只在事务结束时检查约束。
SQL92 为表约束或列约束中的 CHECK 指定了一些额外的能力。
表约束定义:
[ CONSTRAINTconstraint_name] CHECK ( VALUEcondition) [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ]
列约束定义:
[ CONSTRAINTconstraint_name] CHECK ( VALUEcondition) [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ]
SQL92 为 PRIMARY KEY 指定了一些额外的能力:
表约束定义:
[ CONSTRAINTconstraint_name] PRIMARY KEY (column[, ... ] ) [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ]
列约束定义:
[ CONSTRAINT constraint_name ] PRIMARY KEY
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
[ [ NOT ] DEFERRABLE ]
通过 INHERITS 子句的多重继承是 Postgres 的语言扩展。 SQL99(但不是 SQL92)用不同的语法和语义定义了单一继承。 Postgres 尚不支持 SQL99 风格的继承。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。