我有一个用django构建的项目,它使用postgres数据库。 此数据库由CSVs文件填充。因此,当我想插入一个新对象时,我得到了错误“duplicated key”,因为id = 1的对象已经存在。
代码:
user = User(name= "Foo")
user.save()
表用户在id上有PK。
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
如果我在psql中得到了表的详细信息,我得到了:
Column| Type | Modifiers
------+-------- +--------------------------------------
id | integer | not null default nextval('users_id_seq'::regclass)
此外,如果我在创建变量用户后执行 user。 dict 并保存之前,我会得到'id':无 < / p>
如何使用未使用的ID保存用户?
答案 0 :(得分:6)
您很可能会在CSV设置中明确地插入您的用户id值,当发生这种情况时,postgres序列不会更新,因此当您尝试添加新用户时,序列会生成已使用的值
请查看此其他问题以供参考postgres autoincrement not updated on explicit id inserts
解决方案是该问题的答案所说的,手动更新序列
答案 1 :(得分:1)
您可以通过手动设置users_id_seq来修复它。
SELECT setval('users_id_seq', (SELECT MAX(id) from "users"));
答案 2 :(得分:0)
除非您将名称作为表的主键,否则上述插入应该有效。如果您将名称作为主键,请将其删除并尝试。
答案 3 :(得分:0)
在Postgres SQL中,您可以将id指定为serial,然后将其标记为Primary Key。然后,无论何时插入记录,它都将按顺序排列。 即id serial NOT NULL和 CONSTRAINT primkey PRIMARY KEY(id)。
正如你所说的那样,它是一个预先填充的CSV,所以当你从python代码中插入它时,它会自动进入表的末尾,并且没有重复的值。