无法创建唯一索引,键重复 django postgres
Posted
技术标签:
【中文标题】无法创建唯一索引,键重复 django postgres【英文标题】:could not create unique index, key is duplicated django postgres 【发布时间】:2021-06-22 02:56:52 【问题描述】:我得到了具有相同 uuid 的以下用户表。我希望这个 uuid 是独一无二的。但是在使用 unique=True 和 editable=False 从我的用户模型中更改 uuid 时 在执行迁移命令时,我收到“psycopg2.errors.UniqueViolation: could not create unique index”错误,其中 Key (hnid)=(8c0bc4a2-165a-47d5-8084-8b87600c7fe8) is duplicated。
我的模型.py
hnid = models.UUIDField("HNID", default=uuid.uuid4, blank=True, null=True, unique=True,editable=False)
注意:我使用的是 postgres 我该如何解决这个问题
【问题讨论】:
您必须先更改重复值或删除这些条目。 我该怎么做?对不起,我是新手 请将您的模型添加到问题中。 【参考方案1】:请注意您对 hnid 的定义。可以直接使用primary_key=True
。
hnid = models.UUIDField(
primary_key=True,
default=uuid_lib.uuid4,
editable=False,
)
primary_key=True
暗示 null=False
和 unique=True
并且是只读的。根据文档,对象上只允许有一个主键。
blank=True
不是一个好主意:你不想在你的对象上有一个空白的主键。另外,它不适用于unique=True
。
关于迁移,Django 在他们的文档中给出了一个很好的例子:https://docs.djangoproject.com/en/3.1/howto/writing-migrations/#migrations-that-add-unique-fields 而且效果很好!
【讨论】:
以上是关于无法创建唯一索引,键重复 django postgres的主要内容,如果未能解决你的问题,请参考以下文章
mysql “索引”能重复吗?“唯一索引”与“索引”区别是啥?
SQL有三个类型的索引,唯一索引 不能有重复,但聚集索引,非聚集索引可以有重复