为什么PostgreSQL的自增ID是非连续的?

为什么PostgreSQL的自增ID是非连续的?

绝影如岚 发布于 2021-11-25 字数 464 浏览 716 回复 12

while(1)插入数据。id为自增,结果 select * from test order by id  limit 100。得到的结果,id时非连续的,是这样的:

id account

1

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(12

酒几许 2021-12-01 12 楼

就像mysql 的uuid一样,每次select nextval('user_seq')都会自动递增的。就像楼主所说,可能你的事务没成功,但seq不会回滚,除非你rockback的时候设置一下seq

INSERT INTO my_users(u_id,u_name)VALUES(nextval('user_seq'),'oschina');

感情旳空白 2021-12-01 11 楼

如何指定排序?建表的时候确实没有指定排序

坏尐絯 2021-12-01 10 楼

回复
就是楼上的回答啊 ,order by 你要指定 ,直接 select 不保证顺序

丢了幸福的猪 2021-12-01 9 楼

手册上说的意思是如果没有ORDER BY排序,那么输出字段顺序是未知的。不过楼主已经指定了ORDER BY id,那么默认就是在id字段上做ASC排序。

疑心病 2021-12-01 8 楼

回复
我的问题是order by id asc出来的结果ID却不是连续的。。。。

做个少女永远怀春 2021-12-01 7 楼

回复
我的问题是order by id asc出来的结果ID却不是连续的。。。。.

甜扑 2021-12-01 6 楼

我记得 pgsql 手册 说过 ,你不指定 排序 ,pgsql 不保证 值 是顺序的 ,可能是 磁盘上的顺序

半世蒼涼 2021-12-01 5 楼

如果不加ASC 默认就是ASC的.

醉生梦死 2021-12-01 4 楼

这个回答靠谱

檐上三寸雪 2021-11-30 3 楼

并没有使用事物,就是单纯的一个死循环不停的插入数据而已。

泪冰清 2021-11-30 2 楼

回复
看看pg_log下面日志是否有插入失败

流心雨 2021-11-26 1 楼

@cevin : 你是不是使用了事务?pgsql的sequence发生器不支持回滚,有可能是插入时新序列号已经获取但写入请求失败