PostgreSQL 序列

Posted 时间的朋友

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL 序列相关的知识,希望对你有一定的参考价值。

PostgreSQL 中的序列是一个数据库对象,本质上是一个自增器。因此,序列在其他同类型数据库软件中以 autoincrment 值的形式存在。在一张表需要非随机,唯一标实符的场景下,Sequence 非常有用。
创建语法:
CREATE SEQUENCE sequencename
    [ INCREMENT increment ]        -- 自增数,默认是 1
    [ MINVALUE minvalue ]      -- 最小值
    [ MAXVALUE maxvalue ]      -- 最大值
    [ START start ]                -- 设置起始值
    [ CACHE cache ]                -- 是否预先缓存
    [ CYCLE ]                   -- 是否到达最大值的时候,重新返回到最小值
Sequence 使用的是整型数值,因此它的取值范围是 [-2147483647, 2147483647] 之间;

Sequence 的函数
Sequence 是不能被直接访问到的;他们需要通过 PostgreSQL 中的相关函数来操作他们。Sequence 的函数使用:
nextval(‘sequence_name‘): 将序列当前值设置成递增后的值,并返回;
currval(‘sequence_name‘): 返回序列当前值;
setval(‘sequence_name‘, n, b=true): 设置当前值;b 默认设置 true,下一次调用 nextval() 时,直接返回 n,如果设置 false,则返回 n+increment:
当数据库表序列插入冲突时,可使用下面的方法:
SELECT setval(‘your_table_id_seq‘, (SELECT MAX(id) FROM your_table)+1);
SELECT setval(‘your_table_id_seq‘, (SELECT MAX(id) FROM your_table),false);注意:获取表最大值的语句要加()才行。




以上是关于PostgreSQL 序列的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate使用PostgreSQL序列不影响序列表

Postgresql 序列性能

postgresql如何对序列进行创建修改以及删除

为啥 PostgreSQL 可序列化事务认为这是冲突?

PostgreSQL 序列

Postgresql 序列与串行