Man page - alter_table(7)
Manual
ALTER TABLE
NAMESYNOPSIS
DESCRIPTION 描 述
PARAMETERS 引 數
NOTES 注 意
EXAMPLES 例 子
COMPATIBILITY 相 容 性
譯 者
跋
NAME
ALTER TABLE - 修 改 表 的 定 義
SYNOPSIS
ALTER TABLE [
ONLY ]
name
[ * ]
ADD [ COLUMN ]
column type
[
column_constraint
[ ... ] ]
ALTER TABLE [ ONLY ]
name
[ * ]
DROP [ COLUMN ]
column
[ RESTRICT | CASCADE ]
ALTER TABLE [ ONLY ]
name
[ * ]
ALTER [ COLUMN ]
column
{ SET DEFAULT
expression
| DROP DEFAULT }
ALTER TABLE [ ONLY ]
name
[ * ]
ALTER [ COLUMN ]
column
{ SET | DROP } NOT NULL
ALTER TABLE [ ONLY ]
name
[ * ]
ALTER [ COLUMN ]
column
SET STATISTICS
integer
ALTER TABLE [ ONLY ]
name
[ * ]
ALTER [ COLUMN ]
column
SET STORAGE { PLAIN |
EXTERNAL | EXTENDED | MAIN }
ALTER TABLE [ ONLY ]
name
[ * ]
SET WITHOUT OIDS
ALTER TABLE [ ONLY ]
name
[ * ]
RENAME [ COLUMN ]
column
TO
new_column
ALTER TABLE
name
RENAME TO
new_name
ALTER TABLE [ ONLY ]
name
[ * ]
ADD
table_constraint
ALTER TABLE [ ONLY ]
name
[ * ]
DROP CONSTRAINT
constraint_name
[ RESTRICT | CASCADE
]
ALTER TABLE
name
OWNER TO
new_owner
ALTER TABLE
name
CLUSTER ON
index_name
DESCRIPTION 描 述
ALTER
TABLE
變 更 一 個 現
存 表 的 定 義 。
它 有 好 幾 種 子
形 式 :
ADD COLUMN
這 種 形 式 用 和 CREATE TABLE [ create_table (7)] 裡 一 樣 的 語 法 向 表 中 增 加 一 個 新 的 欄 位 。
DROP COLUMN
這 種 形 式 從 表 中 刪 除 一 個 欄 位 。 請 注 意 , 和 這 個 欄 位 相 關 的 索 引 和 表 約 束 也 會 被 自 動 刪 除 。 如 果 任 何 表 之 外 的 物 件 依 賴 於 這 個 欄 位 , 你 必 須 說 CASCADE, 比 如 , 外 部 索 引 鍵 參 考 , 檢 視 等 等 。
SET/DROP DEFAULT
這 種 形 式 為 一 個 欄 位 設 定 或 者 刪 除 預 設 值 。 請 注 意 預 設 值 只 應 用 於 隨 後 的 INSERT 命 令 ; 它 們 不 會 導 致 已 經 在 表 中 的 行 的 數 值 的 修 改 。 我 們 也 可 以 為 檢 視 建 立 預 設 , 這 個 時 候 它 們 是 在 檢 視 的 ON INSERT 規 則 應 用 之 前 插 入 INSERT 語 句 中 去 的 。
SET/DROP NOT NULL
這 些 形 式 修 改 一 個 欄 位 是 否 標 記 為 允 許 NULL 值 或 者 是 拒 絕 NULL 值 。 如 果 表 在 欄 位 中 包 含 非 空 值 , 那 麼 你 只 可 以 SET NOT NULL。
SET STATISTICS
This form
這 個 形 式 為 隨
後 的 ANALYZE [
analyze
(7)] 操
作 設 定 每 欄 位
的 統 計 收 集 目
標 。 目 標 的 範
圍 可 以 在 0 到 1000 之
內 設 定 ; 另 外
, 把 他 設 定 為 -1
則 表 示 重 新 恢
復 到 使 用 系 統
預 設 的 統 計 目
標 。
SET STORAGE
這 種 形 式 為 一 個 欄 位 設 定 儲 存 模 式 。 這 個 設 定 控 制 這 個 欄 位 是 內 聯 儲 存 還 是 儲 存 在 一 個 附 屬 的 表 裡 , 以 及 資 料 是 否 要 壓 縮 。 PLAIN 必 需 用 於 定 長 的 數 值 , 比 如 integer, 並 且 是 內 聯 的 , 不 壓 縮 的 。 MAIN 用 於 內 聯 , 可 壓 縮 的 資 料 。 EXTERNAL 用 於 外 部 儲 存 , 不 壓 縮 的 資 料 , 而 EXTENDED 用 於 外 部 的 壓 縮 資 料 。 EXTENDED 是 所 有 支 援 它 的 資 料 的 預 設 。 使 用 EXTERNAL 將 令 在 text 欄 位 上 的 子 字 串 操 作 更 快 , 付 出 的 代 價 是 增 加 了 儲 存 空 間 。
SET WITHOUT OIDS
從 表 中 刪 除 oid 欄 位 。 從 表 中 刪 除 ( 設 定 為 沒 有 ) oid 同 樣 不 會 立 即 發 生 。 OID 使 用 的 空 間 將 在 元 組 被 更 新 的 時 候 回 收 。 不 更 新 元 組 的 時 候 , OID 的 空 間 和 數 值 的 維 護 都 是 不 確 定 的 。 這 個 過 程 語 義 上 類 似 DROP COLUMN 過 程 。
|
RENAME |
RENAME 形 式 改 變 一 個 表 的 名 字 ( 或 者 是 一 個 索 引 , 一 個 序 列 , 或 者 一 個 檢 視 ) 或 者 是 表 中 一 個 獨 立 欄 位 的 名 字 。 它 對 儲 存 的 資 料 沒 有 任 何 影 響 。 |
ADD table_constraint
這 個 形 式 給 表 增 加 一 個 新 的 約 束 , 用 的 語 法 和 CREATE TABLE [ create_table (7)] 一 樣 。
DROP CONSTRAINT
這 個 形 式 刪 除 一 個 表 上 的 約 束 。 目 前 , 在 表 上 的 約 束 不 要 求 有 唯 一 的 名 字 , 因 此 可 能 有 多 個 約 束 匹 配 宣 告 的 名 字 。 所 有 這 樣 的 約 束 都 將 被 刪 除 。
|
OWNER |
這 個 形 式 改 變 表 , 索 引 , 序 列 或 者 檢 視 的 所 有 者 為 指 定 所 有 者 。
CLUSTER
這 種 形 式 為 將 來 對 錶 進 行 的 CLUSTER [ cluster (7)] 操 作 做 標 記 。
要 使 用 ALTER TABLE, 你 必 需 擁 有 該 表 ; 除 了 ALTER TABLE OWNER 之 外 , 它 只 能 由 超 級 使 用 者 執 行 。
PARAMETERS 引 數
|
name |
試 圖 更 改 的 現 存 表 ( 可 能 有 模 式 修 飾 ) 的 名 稱 。 如 果 聲 明 瞭 ONLY, 則 只 更 改 該 表 。 如 果 沒 有 宣 告 ONLY, 則 該 表 及 其 所 有 後 代 表 ( 如 果 有 ) 都 被 更 新 。 我 們 可 以 在 表 名 字 後 面 附 加 一 個 * 表 示 後 代 表 都 被 掃 描 , 但 是 在 目 前 的 版 本 里 , 這 是 預 設 行 為 。 ( 在 7.1之 前 的 版 本 , ONLY 是 預 設 的 行 為 。 ) 預 設 可 以 透 過 改 變 配 置 選 項 SQL_INHERITANCE 來 改 變 。
|
column |
現 存 或 新 的 欄 位 名 稱 。
|
type |
新 欄 位 的 型 別 。
new_column
新 欄 位 的 型 別 。
new_name
表 的 新 名 稱 。
table_constraint
表 的 新 的 約 束 定 義 。
constraint_name
要 刪 除 的 現 有 約 束 的 名 字 。
new_owner
該 表 的 新 所 有 者 的 使 用 者 名 稱 。
index_name
要 標 記 為 建 簇 的 表 上 面 的 索 引 名 字 。
CASCADE
自 動 刪 除 依 賴 於 被 依 賴 欄 位 或 者 約 束 的 物 件 ( 比 如 , 引 用 該 欄 位 的 檢 視 ) 。
RESTRICT
如 果 欄 位 或 者 約 束 還 有 任 何 依 賴 的 物 件 , 則 拒 絕 刪 除 該 欄 位 。 這 是 預 設 行 為 。
NOTES 注 意
COLUMN 關 鍵 字 是 多 餘 的 , 可 以 省 略 。
在 目 前 的 ADD COLUMN實 現 裡 還 不 支 援 新 列 /欄 位 的 預 設 ( 值 ) 和 NOT NULL 子 句 。 新 欄 位 開 始 存 在 時 所 有 值 都 是 NULL。 不 過 你 可 以 隨 後 用 ALTER TABLE 的 SET DEFAULT 形 式 設 定 預 設 ( 值 ) 。 ( 你 可 能 還 想 用 UPDATE [ update (7)] 把 已 存 在 行 更 新 為 預 設 值 。 ) 如 果 你 想 標 記 該 欄 位 為 非 null, 在 你 為 該 欄 位 的 所 有 行 輸 入 非 null 值 之 後 用 SET NOT NULL。
DROP COLUMN 命 令 並 不 是 物 理 上 把 欄 位 刪 除 , 而 只 是 簡 單 地 把 它 標 記 為 SQL 操 作 中 不 可 見 的 。 隨 後 對 該 表 的 插 入 和 更 新 將 在 該 欄 位 儲 存 一 個 NULL。 因 此 , 刪 除 一 個 欄 位 是 很 快 的 , 但 是 它 不 會 立 即 縮 減 你 的 表 在 磁 碟 上 的 大 小 , 因 為 被 刪 除 了 的 欄 位 佔 據 的 空 間 還 沒 有 回 收 。 這 些 空 間 將 隨 著 現 有 的 行 的 更 新 而 得 到 回 收 。 要 立 即 回 收 空 間 , 我 們 可 以 做 一 個 UPDATE所 有 行 的 假 動 作 , 然 後 立 即 vacuum, 象 這 樣 :
UPDATE table SET
col = col;
VACUUM FULL table;
如 果 表 有 任 何 後 代 表 , 那 麼 如 果 不 在 後 代 表 上 做 同 樣 的 修 改 的 話 , 就 不 允 許 在 父 表 上 增 加 或 者 重 新 命 名 一 個 欄 位 , 也 就 是 說 , ALTER TABLE ONLY將 被 拒 絕 。 這 樣 就 保 證 了 後 代 表 總 是 有 和 父 表 匹 配 的 欄 位 。
一 個 遞 迴 DROP COLUMN 操 作 將 只 有 在 後 代 表 並 不 從 任 何 其 它 父 表 中 繼 承 該 欄 位 並 且 從 來 沒 有 獨 立 定 義 該 欄 位 的 時 候 才 能 刪 除 一 個 後 代 表 的 欄 位 。 一 個 非 遞 迴 的 DROP COLUMN( 也 就 是 , ALTER TABLE ONLY ... DROP COLUMN ) 從 來 不 會 刪 除 任 何 後 代 欄 位 , 而 是 把 他 們 標 記 為 獨 立 定 義 的 , 而 不 是 繼 承 的 。
不 允 許 更 改 系 統 表 結 構 的 任 何 部 分 。
請 參 考 CREATE TABLE 部 分 獲 取 更 多 有 效 引 數 的 描 述 。 Chapter 5 ‘‘Data Definition’’ 裡 有 更 多 有 關 繼 承 的 資 訊 。
EXAMPLES 例 子
向 表 中 增 加 一 個 varchar 列 :
ALTER TABLE distributors ADD COLUMN address varchar(30);
從 表 中 刪 除 一 個 欄 位 :
ALTER TABLE distributors DROP COLUMN address RESTRICT;
對 現 存 列 改 名 :
ALTER TABLE distributors RENAME COLUMN address TO city;
更 改 現 存 表 的 名 字 ∶
ALTER TABLE distributors RENAME TO suppliers;
給 一 個 欄 位 增 加 一 個 非 空 約 束 :
ALTER TABLE distributors ALTER COLUMN street SET NOT NULL;
從 一 個 欄 位 裡 刪 除 一 個 非 空 約 束 :
ALTER TABLE distributors ALTER COLUMN street DROP NOT NULL;
給 一 個 表 增 加 一 個 檢 查 約 束 :
ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5);
刪 除 一 個 表 和 它 的 所 有 子 表 的 監 查 約 束 :
ALTER TABLE distributors DROP CONSTRAINT zipchk;
向 表 中 增 加 一 個 外 部 索 引 鍵 約 束 :
ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses (address) MATCH FULL;
給 表 增 加 一 個 ( 多 欄 位 ) 唯 一 約 束 :
ALTER TABLE distributors ADD CONSTRAINT dist_id_zipcode_key UNIQUE (dist_id, zipcode);
給 一 個 表 增 加 一 個 自 動 命 名 的 主 鍵 約 束 , 要 注 意 的 是 一 個 表 只 能 有 一 個 主 鍵 :
ALTER TABLE distributors ADD PRIMARY KEY (dist_id);
COMPATIBILITY 相 容 性
ADD COLUMN 形 式 是 相 容 SQL 標 準 的 , 除 了 上 面 說 的 預 設 ( 值 ) 和 NOT NULL 約 束 外 。 ALTER COLUMN 形 式 是 完 全 相 容 的 。
重 命 名 錶 , 列 /欄 位 , 索 引 , 和 序 列 的 名 字 是 PostgreSQL 對 SQL 的 擴 充 套 件 。
ALTER TABLE DROP COLUMN 可 以 用 於 刪 除 表 中 的 唯 一 的 一 個 欄 位 , 留 下 一 個 零 欄 位 的 表 。 這 是 對 SQL 的 擴 充 套 件 , 它 不 允 許 零 欄 位 表 。
譯 者
Postgresql 中 文 網 站 何 偉 平 <laser@pgsqldb.org>
跋
本
頁 面 中 文 版 由
中 文 man 手 冊 頁 計
劃 提 供 。
中 文 man 手 冊 頁 計
劃 :
https://github.com/man-pages-zh/manpages-zh