手动插入带有主键序列的postgres表

Mic*_*erx 12 postgresql primary-key sequence

我在生命中第一次将MySQL表转换为PostgreSQL,并遇到了没有auto_increment的传统新手问题.

现在我发现postgres解决方案是使用一个序列,然后在每次插入时请求此序列的nextval()作为默认值.我还读过SERIAL类型自动创建序列和主键,即使在内部事务中调用时,nextval()也会递增计数器,以避免锁定序列.

我无法解决的问题是当您使用UNIQUE或PRIMARY约束以及序列的nextval()作为默认值手动将值插入到字段中时会发生什么.据我所知,当序列达到该值时,这会导致INSERT失败.

是否有一种简单(或常见)的​​方法来解决这个问题?

非常感谢明确的解释.

更新:如果你觉得我不应该这样做,永远无法解决这个问题或者做出一些有缺陷的假设,请随时在你的答案中指出它们.最重要的是,请告诉我该怎么做,为程序员提供一个稳定而强大的数据库,不会被简单的插入损坏(最好不要隐藏存储过程后面的所有内容)

Nev*_*kes 10

如果您正在迁移数据,那么我会删除列上的序列约束,执行所有插入,使用setval()将序列设置为数据的最大值,然后恢复列序列nextval()默认值.

  • 这对我来说似乎是正确的方法.如果要迁移现有数据,保留密钥将使您的生活更简单.迁移数据后,如果使用自动增量密钥,则不应手动设置主键.你需要保持一致. (2认同)