【问题标题】:Postgresql error: insert operation returns id exists in Python [duplicate]Postgresql错误:插入操作返回ID存在于Python中[重复]
【发布时间】:2017-02-21 05:21:18
【问题描述】:

我尝试将name 插入数据库。

name = 'test'
cur.execute("INSERT INTO scholars(name) VALUES('{}') returning id".format(name))
id = cur.fetchone()
print(id)

错误信息:

psycopg2.IntegrityError: duplicate key value violates unique constraint "idx_16514_primary"
DETAIL:  Key (id)=(2321) already exists.

id=2301时成功,返回ID。 之后,id += 1并返回下面的错误。

http://ob9j09f06.bkt.clouddn.com/2016-10-12-16%3A31%3A12.jpg

【问题讨论】:

  • 您是否在未正确更新序列的情况下手动插入值?
  • 您的 id 序列可能有问题,运行SELECT currval(pg_get_serial_sequence('scholars', 'id')); 以显示 id 序列创建的最新值。

标签: python postgresql


【解决方案1】:

在我看来,您的数据库中已经有 ID 为 2321 的记录。可以跟SELECT id FROM scholars联系吗?

【讨论】:

  • 但是当我插入新数据时应该手动添加id。
  • 我的猜测:您删除了一些记录,或者您手动创建了一些ID,因此自动生成器出现了问题。
【解决方案2】:

感谢@e4c5,@kxxoling

这里我得到了这个问题的答案How to reset postgres' primary key sequence when it falls out of sync?

我的id sequence 出了点问题。

我通过这样做修复了它。

SELECT MAX(id) FROM scholars;

=> 11518

SELECT nextval('scholars_id_seq');

=> 2324 # 这里低于max(id)

SELECT setval('scholars_id_seq', (SELECT MAX(id) FROM scholars));

=> 11518 # 修复它

SELECT nextval('scholars_id_seq');

=> 11519 # 正常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 2020-09-07
    • 2013-06-18
    • 2013-08-14
    • 1970-01-01
    • 2013-10-10
    相关资源
    最近更新 更多