Skip to content

PostgreSQL setval() 函数 ​

PostgreSQL setval() 函数重置指定序列的当前值,并返回指定的值。

setval() 语法 ​

这里是 PostgreSQL setval() 函数的语法:

sql
setval(sequence_name TEXT, current_value BIGINT) -> BIGINT

或

sql
setval(sequence_name TEXT, current_value BIGINT, is_called BOOLEAN) -> BIGINT

参数 ​

  • sequence_name

    必需的。 序列的名称。

  • current_value

    必需的。 为序列指定的当前值。

  • is_called

    可选的。 是否调用指定的当前值。如果为 true,则设置的当前值已被使用;如果为 false,则设置的当前值未被使用。默认值为 true。

返回值 ​

PostgreSQL setval() 函数返回第二个参数的值,即 current_value。

setval() 示例 ​

首先,让我们使用 CREATE SEQUENCE 语句创建一个简单的序列生成器 my_sequence:

sql
DROP SEQUENCE IF EXISTS my_sequence;
CREATE SEQUENCE my_sequence START 100;

这里,我们创建了一个名称为 my_sequence 序列生成器,它的起始值是 100。

然后,让我们使用 PostgreSQL nextval() 函数将序列 my_sequence 前进一位并返回最新的值:

sql
SELECT nextval('my_sequence');
bash
 nextval
---------
     100

然后,让我们使用下面的语句将序列 my_sequence 的当前的值设置为 200,

sql
SELECT setval('my_sequence', 200);
bash
 setval
--------
    200

让我们使用 PostgreSQL nextval() 函数 获取序列 my_sequence 的下一个值:

sql
SELECT nextval('my_sequence');
bash
 nextval
---------
     201

这里,由于前面我们使用了 setval() 函数将序列的当前值设置为 200,因此,此处的 nextval() 函数返回了 201。

当然,我们也可以让序列 my_sequence 从 200 开始,而不是从 201 开始,请使用下面的语句:

sql
SELECT setval('my_sequence', 200, false);
bash
 setval
--------
    200

让我们使用 PostgreSQL nextval() 函数获取序列 my_sequence 的下一个值:

sql
SELECT nextval('my_sequence');
bash
 nextval
---------
     200