CREATE SEQUENCE 是一个用于定义新序列的 DDL 命令。
CREATE SEQUENCE 在 PostgreSQL 6.1 中被添加。
用法
通常,当使用 SERIAL 或 BIGSERIAL 伪数据类型定义表列时,序列会自动创建。当然,也可以使用 CREATE SEQUENCE 手动创建序列,并将其分配给表列。
序列可以为 int2 (smallint)、int4 (int) 和 int8 (bigint) 数据类型创建。
如果列的默认值被设置为从一个具有更大数据类型的序列读取(例如,一个 int4 列和一个 int8 序列),一旦序列值超过列数据类型的最大值,就会发生超出范围错误。
请注意,在执行 CREATE SEQUENCE 时,如果没有指定序列的数据类型,则默认假定为 int8。
变更历史
- PostgreSQL 15
- 添加了
CREATE UNLOGGED SEQUENCE语法(提交 344d62fb)
- 添加了
- PostgreSQL 10
- 添加了
CREATE SEQUENCE AS data_type子句(提交 2ea5b06c)
- 添加了
- PostgreSQL 8.2
- 添加了
CREATE SEQUENCE ... OWNED BY ...语法(提交 2b2a5072)
- 添加了
- PostgreSQL 7.4
- 添加了
NO MAXVALUE和NO MINVALUE选项(提交 f249daf9)
- 添加了
- PostgreSQL 7.2
- 添加了对临时序列的支持(提交 a0c12d5e)
- PostgreSQL 6.1
- 已添加(提交 9729f6ca)
示例
CREATE SEQUENCE 的基本用法示例
postgres=# CREATE SEQUENCE foo_seq;
CREATE SEQUENCE
postgres=# \ds+
List of relations
Schema | Name | Type | Owner | Persistence | Size | Description
--------+---------+----------+----------+-------------+------------+-------------
public | foo_seq | sequence | postgres | permanent | 8192 bytes |
(1 row)
postgres=# SELECT * FROM pg_sequences\gx
-[ RECORD 1 ]-+--------------------
schemaname | public
sequencename | foo_seq
sequenceowner | postgres
data_type | bigint
start_value | 1
min_value | 1
max_value | 9223372036854775807
increment_by | 1
cycle | f
cache_size | 1
last_value |
请注意,默认情况下,序列以 int8 (bigint>) 类型创建。
参考资料
- PostgreSQL 文档: CREATE SEQUENCE
