我有生以来第一次将 MySQL 表转换为 PostgreSQL,并遇到了没有 auto_increment 的传统新手问题。

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

我找不到解决的是当您手动将值插入到具有 UNIQUE 或 PRIMARY 约束和序列的 nextval() 作为默认值的字段时会发生什么的问题。据我所知,当序列达到该值时,这会导致 INSERT 失败。

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

一个明确的解释将不胜感激。

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

最佳答案

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

关于postgresql - 使用主键序列在 postgres 表上手动插入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3905378/

10-16 11:41