django:IntegrityError:重复键值违反唯一约束

时间:2013-06-26 14:18:16

标签: django postgresql database-integrity

当我尝试将新条目保存到名为“config”的表中时,我遇到了这个问题,

class Config(models.Model):
    ident = models.CharField(max_length=uuidLength, null=True, editable=False)
    scanner = models.ForeignKey('Scanner')
    name = models.CharField(max_length=64)
   ''' some other fields '''

和postgres给出了这样的错误(app被称为“pegasus”,因此django提供的表名实际上是“pegasus_config”):

IntegrityError: duplicate key value violates unique constraint "pegasus_config_scanner_id_name_key"
DETAIL:  Key (scanner_id, name)=(2, ) already exists.

我在stackoverflow中搜索并找到this解决方案,问题是我不知道应该将哪个表重置为索引。 我根据答案做了以下事项:

SELECT setval('pegasus_config_id_seq', (SELECT MAX(id) FROM pegasus_config)+1)

但问题仍然存在。我也进入了数据库,发现“pegasus_config_scanner_id_name_key”实际上是一个索引。所以我很困惑要重置哪个索引?请帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用以下查询来确定哪个表定义了该唯一约束:

SELECT  n.nspname as schema_name,
        co.conrelid::regclass as table_name,
        co.conname as constraint_name,
        pg_catalog.pg_get_constraintdef(co.oid, true) as constraing_def
FROM pg_constraint co
INNER JOIN pg_catalog.pg_class cl ON cl.oid = co.conrelid
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = cl.relnamespace
WHERE co.conname = 'pegasus_config_scanner_id_name_key'
AND co.contype = 'u'