【问题标题】:Why inserting primary key does not affect sequence?为什么插入主键不影响顺序?
【发布时间】:2018-11-20 07:46:47
【问题描述】:

当插入带有隐式主键的行时,它似乎不会影响主键序列,然后,当尝试在没有 PK 的情况下插入时,它会失败:

create table testtable(
  id serial primary key,
  data integer not null
);

使用 PK 插入(例如关于数据迁移):

insert into testtable ( id, data ) values ( 1,2 ), ( 2,2 ), ( 3,2 ), ( 4,2 );
INSERT 0 4

插入新数据,不带PK:

insert into testtable ( data ) values ( 4 ), ( 5 ), ( 6 ), ( 7 );
ERROR:  duplicate key value violates unique constraint "testtable_pkey"
DETAIL:  Key (id)=(1) already exists.

为什么在第一个INSERT 之后没有在最大值上设置序列?我应该在插入 PK 后控制序列吗?有没有办法让序列自动在正确的轨道上?

【问题讨论】:

    标签: postgresql primary-key postgresql-9.5


    【解决方案1】:

    出现这种行为的原因是在列的DEFAULT值中访问序列,而显式插入列时不使用默认值。

    我能想象的实现你想要的唯一方法是在插入后修改序列的触发器,但我认为这将是一个缓慢而可怕的解决方案。

    最好的方法是在迁移完成后调整一次顺序。

    【讨论】:

    • 正如我认为的解决方案一样。希望我错了;)谢谢您的确认!
    猜你喜欢
    • 2013-11-19
    • 2012-05-11
    • 1970-01-01
    • 2020-06-22
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    相关资源
    最近更新 更多