在PostgreSQL中插入唯一值 [英] Inserting unique values in PostgreSQL
本文介绍了在PostgreSQL中插入唯一值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
query2 = "INSERT INTO users (id, name, screenName, createdAt, defaultProfile, defaultProfileImage,
description) SELECT DISTINCT %s, %s, %s, %s, %s, %s, %s;"
cur.execute(query2, (user_id, user_name, user_screenname, user_createdat,
default_profile, default_profile_image, description))
但是,我仍然收到错误:opCopg2.IntegrityError:重复的键值违反唯一约束"USERS_KEY"。
我猜查询将插入所有数据,然后选择不同的值? 我想另一种方法是将所有数据存储在一个临时数据库中,然后在那里检索它们。 但有没有更简单的方法呢?谢谢!
推荐答案
您似乎正在尝试执行insert ... if not exists
类型的操作。如果你使用的是PostgreSQL9.5,你应该使用INSERT ... ON CONFLICT NO ACTION
。相关详情请参见How to UPSERT (MERGE, INSERT ... ON DUPLICATE UPDATE) in PostgreSQL?
SELECT DISTINCT
,您使用它的方式对您没有帮助。它只对SELECT
语句输入的行进行操作。它不知道输出行的去向,在您的情况下是到表。
您需要联接该表,或者使用WHERE NOT EXISTS (SELECT 1 FROM mytable WHERE ...)
使INSERT INTO ... SELECT ...
的SELECT
部分返回零行(如果该行已存在于目标表中)。
请注意,这仍然受竞争条件的影响。如果您有多个并发客户端,则还需要LOCK
表。
这篇关于在PostgreSQL中插入唯一值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文