PostgreSQL unique key约束下高并发插入相同数据的结果咨询
结论
你描述的场景下,PostgreSQL的运行表现和你的猜想完全一致:最终仅会成功插入1条myData = 'data-1'的记录,仅1个实例收到插入成功响应,其余所有并发执行相同插入操作的实例都会返回唯一键重复错误。
原理说明
- PostgreSQL的唯一约束是全局强一致的,不管同时有多少个实例并发插入相同的唯一键值,数据库都会按照事务提交顺序对目标行加锁,第一个完成提交的事务会成功写入数据,其余事务都会因为违反唯一约束被拦截,抛出
duplicate key value violates unique constraint错误。 - 你当前的建表逻辑已经完全满足避免重复插入的核心需求,绝对不会出现重复的
myData数据。
高并发场景优化建议
如果你不想让业务侧捕获大量重复的唯一键冲突报错,可以把插入语句调整为冲突静默处理的写法:
INSERT INTO myTable (myData) VALUES ('data-1') ON CONFLICT (myData) DO NOTHING;
该写法在插入冲突时不会抛出错误,仅返回0行受影响,你直接通过受影响行数即可判断是否插入成功,更适配你每秒1.5万次请求的高并发场景,也能减少不必要的错误日志输出。
内容的提问来源于stack exchange,提问作者vikash vishnu
相关产品推荐
相关产品推荐

