add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
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
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-02-14 02:21:14.190458+00 1 4eedd922-d63a-4157-ab2f-d0aa30ada83e
2025-02-14 02:21:16.198135+00 1 6d132812-c875-4009-a342-878d612d6c9a
2025-02-14 02:21:18.201204+00 1 f93030bc-0eef-468f-8407-69f494bb6301
2025-02-14 02:21:20.204292+00 1 ded860ea-4cbb-4b93-9092-a420bddc0441
2025-02-14 02:21:22.207713+00 1 44c9038b-a9ee-4460-a043-bdda3c6dda0e
SELECT 5
command_id active claim_id execution_heartbeat sid started_on status tenant_id
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
1 null 44c9038b-a9ee-4460-a043-bdda3c6dda0e 2025-02-14 02:21:22.207686+00 1 null 0 null
SELECT 15