我正在测试postgresql序列(使用http://sqlfiddle.com和PostgreSQL 9.3我目前没有在本地设置PostgreSQL),但我看到了奇怪的行为。
创建序列
CREATE SEQUENCE counter_seq;
ALTER SEQUENCE counter_seq RESTART 9223372036854775805;
然后从序列中选择下一个值:
SELECT nextval('counter_seq');
结果是9223372036854776000
超出了BIGINT的范围!?!?
序列本身似乎正确更新(在使用ERROR: nextval: reached maximum value of sequence "counter_seq" (9223372036854775807)
进行几次选择后会失败)但nextval
的结果在运行时不正确。
然后我尝试将序列设置得低得多:
ALTER SEQUENCE counter_seq RESTART 5223372036854775805;
SELECT nextval('counter_seq');
但结果是:
5223372036854776000
在将序列值删除到5000000000000000
之前,我无法获得可靠的行为。
这是postgresql错误还是sqlfiddle?
答案 0 :(得分:1)
看起来像SQLFiddle错误或pgsql 9.3问题。我在本地9.6上没有得到相同的结果,也没有在http://rextester.com/COJS32891
上给出这样的错误