Man page - create_table(7)

Manual

CREATE TABLE

NAME
SYNOPSIS
DESCRIPTION 描 述
PARAMETERS 参 数
NOTES 注 意
EXAMPLES 例 子
COMPATIBILITY 兼 容 性
TEMPORARY TABLES 临 时 表
COLUMN CHECK CONSTRAINTS 字 段 检 查 约 束
NULL ‘‘CONSTRAINT’’ NULL约 束
INHERITANCE 继 承
OBJECT IDS 对 象 ID
ZERO-COLUMN TABLES 零 行 表
SEE ALSO 参 见
译 者


NAME

CREATE TABLE - 定 义 一 个 新 表

SYNOPSIS

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name (
{ column_name data_type [ DEFAULT default_expr ] [ column_constraint [, ... ] ]
| table_constraint
| LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] } [, ... ]
)
[ INHERITS ( parent_table [, ... ] ) ]
[ WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]

where column_constraint is:

[ CONSTRAINT constraint_name ]
{ NOT NULL | NULL | UNIQUE | PRIMARY KEY |
CHECK ( expression ) |
REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ ON DELETE action ] [ ON UPDATE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

and table_constraint is:

[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ... ] ) |
PRIMARY KEY ( column_name [, ... ] ) |
CHECK ( expression ) |
FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ]
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

DESCRIPTION 描 述

CREATE TABLE 将 在 当 前 数 据 库 创 建 一 个 新 的 , 初 始 为 空 的 表 。 该 表 将 由 发 出 此 命 令 的 用 户 所 有 。

如 果 给 出 了 模 式 名 ( 比 如 , CREATE TABLE myschema.mytable ...) , 那 么 表 是 在 指 定 模 式 中 创 建 的 。 否 则 它 在 当 前 模 式 中 创 建 。 临 时 表 存 在 于 一 个 特 殊 的 模 式 里 , 因 此 创 建 临 时 表 的 时 候 不 能 给 出 模 式 名 。 表 名 字 必 需 和 同 一 模 式 中 其 他 表 , 序 列 , 索 引 或 者 视 图 相 区 别 。

CREATE TABLE 还 自 动 创 建 一 个 数 据 类 型 , 该 数 据 类 型 代 表 对 应 该 表 一 行 的 复 合 类 型 。 因 此 , 表 不 能 和 同 模 式 中 的 现 有 数 据 类 型 同 名 。

一 个 表 的 字 段 数 不 能 超 过 1600。 ( 实 际 上 , 真 正 的 限 制 比 这 低 , 因 为 还 有 元 组 长 度 的 约 束 ) 。

可 选 的 约 束 子 句 声 明 约 束 ( 或 者 测 试 ) , 新 行 或 者 更 新 的 行 必 须 满 足 这 些 约 束 才 能 成 功 插 入 或 更 新 。 约 束 是 一 个 它 是 一 个 SQL 对 象 , 它 以 多 种 方 式 协 助 我 们 协 助 我 们 在 表 上 定 义 有 效 的 数 值 集 合 。

定 义 约 束 又 两 种 方 法 : 表 约 束 和 列 约 束 。 一 个 列 约 束 是 作 为 一 个 列 定 义 的 一 部 分 定 义 的 。 而 表 约 束 并 不 和 某 个 列 绑 在 一 起 , 它 可 以 作 用 于 多 于 一 个 列 上 。 每 个 列 约 束 也 可 以 写 成 表 约 束 ; 如 果 某 个 约 束 只 影 响 一 个 列 , 那 么 列 约 束 只 是 符 号 上 的 简 洁 方 式 而 已 。

PARAMETERS 参 数

TEMPORARY 或 TEMP

如 果 声 明 了 此 参 数 , 则 该 表 创 建 为 临 时 表 。 临 时 表 在 会 话 结 束 时 自 动 删 除 , 或 者 是 ( 可 选 ) 在 当 前 事 务 的 结 尾 ( 参 阅 下 面 的 ON COMMIT) 。 现 有 同 名 永 久 表 在 临 时 表 存 在 期 间 在 本 会 话 过 程 中 是 不 可 见 的 , 除 非 它 们 是 用 模 式 修 饰 的 名 字 引 用 的 。 任 何 在 临 时 表 上 创 建 的 索 引 也 都 会 自 动 删 除 。

我 们 可 以 选 择 在 TEMPORARY 或 TEMP 前 面 放 上 GLOBAL 或 者 LOCAL。 这 样 对 PostgreSQL 没 有 任 何 区 别 , 可 以 参 阅 Compatibility [ create_table (7)]。

table_name

要 创 建 的 表 的 名 字 ( 可 以 用 模 式 修 饰 ) 。

column_name

在 新 表 中 要 创 建 的 字 段 名 字 。

data_type

该 字 段 的 数 据 类 型 。 它 可 以 包 括 数 组 说 明 符 。

DEFAULT

DEFAULT 子 句 给 它 所 出 现 的 字 段 一 个 缺 省 数 值 。 该 数 值 可 以 是 任 何 不 含 变 量 的 表 达 式 ( 不 允 许 使 用 子 查 询 和 对 本 表 中 的 其 它 字 段 的 交 叉 引 用 ) 。 缺 省 表 达 式 的 数 据 类 型 必 须 和 字 段 类 型 匹 配 。

缺 省 表 达 式 将 被 用 于 任 何 未 声 明 该 字 段 数 值 的 插 入 操 作 。 如 果 字 段 上 没 有 缺 省 值 , 那 么 缺 省 是 NULL。

LIKE 子 句 声 明 一 个 表 , 新 表 自 动 从 这 个 表 里 面 继 承 所 有 字 段 名 ,
他 们 的 数 据 类 型 , 以 及 非 空 约 束 。

和 INHERITS 不 同 , 新 表 与 继 承 过 来 的 表 之 间 在 创 建 动 作 完 毕 之 后 是 完 全 无 关 的 。 插 入 新 表 的 数 据 不 会 在 父 表 中 表 现 出 来 。

字 段 缺 省 表 达 式 只 有 在 声 明 了 INCLUDING DEFAULTS 之 后 才 会 继 承 过 来 。 缺 省 是 排 除 缺 省 表 达 式 。

INHERITS ( parent_table [, ... ] )

可 选 的 INHERITS 子 句 声 明 一 列 表 , 这 个 新 表 自 动 从 这 列 表 中 继 承 所 有 字 段 。 如 果 在 多 于 一 个 父 表 中 存 在 同 名 的 字 段 , 那 么 就 会 报 告 一 个 错 误 , 除 非 这 些 字 段 的 数 据 类 型 在 每 个 父 表 里 都 是 匹 配 的 。 如 果 没 有 冲 突 , 那 么 重 复 的 字 段 在 新 表 中 融 合 成 一 个 字 段 。 如 果 新 表 的 字 段 名 列 表 中 包 括 和 继 承 的 字 段 同 名 的 , 那 么 它 的 数 据 类 型 也 必 须 和 上 面 一 样 与 继 承 字 段 匹 配 , 并 且 这 些 字 段 定 义 会 融 合 成 一 个 。 不 过 , 同 名 的 继 承 和 新 字 段 声 明 可 以 声 明 不 同 的 约 束 : 所 有 的 继 承 过 来 的 约 束 以 及 声 明 的 约 束 都 融 合 到 一 起 , 并 且 全 部 应 用 于 新 表 。 如 果 新 表 为 该 字 段 明 确 的 声 明 了 一 个 缺 省 数 值 , 那 么 此 缺 省 数 值 覆 盖 任 何 来 自 继 承 字 段 声 明 的 缺 省 值 。 否 则 , 任 何 为 该 字 段 声 明 了 缺 省 数 值 的 父 表 都 必 须 声 明 相 同 的 缺 省 , 否 则 就 会 报 告 一 个 错 误 。

WITH OIDS
WITHOUT OIDS

这 个 可 选 的 子 句 声 明 新 表 中 的 行 是 否 应 该 拥 有 赋 予 它 们 的 OID ( 对 象 标 识 ) 。 缺 省 是 有 OID。 ( 如 果 新 表 从 任 何 有 OID 的 表 继 承 而 来 , 那 么 就 算 这 条 命 令 说 了 WITHOUT OIDS, 也 会 强 制 WITH OIDS。 )

声 明 WITHOUT OIDS 允 许 用 户 禁 止 为 行 或 者 表 生 成 OID。 这 么 做 对 大 表 是 值 得 的 , 因 为 这 样 可 以 减 少 OID 消 耗 并 且 推 迟 32 位 OID 计 数 器 的 消 耗 。 一 旦 该 计 数 器 重 叠 , 那 么 就 不 能 再 假 设 OID 的 唯 一 , 这 样 它 的 实 用 性 就 大 打 折 扣 。 声 明 WITHOUT OIDS 还 会 减 少 在 磁 盘 上 存 储 每 行 的 空 间 , 每 行 减 少 4 字 节 , 因 此 也 可 以 改 进 性 能 。

CONSTRAINT constraint_name

列 或 表 约 束 的 可 选 名 字 。 如 果 没 有 声 明 , 则 由 系 统 生 成 一 个 名 字 。

NOT NULL

字 段 不 允 许 包 含 NULL 数 值 。

NULL

该 字 段 允 许 包 含 NULL 数 值 。 这 是 缺 省 。

这 个 子 句 的 存 在 只 是 为 和 那 些 非 标 准 SQL 数 据 库 兼 容 。 我 们 不 建 议 在 新 应 用 中 使 用 它 。

UNIQUE (column constraint)
UNIQUE (
column_name [, ... ] ) (table constraint)

UNIQUE 声 明 一 个 规 则 , 表 示 一 个 表 里 的 一 个 或 者 多 个 独 立 的 字 段 组 合 的 分 组 只 能 包 含 唯 一 的 数 值 。 表 的 唯 一 约 束 的 行 为 和 列 约 束 的 一 样 , 只 不 过 多 了 跨 多 行 的 能 力 。

对 于 唯 一 约 束 的 用 途 而 言 , 系 统 认 为 NULL 数 值 是 不 相 等 的 。

每 个 唯 一 表 约 束 都 必 须 命 名 一 个 字 段 的 集 合 , 该 集 合 必 须 和 其 它 唯 一 约 束 命 名 字 段 集 合 或 者 该 表 定 义 的 主 键 约 束 不 同 。 ( 否 则 就 只 是 同 样 的 约 束 写 了 两 次 。 )

PRIMARY KEY (column constraint)
PRIMARY KEY (
column_name [, ... ] ) (table constraint)

主 键 约 束 表 明 表 中 的 一 个 或 者 一 些 字 段 只 能 包 含 唯 一 ( 不 重 复 ) 非 NULL 的 数 值 。 从 技 术 上 讲 , PRIMARY KEY 只 是 UNIQUE 和 NOT NULL 的 组 合 , 不 过 把 一 套 字 段 标 识 为 主 键 同 时 也 体 现 了 模 式 设 计 的 元 数 据 , 因 为 主 键 意 味 着 其 它 表 可 以 拿 这 套 字 段 用 做 行 的 唯 一 标 识 。

一 个 表 只 能 声 明 一 个 主 键 , 不 管 是 作 为 字 段 约 束 还 是 表 约 束 。

主 键 约 束 应 该 定 义 在 同 个 表 上 的 一 个 与 其 它 唯 一 约 束 所 定 义 的 不 同 的 字 段 集 合 上 。

CHECK ( expression )

CHECK 约 束 声 明 一 个 生 成 布 尔 结 果 的 子 句 , 一 次 插 入 或 者 更 新 操 作 若 想 成 功 则 里 面 的 新 行 或 者 被 更 新 的 行 必 须 满 足 这 个 条 件 。 声 明 为 字 段 约 束 的 检 查 约 束 应 该 只 引 用 该 字 段 的 数 值 , 而 在 表 约 束 里 出 现 的 表 达 式 可 以 引 用 多 个 字 段 。

目 前 , CHECK 表 达 式 不 能 包 含 子 查 询 也 不 能 引 用 除 当 前 行 字 段 之 外 的 变 量 。

REFERENCES reftable [ ( refcolumn ) ] [ MATCH matchtype ] [ ON DELETE
action
] [ ON UPDATE action ] (column constraint)
FOREIGN KEY (
column [, ... ] )

这 些 子 句 声 明 一 个 外 键 约 束 , 外 键 约 束 声 明 一 个 由 新 表 中 一 列 或 者 多 列 组 成 的 组 应 该 只 包 含 匹 配 引 用 的 表 reftable 中 对 应 引 用 的 字 段 refcolumn 中 的 数 值 。 如 果 省 略 refcolumn, 则 使 用 reftable 的 主 键 。 被 引 用 字 段 必 须 是 被 引 用 表 中 的 唯 一 字 段 或 者 主 键 。

向 这 些 字 段 插 入 的 数 值 将 使 用 给 出 的 匹 配 类 型 与 参 考 表 中 的 参 考 列 中 的 数 值 进 行 匹 配 。 有 三 种 匹 配 类 型 : MATCH FULL, MATCH PARTIAL, 和 MATCH SIMPLE, 它 也 是 缺 省 匹 配 类 型 。 MATCH FULL 将 不 允 许 一 个 多 字 段 外 键 的 字 段 为 NULL, 除 非 所 有 外 键 字 段 都 为 NULL。 MATCH SIMPLE 允 许 某 些 外 键 字 段 为 NULL 而 外 键 的 其 它 部 分 不 是 NULL。 MATCH PARTIAL 还 没 实 现 。

另 外 , 当 被 参 考 字 段 中 的 数 据 改 变 的 时 候 , 那 么 将 对 本 表 的 字 段 中 的 数 据 执 行 某 种 操 作 。 ON DELETE 子 句 声 明 当 被 参 考 表 中 的 被 参 考 行 将 被 删 除 的 时 候 要 执 行 的 操 作 。 类 似 , ON UPDATE 子 句 声 明 被 参 考 表 中 被 参 考 字 段 更 新 为 新 值 的 时 候 要 执 行 的 动 作 。 如 果 该 行 被 更 新 , 但 被 参 考 的 字 段 实 际 上 没 有 变 化 , 那 么 就 不 会 有 任 何 动 作 。 下 面 是 每 个 子 句 的 可 能 的 动 作 :
NO ACTION

生 成 一 个 错 误 , 表 明 删 除 或 者 更 新 将 产 生 一 个 违 反 外 键 约 束 的 动 作 。 它 是 缺 省 动 作 。

RESTRICT

和 NO ACTION 一 样 , 只 是 动 作 不 可 推 迟 , 即 使 约 束 剩 下 的 部 分 是 可 以 推 迟 的 也 马 上 发 生 。

CASCADE

删 除 任 何 引 用 了 被 删 除 行 的 行 , 或 者 分 别 把 引 用 行 的 字 段 值 更 新 为 被 参 考 字 段 的 新 数 值 。

SET NULL

把 引 用 行 数 值 设 置 为 NULL。

SET DEFAULT

把 引 用 列 的 数 值 设 置 为 它 们 的 缺 省 值 。

如 果 主 键 字 段 经 常 更 新 , 那 么 我 们 给 REFERENCES 字 段 增 加 一 个 索 引 可 能 是 合 适 的 , 这 样 与 REFERENCES 字 段 相 关 联 的 NO ACTION 和 CASCADE 动 作 可 以 更 有 效 地 执 行 。
DEFERRABLE
NOT DEFERRABLE

这 两 个 关 键 字 设 置 该 约 束 是 否 可 推 迟 。 一 个 不 可 推 迟 的 约 束 将 在 每 条 命 令 之 后 马 上 检 查 。 可 以 推 迟 的 约 束 检 查 可 以 推 迟 到 事 务 结 尾 ( 使 用 SET CONSTRAINTS [ set_constraints (7)] 命 令 ) 。 缺 省 是 NOT DEFERRABLE。 目 前 只 有 外 键 约 束 接 受 这 个 子 句 。 所 有 其 它 约 束 类 型 都 是 不 可 推 迟 的 。

INITIALLY IMMEDIATE
INITIALLY DEFERRED

如 果 约 束 是 可 推 迟 的 , 那 么 这 个 子 句 声 明 检 查 约 束 的 缺 省 时 间 。 如 果 约 束 是 INITIALLY IMMEDIATE, 那 么 每 条 语 句 之 后 就 检 查 它 。 这 个 是 缺 省 。 如 果 约 束 是 INITIALLY DEFERRED, 那 么 只 有 在 事 务 结 尾 才 检 查 它 。 约 束 检 查 的 时 间 可 以 用 SET CONSTRAINTS [ set_constraints (7)] 命 令 修 改 。

ON COMMIT

我 们 可 以 用 ON COMMIT 控 制 临 时 表 在 事 务 块 结 尾 的 行 为 。 这 三 个 选 项 是 :
PRESERVE ROWS

在 事 务 结 尾 不 发 生 任 何 特 定 的 动 作 。 这 是 缺 省 行 为 。

DELETE ROWS

临 时 表 的 所 有 行 在 每 次 事 务 结 尾 都 被 删 除 。 实 际 上 , 在 每 次 提 交 的 时 候 都 自 动 truncate (7) 。

DROP

在 当 前 事 务 块 的 结 尾 , 临 时 表 将 被 删 除 。

NOTES 注 意

如 果 一 个 应 用 使 用 了 OID 标 识 表 中 的 特 定 行 , 那 么 我 们 建 议 在 该 表 的 oid 字 段 上 创 建 一 个 唯 一 约 束 , 以 确 保 该 表 的 OID 即 使 在 计 数 器 重 叠 之 后 也 是 唯 一 的 。 如 果 你 需 要 一 个 整 个 数 据 库 范 围 的 唯 一 标 识 , 那 么 就 要 避 免 假 设 OID 是 跨 表 唯 一 的 , 你 可 以 用 tableoid 和 行 OID 的 组 合 来 实 现 这 个 目 的 。 ( 将 来 的 PostgreSQL 很 可 能 为 每 个 表 使 用 独 立 的 OID 计 数 器 , 因 此 包 括 tableoid 组 成 数 据 库 范 围 内 的 唯 一 标 识 将 是 必 须 的 , 而 不 是 可 选 的 。 )

提 示 : 对 那 些 没 有 主 键 的 表 , 我 们 不 建 议 使 用 WITHOUT OIDS, 因 为 如 果 既 没 有 OID 又 没 有 唯 一 数 据 键 字 , 那 么 就 很 难 标 识 特 定 的 行 。

PostgreSQL 自 动 为 每 个 唯 一 约 束 和 主 键 约 束 创 建 一 个 索 引 以 确 保 唯 一 性 。 因 此 , 我 们 不 必 为 主 键 字 段 创 建 明 确 的 索 引 。 ( 参 阅 CREATE INDEX [ create_index (7)]获 取 更 多 信 息 。 )

唯 一 约 束 和 主 键 在 目 前 的 实 现 里 是 不 能 继 承 的 。 这 样 , 如 果 把 继 承 和 唯 一 约 束 组 合 在 一 起 会 导 致 无 法 运 转 。

EXAMPLES 例 子

创 建 表 films 和 distributors:

CREATE TABLE films (
code char(5) CONSTRAINT firstkey PRIMARY KEY,
title varchar(40) NOT NULL,
did integer NOT NULL,
date_prod date,
kind varchar(10),
len interval hour to minute
);

CREATE TABLE distributors (
did integer PRIMARY KEY DEFAULT nextval(’serial’),
name varchar(40) NOT NULL CHECK (name <> ’’)
);

创 建 一 个 带 有 2 维 数 组 的 表 :

CREATE TABLE array (
vector int[][]
);

为 表 films 定 义 一 个 唯 一 表 约 束 。 唯 一 表 约 束 可 以 在 表 的 一 个 或 多 个 字 段 上 定 义 :

CREATE TABLE films (
code char(5),
title varchar(40),
did integer,
date_prod date,
kind varchar(10),
len interval hour to minute,
CONSTRAINT production UNIQUE(date_prod)
);

定 义 一 个 检 查 列 约 束 :

CREATE TABLE distributors (
did integer CHECK (did > 100),
name varchar(40)
);

定 义 一 个 检 查 表 约 束 :

CREATE TABLE distributors (
did integer,
name varchar(40)
CONSTRAINT con1 CHECK (did > 100 AND name <> ’’)
);

为 表 films 定 义 一 个 主 键 表 约 束 。 主 键 表 约 束 可 以 定 义 在 表 上 的 一 个 或 多 个 字 段 。

CREATE TABLE films (
code char(5),
title varchar(40),
did integer,
date_prod date,
kind varchar(10),
len interval hour to minute,
CONSTRAINT code_title PRIMARY KEY(code,title)
);

为 表 distributors 定 义 一 个 主 键 约 束 。 下 面 两 个 例 子 是 等 效 的 , 第 一 个 例 子 使 用 了 表 约 束 语 法 , 第 二 个 使 用 了 列 约 束 表 示 法 。

CREATE TABLE distributors (
did integer,
name varchar(40),
PRIMARY KEY(did)
);

CREATE TABLE distributors (
did integer PRIMARY KEY,
name varchar(40)
);

下 面 这 个 例 子 给 字 段 name 赋 予 了 一 个 文 本 常 量 缺 省 值 , 并 且 将 字 段 did 的 缺 省 值 安 排 为 通 过 选 择 序 列 对 象 的 下 一 个 值 生 成 。 modtime 的 缺 省 值 将 是 该 行 插 入 的 时 候 的 时 间 。

CREATE TABLE distributors (
name varchar(40) DEFAULT ’Luso Films’,
did integer DEFAULT nextval(’distributors_serial’),
modtime timestamp DEFAULT current_timestamp
);

在 表 distributors 上 定 义 两 个 NOT NULL 列 约 束 , 其 中 之 一 明 确 给 出 了 名 字 :

CREATE TABLE distributors (
did integer CONSTRAINT no_null NOT NULL,
name varchar(40) NOT NULL
);

为 name 字 段 定 义 一 个 唯 一 约 束 :

CREATE TABLE distributors (
did integer,
name varchar(40) UNIQUE
);

上 面 的 和 下 面 这 样 作 为 一 个 表 约 束 声 明 是 一 样 的 :

CREATE TABLE distributors (
did integer,
name varchar(40),
UNIQUE(name)
);

COMPATIBILITY 兼 容 性

CREATE TABLE 遵 循 SQL92 和 SQL99 的 一 个 子 集 , 一 些 例 外 情 况 在 下 面 列 出 。

TEMPORARY TABLES 临 时 表

尽 管 CREATE TEMPORARY TABLE 的 语 法 和 SQL 标 准 的 类 似 , 但 是 效 果 是 不 同 的 。 在 标 准 里 , 临 时 表 只 是 定 义 一 次 并 且 自 动 存 在 ( 从 空 内 容 开 始 ) 于 任 何 需 要 它 们 的 会 话 中 。 PostgreSQL 要 求 每 个 会 话 为 它 们 使 用 的 每 个 临 时 表 发 出 它 们 自 己 的 CREATE TEMPORARY TABLE 命 令 。 这 样 就 允 许 不 同 的 会 话 将 相 同 的 临 时 表 名 字 用 于 不 同 的 目 的 , 而 标 准 的 实 现 方 法 则 把 一 个 临 时 表 名 字 约 束 为 具 有 相 同 的 表 结 构 。

标 准 定 义 的 临 时 表 的 行 为 被 广 泛 地 忽 略 了 。 PostgreSQL 在 这 方 面 上 地 行 为 类 似 于 许 多 其 它 SQL 数 据 库

标 准 中 在 全 局 和 局 部 地 临 时 表 之 间 的 区 别 在 PostgreSQL 里 不 存 在 , 因 为 这 种 区 别 取 决 于 模 块 的 概 念 , 而 PostgreSQL 没 有 这 个 概 念 。 出 于 兼 容 考 虑 , PostgreSQL 将 接 受 临 时 表 声 明 中 的 GLOBAL 和 LOCAL 关 键 字 , 但 是 他 们 没 有 作 用 。

临 时 表 的 ON COMMIT 子 句 也 类 似 于 SQL 标 准 , 但 是 有 些 区 别 。 如 果 忽 略 了 ON COMMIT 子 句 , SQL 声 明 缺 省 的 行 为 是 ON COMMIT DELETE ROWS。 但 是 PostgreSQL 里 的 缺 省 行 为 是 ON COMMIT PRESERVE ROWS。 在 SQL 里 不 存 在 ON COMMIT DROP。

COLUMN CHECK CONSTRAINTS 字 段 检 查 约 束

SQL 标 准 说 CHECK 字 段 约 束 只 能 引 用 他 们 施 用 的 字 段 ; 只 有 CHECK 表 约 束 才 能 引 用 多 个 字 段 。 PostgreSQL 并 不 强 制 这 个 限 制 ; 它 把 字 段 和 表 约 束 看 作 相 同 的 东 西 。

NULL ‘‘CONSTRAINT’’ NULL约 束

NULL "约 束 "( 实 际 上 不 是 约 束 ) 是 PostgreSQL 对 SQL 标 准 的 扩 展 , 包 括 它 是 为 了 和 其 它 一 些 数 据 库 系 统 兼 容 ( 以 及 为 了 和 NOT NULL 约 束 对 称 ) 。 因 为 它 是 任 何 字 段 的 缺 省 , 所 以 它 的 出 现 只 是 噪 音 而 已 。

INHERITANCE 继 承

通 过 INHERITS 子 句 的 多 重 继 承 是 PostgreSQL 语 言 的 扩 展 。 SQL99( 但 不 包 括 SQL92) 使 用 不 同 的 语 法 和 语 义 定 义 了 单 继 承 。 SQL99 风 格 的 继 承 还 没 有 在 PostgreSQL 中 实 现 。

OBJECT IDS 对 象 ID

PostgreSQL 的 OID 的 概 念 不 标 准 。

ZERO-COLUMN TABLES 零 行 表

PostgreSQL 允 许 创 建 没 有 字 段 的 表 ( 比 如 , CREATE TABLE foo();) 。 这 是 对 SQL 标 准 的 扩 展 , 标 准 不 允 许 存 在 零 字 段 表 。 零 字 段 表 本 身 没 什 么 用 , 但 是 禁 止 他 们 会 给 ALTER TABLE DROP COLUMN带 来 很 奇 怪 的 情 况 , 所 以 , 这 个 时 候 忽 视 标 准 的 限 制 好 想 很 清 楚 。

SEE ALSO 参 见

ALTER TABLE [ alter_table (7)], DROP TABLE [ drop_table (l)]

译 者

Postgresql 中 文 网 站 何 伟 平 <laser@pgsqldb.org>

本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。
中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh