PostgreSQL主键序列很坑爹啊。

2013-09-06 17:52:25 +08:00
 banxi1988
RT:
我有一个表,因为要将之前的一些数据迁移过来,所以呢。
迁移数据的时候主键的id是指定了的。

然后应用再插入数据的时候,就报这个错误了:
integrityerror duplicate key value violates unique constraint
其实就是尝试使用已经使用过的id。

查了下psql生成的序列,它的当前值,是我应用没有指定id时,插入的次数,
也就是说,没有指定id,它才用序列生成的值。但是,用了指定id插入的时候,居然没有更新序列。

我用mysql时是没有这个问题的。mysql会自动根据当前已经用过的最大id,来自动增长 。。。。。。。。。。。。。。。。
11364 次点击
所在节点    PostgreSQL
3 条回复
banxi1988
2013-09-06 17:53:25 +08:00
@ipconfiger 刚迁移打算投入psql,求指教。。。
ipconfiger
2013-09-06 20:55:25 +08:00
@banxi1988 没啥坑啊,导数据的时候没有触发序列自增,这样才能提高导入速度。导完后需要自增序列的起始值是1,所以一插入就键值重复了。
这个时候你只需要 SELECT setval('序列的name', (SELECT MAX(id) FROM 表名)+1)就行了
banxi1988
2013-09-07 14:22:33 +08:00
@ipconfiger
谢谢,明白了,不过,不明白为什么psql不自动将这一步操作完成..
让我这种从mysql过来的人觉得莫名其妙啊...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/81575

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX