如何解决带表锁定的条件插入POSTGRES SQL
我正在尝试在postgreSQL表中完成此逻辑:
- 检查是否存在某些特定条件的行。
- 如果存在,则什么也不做。
- 如果不存在,请插入具有某些值的新行。
- 返回插入的行,如果未插入任何内容,则不返回任何内容。
- 这样做的方式是,如果两个进程尝试同时执行此操作,则第二个进程将被阻止访问查看表,直到第一个进程完成条件插入。 li>
我当前的查询如下:(传递_currentIndex==2? FloatingActionButton():Container()
,id
,bike_id
和status
)。
status_to_conflict_on
是主键。
ride_id
目前,我收到此错误:
BEGIN;
LOCK TABLE rides in ACCESS EXCLUSIVE MODE;
INSERT INTO rides (ride_id,bike_id,status,inserted_dt,updated_dt)
SELECT :ride_id,:bike_id,status::status,now(),now()
WHERE NOT EXISTS (
SELECT * FROM rides WHERE bike_id=:bike_id AND status::text IN (<statuses_to_conflict_on>)
);
COMMIT;
SELECT * FROM rides WHERE ride_id=:ride_id;
,如果有人知道我的语法是否错误,或者有更好的方法来完成我所描述的内容,将不胜感激!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。