Man page - create_sequence(7)

Manual

CREATE SEQUENCE

NAME
SYNOPSIS
DESCRIPTION 描 述
PARAMETERS 参 数
NOTES 注 意
EXAMPLES 例 子
COMPATIBILITY 兼 容 性
译 者


NAME

CREATE SEQUENCE - 创 建 一 个 新 的 序 列 发 生 器

SYNOPSIS

CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ]
[ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
[ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]

DESCRIPTION 描 述

CREATE SEQUENCE 将 向 当 前 数 据 库 里 增 加 一 个 新 的 序 列 号 生 成 器 。 包 括 创 建 和 初 始 化 一 个 新 的 名 为 name的 单 行 表 。 生 成 器 将 为 使 用 此 命 令 的 用 户 所 有 。

如 果 给 出 了 一 个 模 式 名 , 那 么 该 序 列 是 在 指 定 模 式 中 创 建 的 。 否 则 它 会 在 当 前 模 式 中 创 建 临 时 序 列 存 在 于 一 个 特 殊 的 模 式 中 , 因 此 如 果 创 建 一 个 临 时 序 列 的 时 候 , 不 能 给 出 模 式 名 。 序 列 名 必 需 和 同 一 模 式 中 的 其 他 序 列 , 表 , 索 引 , 或 者 视 图 不 同 。

在 序 列 创 建 后 , 你 可 以 使 用 函 数 nextval , currval , 和 setval 操 作 序 列 。 这 些 函 数 在 ‘‘Sequence-Manipulation Functions’’ 中 有 详 细 文 档 。

尽 管 你 不 能 直 接 更 新 一 个 序 列 , 但 你 可 以 使 用 象

SELECT * FROM name ;

检 查 一 个 序 列 的 参 数 和 当 前 状 态 。 特 别 是 序 列 的 last_value 字 段 显 示 了 任 意 后 端 进 程 分 配 的 最 后 的 数 值 。 ( 当 然 , 这 些 值 在 被 打 印 出 来 的 时 候 可 能 已 经 过 时 了 --- 如 果 其 它 进 程 正 积 极 地 使 用 nextval。 )

PARAMETERS 参 数

TEMPORARY or TEMP

如 果 声 明 了 这 个 修 饰 词 , 那 么 该 序 列 对 象 只 为 这 个 会 话 创 建 , 并 且 在 会 话 结 束 的 时 候 自 动 删 除 。 在 临 时 序 列 存 在 的 时 候 , 同 名 永 久 序 列 是 不 可 见 的 ( 在 同 一 会 话 里 ) , 除 非 它 们 是 用 模 式 修 饰 的 名 字 引 用 的 。

name

将 要 创 建 的 序 列 号 名 ( 可 以 用 模 式 修 饰 ) 。

increment

INCREMENT BY increment 子 句 是 可 选 的 。 一 个 正 数 将 生 成 一 个 递 增 的 序 列 , 一 个 负 数 将 生 成 一 个 递 减 的 序 列 。 缺 省 值 是 一 ( 1) 。

minvalue
NO MINVALUE

可 选 的 子 句 MINVALUE minvalue 决 定 一 个 序 列 可 生 成 的 最 小 值 。 如 果 没 有 声 明 这 个 子 句 或 者 声 明 了 NO MINVALUE, 那 么 就 使 用 缺 省 。 缺 省 分 别 是 递 增 序 列 为 1 递 减 为 -263-1。

maxvalue
NO MAXVALUE

使 用 可 选 子 句 MAXVALUE maxvalue 决 定 序 列 的 最 大 值 。 如 果 没 有 声 明 这 个 子 句 或 者 声 明 了 NO MAXVALUE, 那 么 就 使 用 缺 省 。 缺 省 的 分 别 是 递 增 为 263-1, 递 减 为 -1。

start

可 选 的 START WITH start 子 句 使 序 列 可 以 从 任 意 位 置 开 始 。 缺 省 初 始 值 是 递 增 序 列 为 minvalue 递 减 序 列 为 maxvalue.

cache

CACHE cache 选 项 使 序 列 号 预 分 配 并 且 为 快 速 访 问 存 储 在 内 存 里 面 。 最 小 值 ( 也 是 缺 省 值 ) 是 1( 一 次 只 能 生 成 一 个 值 , 也 就 是 说 没 有 缓 存 ) 这 也 是 缺 省 。

CYCLE

NO CYCLE

可 选 的 CYCLE关 键 字 可 用 于 使 序 列 到 达 最 大 值 ( maxvalue) 或 最 小 值 ( minvalue) 时 可 复 位 并 继 续 下 去 。 如 果 达 到 极 限 , 生 成 的 下 一 个 数 据 将 分 别 是 最 小 值 ( minvalue) 或 最 大 值 ( maxvalue) 。

如 果 声 明 了 可 选 的 关 键 字 NO CYCLE, 那 么 在 序 列 达 到 其 最 大 值 之 后 任 何 对 nextval 的 调 用 都 强 返 回 一 个 错 误 。 如 果 既 没 有 声 明 CYCLE 也 没 有 声 明 NO CYCLE, 那 么 NO CYCLE 是 缺 省 。

NOTES 注 意

使 用 DROP SEQUENCE 语 句 来 删 除 序 列 。

序 列 是 基 于 bigint 运 算 的 , 因 此 其 范 围 不 能 超 过 八 字 节 的 整 数 范 围 ( -9223372036854775808 到 9223372036854775807) 。 在 一 些 老 一 点 的 平 台 上 可 能 没 有 对 八 字 节 整 数 的 编 译 器 支 持 , 这 种 情 况 下 序 列 使 用 普 通 的 integer 运 算 ( 范 围 是 -2147483648 到 +2147483647) 。

如 果 cache 设 置 大 于 一 , 并 且 这 个 序 列 对 象 将 被 用 于 并 发 多 会 话 的 场 合 , 那 么 可 能 会 有 不 可 预 料 的 结 果 发 生 。 每 个 会 话 在 一 次 访 问 序 列 对 象 的 过 程 中 将 分 配 并 缓 存 随 后 的 序 列 值 , 并 且 相 应 增 加 序 列 对 象 的 last_value。 这 样 , 同 一 个 事 务 中 的 随 后 的 cache-1 次 nextval 将 只 是 返 回 预 先 分 配 的 数 值 , 而 不 用 动 序 列 对 象 。 因 此 , 任 何 在 一 个 会 话 中 分 配 但 是 没 有 使 用 的 数 字 都 将 在 会 话 结 尾 丢 失 , 导 致 序 列 里 面 出 现 "空 洞 "。

另 外 , 尽 管 系 统 保 证 为 多 个 会 话 分 配 独 立 的 序 列 值 , 但 是 如 果 考 虑 所 有 会 话 , 那 么 这 个 数 值 可 能 会 丢 失 顺 序 。 比 如 , 如 果 cache 设 置 为 10, 那 么 会 话 A 保 留 了 1..10 并 且 返 回 nextval=1, 然 后 会 话 B 可 能 会 保 留 11..20 然 后 在 会 话 A 生 成 nextval=2 之 前 返 回 nextval=11。 因 此 , 对 于 cache 设 置 为 一 的 情 况 , 我 们 可 以 安 全 地 假 设 nextval 值 是 顺 序 生 成 的 ; 而 如 果 把 cache 设 置 得 大 于 一 , 那 么 你 只 能 假 设 nextval 值 总 是 唯 一 得 , 而 不 是 完 全 顺 序 地 生 成 。 同 样 , last_value 将 反 映 任 何 会 话 保 留 的 最 后 的 数 值 , 不 管 它 是 否 曾 被 nextval 返 回 。

另 外 一 个 考 虑 是 在 这 样 的 序 列 上 执 行 的 setval 将 不 会 被 其 它 会 话 注 意 到 , 直 到 它 们 用 光 他 们 缓 存 的 数 值 。

EXAMPLES 例 子

创 建 一 个 叫 serial 的 递 增 序 列 , 从 101开 始 :

CREATE SEQUENCE serial START 101;

从 此 序 列 中 选 出 下 一 个 数 字 :

SELECT nextval(’serial’);

nextval
---------
114

在 一 个 INSERT 中 使 用 此 序 列 :

INSERT INTO distributors VALUES (nextval(’serial’), ’nothing’);

在 一 个 COPY FROM 后 更 新 序 列 :

BEGIN;
COPY distributors FROM ’input_file’;
SELECT setval(’serial’, max(id)) FROM distributors;
END;

COMPATIBILITY 兼 容 性

CREATE SEQUENCE 是 PostgreSQL 语 言 扩 展 。 在 SQL 标 准 里 没 有 CREATE SEQUENCE 语 句 。

译 者

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

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