在主键“id”且默认值为 nextval() 的表上,插入一行会引发错误
Query 1 ERROR: ERROR: duplicate key value violates unique constraint "table_pkey"
DETAIL: Key (id)=(6) already exists.
Run Code Online (Sandbox Code Playgroud)
除了这个表有 200 行。为什么 Postgres 不将新行 id 设置为 201?
小智 7
您手动将行插入到表中,为id
列提供显式值,这意味着序列未高级,因为未使用默认值。现在您的序列与表中的实际值不同步。
如果您这样做,则需要将序列setval()
与实际值同步:
select setval( pg_get_serial_sequence('the_table', 'id'),
(select max(id) from the_table)
);
Run Code Online (Sandbox Code Playgroud)
如果您想防止将来出现此类问题,您可以将该列重新定义为identity
将拒绝为其传递显式值的列,这样,如果您尝试绕过默认值,就会收到错误。
归档时间: |
|
查看次数: |
2390 次 |
最近记录: |