Man page - create_table(7)
Manual
CREATE TABLE
NAMESYNOPSIS
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