卢克斯托姆的评论给我指明了正确的方向。
这个
NEXTVAL()
函数(在我测试过的情况下)给出了连续的值,在这种情况下,只有一个会话查询它们。此外,在并发访问时,如果在插入之后发出,
CURRVAL
检索缓存值,该值保证是唯一的,但不一定是连续的。我从没打过电话
NEXTVAL
在其他任何地方,如在我的default子句中,这为我解决了问题,尽管可能存在这样的情况,即
下一步
插入之间增加序列计数器。
我能想到的一个例子(我将在未来测试)是如果
AUTO COMMIT
设置为
OFF
,这是
ON
默认情况下为vertica客户端驱动程序。
更新:
这似乎还有用
AUTOCOMMIT
存在
关闭
(使用
vertica-python
客户端驱动程序,其中
C
是连接和
cur
光标):
cur.execute("SELECT NEXTVAL('my_schema.my_sequence');")
cur.fetchall()
--> 1
cur.execute("SELECT CURRVAL('my_schema.my_sequence');")
cur.fetchall()
--> 1
cur.execute("SET SESSION AUTOCOMMIT TO OFF")
cur.execute("SELECT NEXTVAL('my_schema.my_sequence');")
cur.execute("SELECT NEXTVAL('my_schema.my_sequence');")
cur.execute("SELECT NEXTVAL('my_schema.my_sequence');")
cur.execute("SELECT CURRVAL('my_schema.my_sequence');")
cur.fetchall()
--> 4
但是,在连接回滚期间,这似乎没有变化。所以会发生以下情况:
C.rollback()
cur.execute("SELECT CURRVAL('my_schema.my_sequence');")
cur.fetchall()
--> 4