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