多个应用程序线程未按顺序选择 Postgres 记录

问题描述 投票:0回答:0

尝试编写一个函数来按日期列的顺序选择和锁定记录,在有时数百个并行线程同时调用该函数的环境中。 我一直在乱序选择记录。

SELECT 
INTO _id, _otherid
    t1.id, t1.otherid
FROM tbl1 t1
WHERE NOT EXISTS (select 1 from locktbl l where l.otherid = t1.otherid)
ORDER BY t1.recdate
-- FOR UPDATE SKIP LOCKED
LIMIT 1;

IF _id > 0 THEN 
    INSERT INTO locktbl (id, otherid)
    VALUES (_id, _otherid);
END IF;

Table locktblotherid 列有唯一约束。 尝试使用 FOR UPDATE SKIP LOCKED 或不使用它,但仍然会根据 recdate 乱序选择记录。不管我是否遇到阻塞错误或唯一密钥违规错误,我们都可以在应用程序代码中处理这些错误。我们只需要他们不要被乱序选中。

有什么建议吗? 谢谢。

postgresql parallel-processing sequential
© www.soinside.com 2019 - 2024. All rights reserved.