目前我在查找列的下一个序列值方面遇到了问题。
my_list
表是通过以下方式创建的:
CREATE SEQUENCE my_list_id_seq;
CREATE TABLE IF NOT EXISTS
my_list (id int PRIMARY KEY UNIQUE NOT NULL DEFAULT nextval('my_list_id_seq'),
mycardno);
ALTER SEQUENCE my_list_id_seq OWNED BY my_list.id;
我尝试使用currval查询来查找下一个序列值(应该是1),但是我得到了
SELECT currval('my_list_id_seq');
ERROR: currval of sequence "my_list_id_seq" is not yet defined in this session
如果我使用nextval查询,我将得到2,这不是我想要的,并且该序列将通过此查询增加1。
SELECT nextval('my_list_id_seq');
nextval
---------
2
(1 row)
在执行nextval查询之后,我现在可以使用currval查询。
SELECT currval('my_list_id_seq');
currval
---------
2
(1 row)
由于我在这个阶段找不到其他的解决方案,目前我的步骤是:
- 执行nextval并获取“下一个序列”值
- 使用
ALTER SEQUENCE my_list_id_seq RESTART WITH "next sequence - 1";
来设置序列值。 “next sequence - 1”是由C#(我使用WPF)完成的。
我想知道是否有直接的方法来解决这个问题。谢谢。
id
列中可能会出现间隙,导致值甚至会增加。 - Steeevenextval()
时,您将不会得到2
,而是得到1。所以我真的不明白您的问题是什么。 - user330315