在同时插入数据时避免出现唯一约束违规

时间:2016-06-02 12:53:59

标签: python sql django database postgresql

我正在实施一个使用工作池的导入器(由Celery和RabbitMQ提供支持)。导入的数据包括由唯一用户ID标识的用户数据,并存储在PostgreSQL数据库中。

通常我会收到很多导入文件,并且会同时处理这些文件。在多个文件中,可以存在相同用户ID的数据。这导致2个导入尝试同时处理相同用户ID 的数据的情况。

如果特定用户ID的数据已存在,则没有问题:使用SELECT ... FOR UPDATE锁定数据库行。但是,如果没有与ID相关联的数据,则两个导入都会遇到麻烦的情况:两者都尝试INSERT - 使用相同的用户ID。

由于用户ID字段具有UNIQUE约束,因此事务失败。

如何防止这种情况发生?除了锁定整个表之外还有其他选择吗?

0 个答案:

没有答案