class Marriage(BaseModel):
users = ArrayField(BigIntegerField)
chat_id = BigIntegerField()
class Meta:
indexes = (
(('users', "chat_id"), True),
)
我想为用户值和chat_id创建一个唯一索引,例如:
users=[1,2], chat_id=1
users=[2,1], chat_id=1
我建议咨询 Postgres 人员,因为我不确定你会如何做。我认为“最好”的解决方案是将它们平放:
class Marriage(BaseModel):
chat_id = pw.BigIntegerField()
user_id = pw.BigIntegerField()
class Meta:
indexes = (
(('chat_id', 'user_id'), True),
)
for uid in (1, 2):
Marriage.create(user_id=uid, chat_id=1)
然后让所有用户结婚:
q = Marriage.select(Marriage.user_id).where(Marriage.chat_id == 1)
uids = [uid for uid, in q.tuples()]
在 Postgres 中,您创建一个 唯一索引 并使用 least()、great() 函数对 (user_id, chat_id) 的值进行排序,如下所示:(参见 demo)
create unique index chat_user_same_ndx
on marriage( least(chat_id, user_id), greatest(chat_id, user_id) );
我不确定这到底是如何转化为你的模糊语言的。但看看你如何在代码中创建索引似乎是可行的。