By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
create table command(
command_id int,
active boolean,
claim_id uuid,
execution_heartbeat timestamptz,
sid int,
started_on timestamptz,
status int,
tenant_id int);
insert into command (command_id,sid,status) select n,n,0
from generate_series(1,15)_(n) returning *;
create table debug_ as
select clock_timestamp(), command_id, claim_id from command limit 0;
CREATE TABLE
command_id | active | claim_id | execution_heartbeat | sid | started_on | status | tenant_id |
---|---|---|---|---|---|---|---|
1 | null | null | null | 1 | null | 0 | null |
2 | null | null | null | 2 | null | 0 | null |
3 | null | null | null | 3 | null | 0 | null |
4 | null | null | null | 4 | null | 0 | null |
5 | null | null | null | 5 | null | 0 | null |
6 | null | null | null | 6 | null | 0 | null |
7 | null | null | null | 7 | null | 0 | null |
8 | null | null | null | 8 | null | 0 | null |
9 | null | null | null | 9 | null | 0 | null |
10 | null | null | null | 10 | null | 0 | null |
11 | null | null | null | 11 | null | 0 | null |
12 | null | null | null | 12 | null | 0 | null |
13 | null | null | null | 13 | null | 0 | null |
14 | null | null | null | 14 | null | 0 | null |
15 | null | null | null | 15 | null | 0 | null |
INSERT 0 15
SELECT 0
do $do$ declare client_op text:=$dyn_sql$
copy (select) to program $sh$ psql -c '
start transaction; select pg_sleep(2);
WITH cte AS (
UPDATE command AS c
SET execution_heartbeat =clock_timestamp(),
claim_id = gen_random_uuid()
FROM (
SELECT c0.command_id, c0.active, c0.claim_id, c0.execution_heartbeat, c0.sid, c0.started_on, c0.status, c0.tenant_id
FROM command AS c0
WHERE c0.status = 0 AND (c0.claim_id IS NULL)
ORDER BY c0.sid
FOR UPDATE SKIP LOCKED ---------------------explicit locking
LIMIT 1 --@__p_0
) AS t
WHERE c.command_id = t.command_id
RETURNING c.command_id,c.claim_id)
INSERT INTO debug_ SELECT clock_timestamp(),command_id,claim_id FROM cte;
select pg_sleep(2);
commit;' & $sh$;
$dyn_sql$;
i int;
begin
for i in 1..9 loop
execute client_op;
end loop;
end $do$;
DO
select pg_sleep(13);
select * from debug_;
select * from command;
pg_sleep |
---|
SELECT 1
clock_timestamp | command_id | claim_id |
---|---|---|
2025-01-10 19:37:47.061062+00 | 1 | ae8839dd-2337-498c-801d-6e78ebddfcde |
2025-01-10 19:37:47.061728+00 | 2 | 56a657a4-db61-447c-9302-27b6f1ae6268 |
2025-01-10 19:37:47.075121+00 | 3 | 6b0fd931-297e-46ea-9e92-73be3c2b146b |
2025-01-10 19:37:47.078847+00 | 4 | 86921011-767f-4109-851f-d7d413e774e0 |
2025-01-10 19:37:47.079047+00 | 5 | 1c51c7db-4fc4-4887-9aa6-5450dd893532 |
2025-01-10 19:37:47.08718+00 | 6 | 91ba0cd7-44be-4413-8c53-4b691a0f5bbd |
2025-01-10 19:37:47.091804+00 | 8 | fe98622c-c3a4-450e-8fec-87cdca004f0a |
2025-01-10 19:37:47.092002+00 | 7 | e14ae601-80e7-41aa-b64e-3351843a8168 |
2025-01-10 19:37:47.095996+00 | 9 | 29e3d8e5-8471-44b0-8eb5-e51105cfbf7f |
SELECT 9
command_id | active | claim_id | execution_heartbeat | sid | started_on | status | tenant_id |
---|---|---|---|---|---|---|---|
10 | null | null | null | 10 | null | 0 | null |
11 | null | null | null | 11 | null | 0 | null |
12 | null | null | null | 12 | null | 0 | null |
13 | null | null | null | 13 | null | 0 | null |
14 | null | null | null | 14 | null | 0 | null |
15 | null | null | null | 15 | null | 0 | null |
1 | null | ae8839dd-2337-498c-801d-6e78ebddfcde | 2025-01-10 19:37:47.061026+00 | 1 | null | 0 | null |
2 | null | 56a657a4-db61-447c-9302-27b6f1ae6268 | 2025-01-10 19:37:47.06171+00 | 2 | null | 0 | null |
3 | null | 6b0fd931-297e-46ea-9e92-73be3c2b146b | 2025-01-10 19:37:47.07509+00 | 3 | null | 0 | null |
4 | null | 86921011-767f-4109-851f-d7d413e774e0 | 2025-01-10 19:37:47.078835+00 | 4 | null | 0 | null |
5 | null | 1c51c7db-4fc4-4887-9aa6-5450dd893532 | 2025-01-10 19:37:47.079036+00 | 5 | null | 0 | null |
6 | null | 91ba0cd7-44be-4413-8c53-4b691a0f5bbd | 2025-01-10 19:37:47.087166+00 | 6 | null | 0 | null |
8 | null | fe98622c-c3a4-450e-8fec-87cdca004f0a | 2025-01-10 19:37:47.091785+00 | 8 | null | 0 | null |
7 | null | e14ae601-80e7-41aa-b64e-3351843a8168 | 2025-01-10 19:37:47.091983+00 | 7 | null | 0 | null |
9 | null | 29e3d8e5-8471-44b0-8eb5-e51105cfbf7f | 2025-01-10 19:37:47.095976+00 | 9 | null | 0 | null |
SELECT 15