V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
banxi1988
V2EX  ›  PostgreSQL

PostgreSQL主键序列很坑爹啊。

  •  
  •   banxi1988 · 2013-09-06 17:52:25 +08:00 · 11355 次点击
    这是一个创建于 4107 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RT:
    我有一个表,因为要将之前的一些数据迁移过来,所以呢。
    迁移数据的时候主键的id是指定了的。

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

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

    我用mysql时是没有这个问题的。mysql会自动根据当前已经用过的最大id,来自动增长 。。。。。。。。。。。。。。。。
    3 条回复    1970-01-01 08:00:00 +08:00
    banxi1988
        1
    banxi1988  
    OP
       2013-09-06 17:53:25 +08:00
    @ipconfiger 刚迁移打算投入psql,求指教。。。
    ipconfiger
        2
    ipconfiger  
       2013-09-06 20:55:25 +08:00   ❤️ 1
    @banxi1988 没啥坑啊,导数据的时候没有触发序列自增,这样才能提高导入速度。导完后需要自增序列的起始值是1,所以一插入就键值重复了。
    这个时候你只需要 SELECT setval('序列的name', (SELECT MAX(id) FROM 表名)+1)就行了
    banxi1988
        3
    banxi1988  
    OP
       2013-09-07 14:22:33 +08:00
    @ipconfiger
    谢谢,明白了,不过,不明白为什么psql不自动将这一步操作完成..
    让我这种从mysql过来的人觉得莫名其妙啊...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1120 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:53 · PVG 02:53 · LAX 10:53 · JFK 13:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.