CREATE SEQUENCE
是一个 DDL 命令,用于定义一个新的序列。
CREATE SEQUENCE
添加于 PostgreSQL 6.4。
用法
通常,在使用 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