我有一个像这样的序列(在 PostgreSQL 16.0 中):
CREATE SEQUENCE public.seq_1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 999999999
START 1
CACHE 1
CYCLE;
integers
和一个包含0 到 1000000 的表
当我做:
select *, nextval('seq_1') as n2
from (
select i,n1,n1-i as d, sum(i) over (order by i) as s
from (
select i,nextval('seq_1') as n1
from integers
)
)
where i=0 or i=1000000
输出是:
我 | n1 | d | s | n2 |
---|---|---|---|---|
0 | 46137349 | 46137349 | 0 | 50331653 |
1000000 | 47137349 | 46137349 | 500000500000 | 50331654 |
n2
为什么第一行的值等于50331653?
我本来期望 47137349+1,我不介意小的差距,但在这种情况下,差距是 3194304 ( select 50331653 - 47137349
),这是很大的(或很大?)
我已经发现:
- postgres 9.0.4 序列跳过数字,所以我使用
CACHE 1