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