banxi1988

PostgreSQL主键序列很坑爹啊。

  •  
  •   banxi1988 · Sep 6, 2013 · 11945 views
    This topic created in 4699 days ago, the information mentioned may be changed or developed.
    RT:
    我有一个表,因为要将之前的一些数据迁移过来,所以呢。
    迁移数据的时候主键的id是指定了的。

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

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

    我用mysql时是没有这个问题的。mysql会自动根据当前已经用过的最大id,来自动增长 。。。。。。。。。。。。。。。。
    3 replies    1970-01-01 08:00:00 +08:00
    banxi1988
        1
    banxi1988  
    OP
       Sep 6, 2013
    @ipconfiger 刚迁移打算投入psql,求指教。。。
    ipconfiger
        2
    ipconfiger  
       Sep 6, 2013   ❤️ 1
    @banxi1988 没啥坑啊,导数据的时候没有触发序列自增,这样才能提高导入速度。导完后需要自增序列的起始值是1,所以一插入就键值重复了。
    这个时候你只需要 SELECT setval('序列的name', (SELECT MAX(id) FROM 表名)+1)就行了
    banxi1988
        3
    banxi1988  
    OP
       Sep 7, 2013
    @ipconfiger
    谢谢,明白了,不过,不明白为什么psql不自动将这一步操作完成..
    让我这种从mysql过来的人觉得莫名其妙啊...
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5934 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 06:46 · PVG 14:46 · LAX 23:46 · JFK 02:46
    ♥ Do have faith in what you're doing.