Add BBM to backfill Duo Workflow checkpoint headers and blobs

What does this MR do and why?

This MR adds a batched background migration that copies legacy checkpoints from p_duo_workflows_checkpoints into p_duo_workflows_checkpoint_headers and p_duo_workflows_checkpoint_blobs. A follow-up removes the legacy read path, and partition retention alone cannot guarantee migrated data lands before that happens on self-managed instances. The one design choice worth a look: it only migrates a row when no header exists yet for that (workflow_id, thread_ts, workflow_created_at), so GitLab.com rows already dual-written are skipped and self-managed rows are always migrated.

Design details: cursor, skip filter, header/blob shape, edge cases, rejected alternative, known gap
  • Iterates p_duo_workflows_checkpoints with cursor (id, created_at), the composite primary key. Rows are processed in id order, so when one thread_ts was sent twice, the later legacy row also gets the later header and blobs (readers take the latest id).
  • Rows of workflows created more than 30 days ago are skipped: the header and blob tables are partitioned by workflow_created_at with 30-day retention, so those workflows have no partition left to hold their rows and the insert would fail. An old workflow can still be resumed (Workflow#archived? is informational), so this case exists.
  • A row is migrated only when no header exists for (workflow_id, thread_ts, workflow_created_at). The lookup runs against a MATERIALIZED candidates CTE so Postgres prunes the header lookup to the workflow's daily partition (verified on Database Lab: 57 of 58 header partitions never executed). The jsonb checkpoint column is read only for rows that pass this filter.
  • Header = legacy checkpoint minus channel_values, plus channel_keys (the channel names), plus parent_ts, checkpoint_ns, current_thread, metadata, and the legacy row's created_at/updated_at. workflow_created_at (the partition key) comes from a join on duo_workflows_workflows.
  • One blob per channel: the full channel value as zlib-compressed JSON, write_type = 'json', step_action = 'compaction'. Gitlab::DuoWorkflow::ChannelValuesReconstructor treats a compaction as a full replacement and anchors folds at the last compaction, so each migrated checkpoint is self-contained. channel_history dedups by message_id, so ui_chat_log history across migrated checkpoints stays correct.
  • Blob version = the legacy row id. Readers use version only to dedup blobs within one thread_ts; the legacy id keeps a re-sent checkpoint's blobs distinct and makes re-runs no-ops via the unique index idx_duo_wf_checkpoint_blobs_dedup (insert_all with unique_by).
  • Headers and blobs for one sub-batch are inserted in one transaction, so a header never lands without its blobs.
  • tables_to_check_for_vacuum names both target tables.
  • Edge cases: a channel blob over the 1 MiB check_duo_wf_checkpoint_blobs_data_size limit is skipped with a Gitlab::BackgroundMigration::Logger.warn line; the header still lists the channel. A checkpoint with more than 100 channels is skipped with a log line (no header, no blobs): the live write path rejects such a checkpoint with a 400, and a header with a NULL channel_keys would route the whole workflow to the legacy fallback (Workflow#legacy_checkpoint_fallback?). A checkpoint with no channel_values gets a header with channel_keys = [] and no blobs.
  • Rejected alternative: flipping incremental_checkpoints_enabled to true on migrated workflows. A still-running gateway for such a workflow could send checkpoints without blobs, and Rails would then write an empty header and skip the legacy row. Left to the follow-up.
  • Known gap: workflows with incremental_checkpoints_enabled = false (on self-managed, every workflow created before 19.5) still write legacy rows when resumed after this migration ran, because CreateCheckpointService only writes headers when that column is true, and their reads ignore headers because IncrementalBlobGate#reconstruct? requires the column. The migrated rows become readable once the column gate goes. The legacy read removal in #611971 must handle those workflows, either by stopping legacy writes for them first or by re-running this migration or waiting out the retention TTL.
  • Queue settings: BATCH_SIZE = 1000, SUB_BATCH_SIZE = 50 (each row can carry a multi-MB jsonb decoded and compressed in Ruby), DELAY_INTERVAL = 2.minutes. Milestone 19.5. gitlab_schema: gitlab_main_org.
  • This MR must not merge before duo_workflow_write_incremental_only is default-enabled. It is: flipped to default_enabled: true on 2026-09-17 (19.5), #607029.
  • Adds a self-managed upgrade note to doc/update/versions/gitlab_19_changes.md, as the issue asks.

References

Screenshots or screen recordings

No UI change.

How to set up and validate locally

Backend only, no UI path. Run these in a Rails console (gdk rails console or bin/rails console).

  1. Find or create a Ai::DuoWorkflows::Workflow. Set incremental_checkpoints_enabled: false with update_column.
  2. Create two Ai::DuoWorkflows::Checkpoint rows on that workflow with create!, passing thread_ts, parent_ts, metadata: {}, project:, and checkpoint: such as { 'v' => 1, 'channel_values' => { 'status' => 'Planning', 'ui_chat_log' => [{ 'message_id' => 'm1', 'content' => 'hi' }] } }. Vary the second checkpoint's channel_values so it differs from the first.
  3. Run the job:
    t = Ai::DuoWorkflows::Checkpoint
    Gitlab::BackgroundMigration::BackfillDuoWorkflowsCheckpointHeadersAndBlobs.new(
      start_cursor: [t.minimum(:id), t.minimum(:created_at)], end_cursor: [t.maximum(:id), t.maximum(:created_at)],
      batch_table: :p_duo_workflows_checkpoints, batch_column: :id, sub_batch_size: 50, pause_ms: 0,
      connection: ApplicationRecord.connection
    ).perform
  4. Check workflow.checkpoint_headers.count and workflow.checkpoint_blobs.count.
  5. Run workflow.reconstructed_channel_values(workflow.latest_checkpoint_header). Expect: it equals the second checkpoint's channel_values.
  6. Run the job again. Expect: header and blob counts are unchanged.
Queue migration check (up/down) and Database Lab evidence: migration output, sub-batch query, EXPLAIN ANALYZE

Queue migration up/down:

bin/rails db:migrate:down:main VERSION=20260918092606
bin/rails db:migrate:up:main VERSION=20260918092606
Gitlab::Database::BackgroundMigration::BatchedMigration.find_by(job_class_name: 'BackfillDuoWorkflowsCheckpointHeadersAndBlobs')

Expect: a record with status active (or finished when the table is empty).

Migration up:

main: == [advisory_lock_connection] object_id: 164820, pg_backend_pid: 84543
main: == 20260918092606 QueueBackfillDuoWorkflowsCheckpointHeadersAndBlobs: migrating 
main: == 20260918092606 QueueBackfillDuoWorkflowsCheckpointHeadersAndBlobs: migrated (0.0830s) 

main: == [advisory_lock_connection] object_id: 164820, pg_backend_pid: 84543

Migration down:

main: == [advisory_lock_connection] object_id: 164780, pg_backend_pid: 84108
main: == 20260918092606 QueueBackfillDuoWorkflowsCheckpointHeadersAndBlobs: reverting 
main: == 20260918092606 QueueBackfillDuoWorkflowsCheckpointHeadersAndBlobs: reverted (0.0274s) 

main: == [advisory_lock_connection] object_id: 164780, pg_backend_pid: 84108

Sub-batch query (as on the branch: retention predicate and sub_batch_size 10):

WITH sub_batch AS MATERIALIZED (
  SELECT id, created_at FROM p_duo_workflows_checkpoints
  WHERE (id, created_at) >= (91000000, '2026-01-01 00:00:00+00')
    AND (id, created_at) <= (91163105, '2026-09-15 07:17:59.370523+00')
  ORDER BY id, created_at LIMIT 10
),
candidates AS MATERIALIZED (
  SELECT c.id, c.created_at, c.workflow_id, c.thread_ts, w.created_at AS workflow_created_at
  FROM sub_batch
  INNER JOIN p_duo_workflows_checkpoints c ON c.id = sub_batch.id AND c.created_at = sub_batch.created_at
  INNER JOIN duo_workflows_workflows w ON w.id = c.workflow_id
  WHERE w.created_at >= '2026-08-26 00:00:00+00'
)
SELECT c.id, c.workflow_id, c.project_id, c.namespace_id, c.thread_ts, c.parent_ts,
       c.checkpoint_ns, c.current_thread, c.checkpoint, c.metadata, c.created_at, c.updated_at,
       candidates.workflow_created_at
FROM candidates
INNER JOIN p_duo_workflows_checkpoints c ON c.id = candidates.id AND c.created_at = candidates.created_at
WHERE NOT EXISTS (
  SELECT 1 FROM p_duo_workflows_checkpoint_headers h
  WHERE h.workflow_id = candidates.workflow_id
    AND h.thread_ts = candidates.thread_ts
    AND h.workflow_created_at = candidates.workflow_created_at
)
ORDER BY c.id

On Database Lab (production clone, cold cache) this took 55 ms execution (51 ms of it I/O read), 249 shared buffer hits plus 50 reads, and returned 0 rows, because every sampled GitLab.com row already has a header. The header lookup was pruned to one partition per row (57 of 58 header partitions "never executed").

EXPLAIN ANALYZE
execution plan (EXPLAIN ANALYZE):
 Sort  (cost=949.49..949.49 rows=1 width=270) (actual time=52.742..52.770 rows=0 loops=1)
   Sort Key: c.id
   Sort Method: quicksort  Memory: 25kB
   Buffers: shared hit=249 read=50 dirtied=2
   WAL: records=2 fpi=2 bytes=15546
   I/O Timings: read=51.385 write=0.000
   CTE sub_batch
     ->  Limit  (cost=15.25..15.88 rows=10 width=16) (actual time=1.102..1.138 rows=10 loops=1)
           Buffers: shared hit=138 read=1
           I/O Timings: read=0.615 write=0.000
           ->  Merge Append  (cost=15.25..10918.20 rows=172816 width=16) (actual time=1.100..1.131 rows=10 loops=1)
                 Sort Key: p_duo_workflows_checkpoints.id, p_duo_workflows_checkpoints.created_at
                 Buffers: shared hit=138 read=1
                 I/O Timings: read=0.615 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260826_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260826 p_duo_workflows_checkpoints_1  (cost=0.42..2.65 rows=1 width=16) (actual time=0.014..0.014 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_1.id, p_duo_workflows_checkpoints_1.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_1.id, p_duo_workflows_checkpoints_1.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260827_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260827 p_duo_workflows_checkpoints_2  (cost=0.42..1.95 rows=1 width=16) (actual time=0.011..0.011 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_2.id, p_duo_workflows_checkpoints_2.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_2.id, p_duo_workflows_checkpoints_2.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260828_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260828 p_duo_workflows_checkpoints_3  (cost=0.42..2.64 rows=1 width=16) (actual time=0.010..0.010 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_3.id, p_duo_workflows_checkpoints_3.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_3.id, p_duo_workflows_checkpoints_3.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260829_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260829 p_duo_workflows_checkpoints_4  (cost=0.42..2.63 rows=1 width=16) (actual time=0.009..0.009 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_4.id, p_duo_workflows_checkpoints_4.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_4.id, p_duo_workflows_checkpoints_4.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260830_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260830 p_duo_workflows_checkpoints_5  (cost=0.42..2.62 rows=1 width=16) (actual time=0.011..0.011 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_5.id, p_duo_workflows_checkpoints_5.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_5.id, p_duo_workflows_checkpoints_5.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260831_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260831 p_duo_workflows_checkpoints_6  (cost=0.42..2.64 rows=1 width=16) (actual time=0.008..0.008 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_6.id, p_duo_workflows_checkpoints_6.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_6.id, p_duo_workflows_checkpoints_6.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260901_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260901 p_duo_workflows_checkpoints_7  (cost=0.42..2.64 rows=1 width=16) (actual time=0.009..0.009 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_7.id, p_duo_workflows_checkpoints_7.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_7.id, p_duo_workflows_checkpoints_7.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260902_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260902 p_duo_workflows_checkpoints_8  (cost=0.42..2.64 rows=1 width=16) (actual time=0.007..0.008 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_8.id, p_duo_workflows_checkpoints_8.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_8.id, p_duo_workflows_checkpoints_8.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260903_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260903 p_duo_workflows_checkpoints_9  (cost=0.42..2.64 rows=1 width=16) (actual time=0.009..0.009 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_9.id, p_duo_workflows_checkpoints_9.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_9.id, p_duo_workflows_checkpoints_9.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260904_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260904 p_duo_workflows_checkpoints_10  (cost=0.42..2.64 rows=1 width=16) (actual time=0.008..0.008 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_10.id, p_duo_workflows_checkpoints_10.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_10.id, p_duo_workflows_checkpoints_10.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260905_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260905 p_duo_workflows_checkpoints_11  (cost=0.42..2.65 rows=1 width=16) (actual time=0.008..0.008 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_11.id, p_duo_workflows_checkpoints_11.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_11.id, p_duo_workflows_checkpoints_11.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260906_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260906 p_duo_workflows_checkpoints_12  (cost=0.42..2.64 rows=1 width=16) (actual time=0.009..0.009 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_12.id, p_duo_workflows_checkpoints_12.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_12.id, p_duo_workflows_checkpoints_12.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260907_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260907 p_duo_workflows_checkpoints_13  (cost=0.42..2.65 rows=1 width=16) (actual time=0.007..0.007 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_13.id, p_duo_workflows_checkpoints_13.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_13.id, p_duo_workflows_checkpoints_13.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260908_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260908 p_duo_workflows_checkpoints_14  (cost=0.43..2.62 rows=1 width=16) (actual time=0.008..0.008 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_14.id, p_duo_workflows_checkpoints_14.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_14.id, p_duo_workflows_checkpoints_14.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260909_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260909 p_duo_workflows_checkpoints_15  (cost=0.42..2.62 rows=1 width=16) (actual time=0.007..0.007 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_15.id, p_duo_workflows_checkpoints_15.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_15.id, p_duo_workflows_checkpoints_15.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260910_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260910 p_duo_workflows_checkpoints_16  (cost=0.42..2.64 rows=1 width=16) (actual time=0.008..0.008 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_16.id, p_duo_workflows_checkpoints_16.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_16.id, p_duo_workflows_checkpoints_16.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260911_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260911 p_duo_workflows_checkpoints_17  (cost=0.42..2.64 rows=1 width=16) (actual time=0.009..0.009 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_17.id, p_duo_workflows_checkpoints_17.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_17.id, p_duo_workflows_checkpoints_17.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260912_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260912 p_duo_workflows_checkpoints_18  (cost=0.42..1.94 rows=1 width=16) (actual time=0.009..0.009 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_18.id, p_duo_workflows_checkpoints_18.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_18.id, p_duo_workflows_checkpoints_18.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260913_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260913 p_duo_workflows_checkpoints_19  (cost=0.42..1.94 rows=1 width=16) (actual time=0.007..0.007 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_19.id, p_duo_workflows_checkpoints_19.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_19.id, p_duo_workflows_checkpoints_19.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260914_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260914 p_duo_workflows_checkpoints_20  (cost=0.42..560.98 rows=15239 width=16) (actual time=0.651..0.661 rows=10 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_20.id, p_duo_workflows_checkpoints_20.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_20.id, p_duo_workflows_checkpoints_20.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=3 read=1
                       I/O Timings: read=0.615 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260915_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260915 p_duo_workflows_checkpoints_21  (cost=0.42..4251.14 rows=157489 width=16) (actual time=0.031..0.031 rows=1 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_21.id, p_duo_workflows_checkpoints_21.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_21.id, p_duo_workflows_checkpoints_21.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=4
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260916_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260916 p_duo_workflows_checkpoints_22  (cost=0.12..3.14 rows=1 width=16) (actual time=0.012..0.012 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_22.id, p_duo_workflows_checkpoints_22.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_22.id, p_duo_workflows_checkpoints_22.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260917_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260917 p_duo_workflows_checkpoints_23  (cost=0.12..3.14 rows=1 width=16) (actual time=0.010..0.010 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_23.id, p_duo_workflows_checkpoints_23.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_23.id, p_duo_workflows_checkpoints_23.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260918_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260918 p_duo_workflows_checkpoints_24  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_24.id, p_duo_workflows_checkpoints_24.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_24.id, p_duo_workflows_checkpoints_24.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260919_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260919 p_duo_workflows_checkpoints_25  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_25.id, p_duo_workflows_checkpoints_25.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_25.id, p_duo_workflows_checkpoints_25.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260920_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260920 p_duo_workflows_checkpoints_26  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_26.id, p_duo_workflows_checkpoints_26.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_26.id, p_duo_workflows_checkpoints_26.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260921_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260921 p_duo_workflows_checkpoints_27  (cost=0.12..3.14 rows=1 width=16) (actual time=0.009..0.009 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_27.id, p_duo_workflows_checkpoints_27.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_27.id, p_duo_workflows_checkpoints_27.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260922_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260922 p_duo_workflows_checkpoints_28  (cost=0.12..3.14 rows=1 width=16) (actual time=0.008..0.008 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_28.id, p_duo_workflows_checkpoints_28.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_28.id, p_duo_workflows_checkpoints_28.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260923_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260923 p_duo_workflows_checkpoints_29  (cost=0.12..3.14 rows=1 width=16) (actual time=0.005..0.005 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_29.id, p_duo_workflows_checkpoints_29.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_29.id, p_duo_workflows_checkpoints_29.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260924_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260924 p_duo_workflows_checkpoints_30  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_30.id, p_duo_workflows_checkpoints_30.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_30.id, p_duo_workflows_checkpoints_30.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260925_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260925 p_duo_workflows_checkpoints_31  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_31.id, p_duo_workflows_checkpoints_31.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_31.id, p_duo_workflows_checkpoints_31.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260926_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260926 p_duo_workflows_checkpoints_32  (cost=0.12..3.14 rows=1 width=16) (actual time=0.009..0.009 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_32.id, p_duo_workflows_checkpoints_32.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_32.id, p_duo_workflows_checkpoints_32.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260927_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260927 p_duo_workflows_checkpoints_33  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.007 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_33.id, p_duo_workflows_checkpoints_33.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_33.id, p_duo_workflows_checkpoints_33.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260928_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260928 p_duo_workflows_checkpoints_34  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_34.id, p_duo_workflows_checkpoints_34.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_34.id, p_duo_workflows_checkpoints_34.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260929_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260929 p_duo_workflows_checkpoints_35  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_35.id, p_duo_workflows_checkpoints_35.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_35.id, p_duo_workflows_checkpoints_35.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20260930_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260930 p_duo_workflows_checkpoints_36  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_36.id, p_duo_workflows_checkpoints_36.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_36.id, p_duo_workflows_checkpoints_36.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261001_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261001 p_duo_workflows_checkpoints_37  (cost=0.12..3.14 rows=1 width=16) (actual time=0.008..0.008 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_37.id, p_duo_workflows_checkpoints_37.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_37.id, p_duo_workflows_checkpoints_37.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261002_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261002 p_duo_workflows_checkpoints_38  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_38.id, p_duo_workflows_checkpoints_38.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_38.id, p_duo_workflows_checkpoints_38.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261003_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261003 p_duo_workflows_checkpoints_39  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_39.id, p_duo_workflows_checkpoints_39.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_39.id, p_duo_workflows_checkpoints_39.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261004_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261004 p_duo_workflows_checkpoints_40  (cost=0.12..3.14 rows=1 width=16) (actual time=0.012..0.012 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_40.id, p_duo_workflows_checkpoints_40.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_40.id, p_duo_workflows_checkpoints_40.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261005_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261005 p_duo_workflows_checkpoints_41  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_41.id, p_duo_workflows_checkpoints_41.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_41.id, p_duo_workflows_checkpoints_41.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261006_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261006 p_duo_workflows_checkpoints_42  (cost=0.12..3.14 rows=1 width=16) (actual time=0.007..0.007 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_42.id, p_duo_workflows_checkpoints_42.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_42.id, p_duo_workflows_checkpoints_42.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261007_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261007 p_duo_workflows_checkpoints_43  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_43.id, p_duo_workflows_checkpoints_43.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_43.id, p_duo_workflows_checkpoints_43.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261008_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261008 p_duo_workflows_checkpoints_44  (cost=0.12..3.14 rows=1 width=16) (actual time=0.005..0.005 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_44.id, p_duo_workflows_checkpoints_44.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_44.id, p_duo_workflows_checkpoints_44.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261009_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261009 p_duo_workflows_checkpoints_45  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_45.id, p_duo_workflows_checkpoints_45.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_45.id, p_duo_workflows_checkpoints_45.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261010_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261010 p_duo_workflows_checkpoints_46  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.007 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_46.id, p_duo_workflows_checkpoints_46.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_46.id, p_duo_workflows_checkpoints_46.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261011_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261011 p_duo_workflows_checkpoints_47  (cost=0.12..3.14 rows=1 width=16) (actual time=0.007..0.007 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_47.id, p_duo_workflows_checkpoints_47.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_47.id, p_duo_workflows_checkpoints_47.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261012_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261012 p_duo_workflows_checkpoints_48  (cost=0.12..3.14 rows=1 width=16) (actual time=0.005..0.005 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_48.id, p_duo_workflows_checkpoints_48.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_48.id, p_duo_workflows_checkpoints_48.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261013_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261013 p_duo_workflows_checkpoints_49  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_49.id, p_duo_workflows_checkpoints_49.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_49.id, p_duo_workflows_checkpoints_49.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261014_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261014 p_duo_workflows_checkpoints_50  (cost=0.12..3.14 rows=1 width=16) (actual time=0.005..0.005 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_50.id, p_duo_workflows_checkpoints_50.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_50.id, p_duo_workflows_checkpoints_50.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261015_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261015 p_duo_workflows_checkpoints_51  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_51.id, p_duo_workflows_checkpoints_51.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_51.id, p_duo_workflows_checkpoints_51.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261016_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261016 p_duo_workflows_checkpoints_52  (cost=0.12..3.14 rows=1 width=16) (actual time=0.008..0.008 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_52.id, p_duo_workflows_checkpoints_52.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_52.id, p_duo_workflows_checkpoints_52.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261017_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261017 p_duo_workflows_checkpoints_53  (cost=0.12..3.14 rows=1 width=16) (actual time=0.005..0.005 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_53.id, p_duo_workflows_checkpoints_53.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_53.id, p_duo_workflows_checkpoints_53.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261018_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261018 p_duo_workflows_checkpoints_54  (cost=0.12..3.14 rows=1 width=16) (actual time=0.005..0.005 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_54.id, p_duo_workflows_checkpoints_54.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_54.id, p_duo_workflows_checkpoints_54.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261019_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261019 p_duo_workflows_checkpoints_55  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_55.id, p_duo_workflows_checkpoints_55.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_55.id, p_duo_workflows_checkpoints_55.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261020_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261020 p_duo_workflows_checkpoints_56  (cost=0.12..3.14 rows=1 width=16) (actual time=0.006..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_56.id, p_duo_workflows_checkpoints_56.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_56.id, p_duo_workflows_checkpoints_56.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261021_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261021 p_duo_workflows_checkpoints_57  (cost=0.12..3.14 rows=1 width=16) (actual time=0.007..0.007 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_57.id, p_duo_workflows_checkpoints_57.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_57.id, p_duo_workflows_checkpoints_57.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
                 ->  Index Only Scan using p_duo_workflows_checkpoints_20261022_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261022 p_duo_workflows_checkpoints_58  (cost=0.15..17.31 rows=33 width=16) (actual time=0.005..0.006 rows=0 loops=1)
                       Index Cond: ((ROW(p_duo_workflows_checkpoints_58.id, p_duo_workflows_checkpoints_58.created_at) >= ROW(91000000, '2026-01-01 00:00:00+00'::timestamp with time zone)) AND (ROW(p_duo_workflows_checkpoints_58.id, p_duo_workflows_checkpoints_58.created_at) <= ROW(91163105, '2026-09-15 07:17:59.370523+00'::timestamp with time zone)))
                       Heap Fetches: 0
                       Buffers: shared hit=2
                       I/O Timings: read=0.000 write=0.000
   CTE candidates
     ->  Nested Loop  (cost=0.86..746.33 rows=1 width=69) (actual time=8.083..29.769 rows=10 loops=1)
           Buffers: shared hit=191 read=28 dirtied=2
           WAL: records=2 fpi=2 bytes=15546
           I/O Timings: read=28.862 write=0.000
           ->  Nested Loop  (cost=0.42..745.82 rows=1 width=61) (actual time=1.864..7.234 rows=10 loops=1)
                 Buffers: shared hit=169 read=10
                 I/O Timings: read=6.533 write=0.000
                 ->  CTE Scan on sub_batch  (cost=0.00..0.20 rows=10 width=16) (actual time=1.105..1.137 rows=10 loops=1)
                       Buffers: shared hit=138 read=1
                       I/O Timings: read=0.615 write=0.000
                 ->  Append  (cost=0.42..73.98 rows=58 width=61) (actual time=0.603..0.603 rows=1 loops=10)
                       Buffers: shared hit=31 read=9
                       I/O Timings: read=5.917 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260826_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260826 c_60  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_60.id = sub_batch.id) AND (c_60.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260827_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260827 c_61  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_61.id = sub_batch.id) AND (c_61.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260828_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260828 c_62  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_62.id = sub_batch.id) AND (c_62.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260829_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260829 c_63  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_63.id = sub_batch.id) AND (c_63.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260830_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260830 c_64  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_64.id = sub_batch.id) AND (c_64.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260831_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260831 c_65  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_65.id = sub_batch.id) AND (c_65.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260901_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260901 c_66  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_66.id = sub_batch.id) AND (c_66.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260902_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260902 c_67  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_67.id = sub_batch.id) AND (c_67.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260903_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260903 c_68  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_68.id = sub_batch.id) AND (c_68.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260904_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260904 c_69  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_69.id = sub_batch.id) AND (c_69.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260905_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260905 c_70  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_70.id = sub_batch.id) AND (c_70.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260906_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260906 c_71  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_71.id = sub_batch.id) AND (c_71.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260907_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260907 c_72  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_72.id = sub_batch.id) AND (c_72.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260908_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260908 c_73  (cost=0.43..3.45 rows=1 width=61) (never executed)
                             Index Cond: ((c_73.id = sub_batch.id) AND (c_73.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260909_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260909 c_74  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_74.id = sub_batch.id) AND (c_74.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260910_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260910 c_75  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_75.id = sub_batch.id) AND (c_75.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260911_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260911 c_76  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_76.id = sub_batch.id) AND (c_76.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260912_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260912 c_77  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_77.id = sub_batch.id) AND (c_77.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260913_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260913 c_78  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_78.id = sub_batch.id) AND (c_78.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260914_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260914 c_79  (cost=0.42..3.44 rows=1 width=61) (actual time=0.600..0.600 rows=1 loops=10)
                             Index Cond: ((c_79.id = sub_batch.id) AND (c_79.created_at = sub_batch.created_at))
                             Buffers: shared hit=31 read=9
                             I/O Timings: read=5.917 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20260915_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260915 c_80  (cost=0.42..3.44 rows=1 width=61) (never executed)
                             Index Cond: ((c_80.id = sub_batch.id) AND (c_80.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260916 c_81  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_81.id = sub_batch.id) AND (c_81.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260917 c_82  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_82.id = sub_batch.id) AND (c_82.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260918 c_83  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_83.id = sub_batch.id) AND (c_83.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260919 c_84  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_84.id = sub_batch.id) AND (c_84.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260920 c_85  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_85.id = sub_batch.id) AND (c_85.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260921 c_86  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_86.id = sub_batch.id) AND (c_86.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260922 c_87  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_87.id = sub_batch.id) AND (c_87.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260923 c_88  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_88.id = sub_batch.id) AND (c_88.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260924 c_89  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_89.id = sub_batch.id) AND (c_89.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260925 c_90  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_90.id = sub_batch.id) AND (c_90.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260926 c_91  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_91.id = sub_batch.id) AND (c_91.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260927 c_92  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_92.id = sub_batch.id) AND (c_92.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260928 c_93  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_93.id = sub_batch.id) AND (c_93.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260929 c_94  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_94.id = sub_batch.id) AND (c_94.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260930 c_95  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_95.id = sub_batch.id) AND (c_95.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261001 c_96  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_96.id = sub_batch.id) AND (c_96.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261002 c_97  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_97.id = sub_batch.id) AND (c_97.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261003 c_98  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_98.id = sub_batch.id) AND (c_98.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261004 c_99  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_99.id = sub_batch.id) AND (c_99.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261005 c_100  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_100.id = sub_batch.id) AND (c_100.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261006 c_101  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_101.id = sub_batch.id) AND (c_101.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261007 c_102  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_102.id = sub_batch.id) AND (c_102.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261008 c_103  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_103.id = sub_batch.id) AND (c_103.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261009 c_104  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_104.id = sub_batch.id) AND (c_104.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261010 c_105  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_105.id = sub_batch.id) AND (c_105.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261011 c_106  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_106.id = sub_batch.id) AND (c_106.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261012 c_107  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_107.id = sub_batch.id) AND (c_107.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261013 c_108  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_108.id = sub_batch.id) AND (c_108.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261014 c_109  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_109.id = sub_batch.id) AND (c_109.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261015 c_110  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_110.id = sub_batch.id) AND (c_110.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261016 c_111  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_111.id = sub_batch.id) AND (c_111.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261017 c_112  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_112.id = sub_batch.id) AND (c_112.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261018 c_113  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_113.id = sub_batch.id) AND (c_113.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261019 c_114  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_114.id = sub_batch.id) AND (c_114.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261020 c_115  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_115.id = sub_batch.id) AND (c_115.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261021 c_116  (cost=0.00..0.00 rows=1 width=56) (never executed)
                             Filter: ((c_116.id = sub_batch.id) AND (c_116.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
                       ->  Index Scan using p_duo_workflows_checkpoints_20261022_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261022 c_117  (cost=0.15..1.37 rows=1 width=56) (never executed)
                             Index Cond: ((c_117.id = sub_batch.id) AND (c_117.created_at = sub_batch.created_at))
                             I/O Timings: read=0.000 write=0.000
           ->  Index Scan using duo_workflows_workflows_pkey on public.duo_workflows_workflows w  (cost=0.43..0.50 rows=1 width=16) (actual time=2.251..2.251 rows=1 loops=10)
                 Index Cond: (w.id = c_59.workflow_id)
                 Filter: (w.created_at >= '2026-08-26 00:00:00+00'::timestamp with time zone)
                 Buffers: shared hit=22 read=18 dirtied=2
                 WAL: records=2 fpi=2 bytes=15546
                 I/O Timings: read=22.329 write=0.000
   ->  Nested Loop Anti Join  (cost=0.85..187.27 rows=1 width=270) (actual time=52.730..52.738 rows=0 loops=1)
         Buffers: shared hit=249 read=50 dirtied=2
         WAL: records=2 fpi=2 bytes=15546
         I/O Timings: read=51.385 write=0.000
         ->  Nested Loop  (cost=0.42..76.38 rows=1 width=310) (actual time=8.121..29.966 rows=10 loops=1)
               Buffers: shared hit=231 read=28 dirtied=2
               WAL: records=2 fpi=2 bytes=15546
               I/O Timings: read=28.862 write=0.000
               ->  CTE Scan on candidates  (cost=0.00..0.02 rows=1 width=64) (actual time=8.086..29.786 rows=10 loops=1)
                     Buffers: shared hit=191 read=28 dirtied=2
                     WAL: records=2 fpi=2 bytes=15546
                     I/O Timings: read=28.862 write=0.000
               ->  Append  (cost=0.42..75.78 rows=58 width=262) (actual time=0.009..0.009 rows=1 loops=10)
                     Buffers: shared hit=40
                     I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260826_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260826 c_1  (cost=0.42..3.44 rows=1 width=267) (never executed)
                           Index Cond: ((c_1.id = candidates.id) AND (c_1.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260827_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260827 c_2  (cost=0.42..3.44 rows=1 width=265) (never executed)
                           Index Cond: ((c_2.id = candidates.id) AND (c_2.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260828_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260828 c_3  (cost=0.42..3.44 rows=1 width=263) (never executed)
                           Index Cond: ((c_3.id = candidates.id) AND (c_3.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260829_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260829 c_4  (cost=0.42..3.44 rows=1 width=276) (never executed)
                           Index Cond: ((c_4.id = candidates.id) AND (c_4.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260830_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260830 c_5  (cost=0.42..3.44 rows=1 width=259) (never executed)
                           Index Cond: ((c_5.id = candidates.id) AND (c_5.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260831_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260831 c_6  (cost=0.42..3.44 rows=1 width=261) (never executed)
                           Index Cond: ((c_6.id = candidates.id) AND (c_6.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260901_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260901 c_7  (cost=0.42..3.44 rows=1 width=269) (never executed)
                           Index Cond: ((c_7.id = candidates.id) AND (c_7.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260902_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260902 c_8  (cost=0.42..3.44 rows=1 width=267) (never executed)
                           Index Cond: ((c_8.id = candidates.id) AND (c_8.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260903_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260903 c_9  (cost=0.42..3.44 rows=1 width=267) (never executed)
                           Index Cond: ((c_9.id = candidates.id) AND (c_9.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260904_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260904 c_10  (cost=0.42..3.44 rows=1 width=265) (never executed)
                           Index Cond: ((c_10.id = candidates.id) AND (c_10.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260905_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260905 c_11  (cost=0.42..3.44 rows=1 width=252) (never executed)
                           Index Cond: ((c_11.id = candidates.id) AND (c_11.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260906_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260906 c_12  (cost=0.42..3.44 rows=1 width=251) (never executed)
                           Index Cond: ((c_12.id = candidates.id) AND (c_12.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260907_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260907 c_13  (cost=0.42..3.44 rows=1 width=262) (never executed)
                           Index Cond: ((c_13.id = candidates.id) AND (c_13.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260908_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260908 c_14  (cost=0.43..3.45 rows=1 width=257) (never executed)
                           Index Cond: ((c_14.id = candidates.id) AND (c_14.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260909_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260909 c_15  (cost=0.42..3.44 rows=1 width=264) (never executed)
                           Index Cond: ((c_15.id = candidates.id) AND (c_15.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260910_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260910 c_16  (cost=0.42..3.44 rows=1 width=269) (never executed)
                           Index Cond: ((c_16.id = candidates.id) AND (c_16.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260911_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260911 c_17  (cost=0.42..3.44 rows=1 width=262) (never executed)
                           Index Cond: ((c_17.id = candidates.id) AND (c_17.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260912_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260912 c_18  (cost=0.42..3.44 rows=1 width=253) (never executed)
                           Index Cond: ((c_18.id = candidates.id) AND (c_18.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260913_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260913 c_19  (cost=0.42..3.44 rows=1 width=248) (never executed)
                           Index Cond: ((c_19.id = candidates.id) AND (c_19.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260914_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260914 c_20  (cost=0.42..3.44 rows=1 width=260) (actual time=0.006..0.006 rows=1 loops=10)
                           Index Cond: ((c_20.id = candidates.id) AND (c_20.created_at = candidates.created_at))
                           Buffers: shared hit=40
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20260915_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260915 c_21  (cost=0.42..3.44 rows=1 width=255) (never executed)
                           Index Cond: ((c_21.id = candidates.id) AND (c_21.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260916 c_22  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_22.id = candidates.id) AND (c_22.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260917 c_23  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_23.id = candidates.id) AND (c_23.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260918 c_24  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_24.id = candidates.id) AND (c_24.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260919 c_25  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_25.id = candidates.id) AND (c_25.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260920 c_26  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_26.id = candidates.id) AND (c_26.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260921 c_27  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_27.id = candidates.id) AND (c_27.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260922 c_28  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_28.id = candidates.id) AND (c_28.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260923 c_29  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_29.id = candidates.id) AND (c_29.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260924 c_30  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_30.id = candidates.id) AND (c_30.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260925 c_31  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_31.id = candidates.id) AND (c_31.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260926 c_32  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_32.id = candidates.id) AND (c_32.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260927 c_33  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_33.id = candidates.id) AND (c_33.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260928 c_34  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_34.id = candidates.id) AND (c_34.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260929 c_35  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_35.id = candidates.id) AND (c_35.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20260930 c_36  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_36.id = candidates.id) AND (c_36.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261001 c_37  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_37.id = candidates.id) AND (c_37.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261002 c_38  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_38.id = candidates.id) AND (c_38.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261003 c_39  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_39.id = candidates.id) AND (c_39.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261004 c_40  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_40.id = candidates.id) AND (c_40.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261005 c_41  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_41.id = candidates.id) AND (c_41.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261006 c_42  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_42.id = candidates.id) AND (c_42.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261007 c_43  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_43.id = candidates.id) AND (c_43.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261008 c_44  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_44.id = candidates.id) AND (c_44.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261009 c_45  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_45.id = candidates.id) AND (c_45.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261010 c_46  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_46.id = candidates.id) AND (c_46.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261011 c_47  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_47.id = candidates.id) AND (c_47.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261012 c_48  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_48.id = candidates.id) AND (c_48.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261013 c_49  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_49.id = candidates.id) AND (c_49.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261014 c_50  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_50.id = candidates.id) AND (c_50.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261015 c_51  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_51.id = candidates.id) AND (c_51.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261016 c_52  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_52.id = candidates.id) AND (c_52.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261017 c_53  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_53.id = candidates.id) AND (c_53.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261018 c_54  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_54.id = candidates.id) AND (c_54.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261019 c_55  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_55.id = candidates.id) AND (c_55.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261020 c_56  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_56.id = candidates.id) AND (c_56.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261021 c_57  (cost=0.00..0.00 rows=1 width=212) (never executed)
                           Filter: ((c_57.id = candidates.id) AND (c_57.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
                     ->  Index Scan using p_duo_workflows_checkpoints_20261022_pkey on gitlab_partitions_dynamic.p_duo_workflows_checkpoints_20261022 c_58  (cost=0.15..3.17 rows=1 width=212) (never executed)
                           Index Cond: ((c_58.id = candidates.id) AND (c_58.created_at = candidates.created_at))
                           I/O Timings: read=0.000 write=0.000
         ->  Append  (cost=0.42..110.31 rows=58 width=53) (actual time=2.271..2.271 rows=1 loops=10)
               Buffers: shared hit=18 read=22
               I/O Timings: read=22.523 write=0.000
               ->  Index Scan using index_fed41beb64 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260826 h_1  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_1.workflow_id = candidates.workflow_id) AND (h_1.thread_ts = candidates.thread_ts))
                     Filter: (h_1.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_5837c94165 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260827 h_2  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_2.workflow_id = candidates.workflow_id) AND (h_2.thread_ts = candidates.thread_ts))
                     Filter: (h_2.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_39ea11ef73 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260828 h_3  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_3.workflow_id = candidates.workflow_id) AND (h_3.thread_ts = candidates.thread_ts))
                     Filter: (h_3.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_274dcbf43c on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260829 h_4  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_4.workflow_id = candidates.workflow_id) AND (h_4.thread_ts = candidates.thread_ts))
                     Filter: (h_4.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_013d47016b on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260830 h_5  (cost=0.42..3.44 rows=1 width=53) (never executed)
                     Index Cond: ((h_5.workflow_id = candidates.workflow_id) AND (h_5.thread_ts = candidates.thread_ts))
                     Filter: (h_5.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_9fc2a66293 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260831 h_6  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_6.workflow_id = candidates.workflow_id) AND (h_6.thread_ts = candidates.thread_ts))
                     Filter: (h_6.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_b8ef6e7d36 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260901 h_7  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_7.workflow_id = candidates.workflow_id) AND (h_7.thread_ts = candidates.thread_ts))
                     Filter: (h_7.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_31be8eb4ef on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260902 h_8  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_8.workflow_id = candidates.workflow_id) AND (h_8.thread_ts = candidates.thread_ts))
                     Filter: (h_8.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_b2bbf4a596 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260903 h_9  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_9.workflow_id = candidates.workflow_id) AND (h_9.thread_ts = candidates.thread_ts))
                     Filter: (h_9.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_c22009fcfe on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260904 h_10  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_10.workflow_id = candidates.workflow_id) AND (h_10.thread_ts = candidates.thread_ts))
                     Filter: (h_10.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_6034796d4c on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260905 h_11  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_11.workflow_id = candidates.workflow_id) AND (h_11.thread_ts = candidates.thread_ts))
                     Filter: (h_11.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_9955e59e78 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260906 h_12  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_12.workflow_id = candidates.workflow_id) AND (h_12.thread_ts = candidates.thread_ts))
                     Filter: (h_12.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_b07ceb7a2f on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260907 h_13  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_13.workflow_id = candidates.workflow_id) AND (h_13.thread_ts = candidates.thread_ts))
                     Filter: (h_13.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_4cdfc82c03 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260908 h_14  (cost=0.43..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_14.workflow_id = candidates.workflow_id) AND (h_14.thread_ts = candidates.thread_ts))
                     Filter: (h_14.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_2fcca9c0f9 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260909 h_15  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_15.workflow_id = candidates.workflow_id) AND (h_15.thread_ts = candidates.thread_ts))
                     Filter: (h_15.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_d441a1e16b on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260910 h_16  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_16.workflow_id = candidates.workflow_id) AND (h_16.thread_ts = candidates.thread_ts))
                     Filter: (h_16.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_994ecd13ea on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260911 h_17  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_17.workflow_id = candidates.workflow_id) AND (h_17.thread_ts = candidates.thread_ts))
                     Filter: (h_17.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_341ebc8440 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260912 h_18  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_18.workflow_id = candidates.workflow_id) AND (h_18.thread_ts = candidates.thread_ts))
                     Filter: (h_18.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using index_8cf639af5e on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260913 h_19  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_19.workflow_id = candidates.workflow_id) AND (h_19.thread_ts = candidates.thread_ts))
                     Filter: (h_19.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using p_duo_workflows_checkpoint_headers_workflow_id_thread_ts_id_idx on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260914 h_20  (cost=0.42..3.45 rows=1 width=53) (actual time=2.269..2.269 rows=1 loops=10)
                     Index Cond: ((h_20.workflow_id = candidates.workflow_id) AND (h_20.thread_ts = candidates.thread_ts))
                     Filter: (h_20.workflow_created_at = candidates.workflow_created_at)
                     Buffers: shared hit=18 read=22
                     I/O Timings: read=22.523 write=0.000
               ->  Index Scan using p_duo_workflows_checkpoint_header_workflow_id_thread_ts_id_idx1 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260915 h_21  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_21.workflow_id = candidates.workflow_id) AND (h_21.thread_ts = candidates.thread_ts))
                     Filter: (h_21.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using p_duo_workflows_checkpoint_header_workflow_id_thread_ts_id_idx2 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260916 h_22  (cost=0.43..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_22.workflow_id = candidates.workflow_id) AND (h_22.thread_ts = candidates.thread_ts))
                     Filter: (h_22.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using p_duo_workflows_checkpoint_header_workflow_id_thread_ts_id_idx3 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260917 h_23  (cost=0.43..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_23.workflow_id = candidates.workflow_id) AND (h_23.thread_ts = candidates.thread_ts))
                     Filter: (h_23.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using p_duo_workflows_checkpoint_header_workflow_id_thread_ts_id_idx4 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260918 h_24  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_24.workflow_id = candidates.workflow_id) AND (h_24.thread_ts = candidates.thread_ts))
                     Filter: (h_24.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using p_duo_workflows_checkpoint_header_workflow_id_thread_ts_id_idx5 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260919 h_25  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_25.workflow_id = candidates.workflow_id) AND (h_25.thread_ts = candidates.thread_ts))
                     Filter: (h_25.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using p_duo_workflows_checkpoint_header_workflow_id_thread_ts_id_idx6 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260920 h_26  (cost=0.42..3.44 rows=1 width=53) (never executed)
                     Index Cond: ((h_26.workflow_id = candidates.workflow_id) AND (h_26.thread_ts = candidates.thread_ts))
                     Filter: (h_26.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using p_duo_workflows_checkpoint_header_workflow_id_thread_ts_id_idx7 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260921 h_27  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_27.workflow_id = candidates.workflow_id) AND (h_27.thread_ts = candidates.thread_ts))
                     Filter: (h_27.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using p_duo_workflows_checkpoint_header_workflow_id_thread_ts_id_idx8 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260922 h_28  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_28.workflow_id = candidates.workflow_id) AND (h_28.thread_ts = candidates.thread_ts))
                     Filter: (h_28.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using p_duo_workflows_checkpoint_header_workflow_id_thread_ts_id_idx9 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260923 h_29  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_29.workflow_id = candidates.workflow_id) AND (h_29.thread_ts = candidates.thread_ts))
                     Filter: (h_29.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using p_duo_workflows_checkpoint_heade_workflow_id_thread_ts_id_idx10 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260924 h_30  (cost=0.42..3.45 rows=1 width=53) (never executed)
                     Index Cond: ((h_30.workflow_id = candidates.workflow_id) AND (h_30.thread_ts = candidates.thread_ts))
                     Filter: (h_30.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using p_duo_workflows_checkpoint_heade_workflow_id_thread_ts_id_idx11 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260925 h_31  (cost=0.41..3.44 rows=1 width=53) (never executed)
                     Index Cond: ((h_31.workflow_id = candidates.workflow_id) AND (h_31.thread_ts = candidates.thread_ts))
                     Filter: (h_31.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260926 h_32  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_32.workflow_id = candidates.workflow_id) AND (h_32.thread_ts = candidates.thread_ts) AND (h_32.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260927 h_33  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_33.workflow_id = candidates.workflow_id) AND (h_33.thread_ts = candidates.thread_ts) AND (h_33.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260928 h_34  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_34.workflow_id = candidates.workflow_id) AND (h_34.thread_ts = candidates.thread_ts) AND (h_34.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260929 h_35  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_35.workflow_id = candidates.workflow_id) AND (h_35.thread_ts = candidates.thread_ts) AND (h_35.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20260930 h_36  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_36.workflow_id = candidates.workflow_id) AND (h_36.thread_ts = candidates.thread_ts) AND (h_36.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261001 h_37  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_37.workflow_id = candidates.workflow_id) AND (h_37.thread_ts = candidates.thread_ts) AND (h_37.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261002 h_38  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_38.workflow_id = candidates.workflow_id) AND (h_38.thread_ts = candidates.thread_ts) AND (h_38.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261003 h_39  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_39.workflow_id = candidates.workflow_id) AND (h_39.thread_ts = candidates.thread_ts) AND (h_39.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261004 h_40  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_40.workflow_id = candidates.workflow_id) AND (h_40.thread_ts = candidates.thread_ts) AND (h_40.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261005 h_41  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_41.workflow_id = candidates.workflow_id) AND (h_41.thread_ts = candidates.thread_ts) AND (h_41.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261006 h_42  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_42.workflow_id = candidates.workflow_id) AND (h_42.thread_ts = candidates.thread_ts) AND (h_42.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261007 h_43  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_43.workflow_id = candidates.workflow_id) AND (h_43.thread_ts = candidates.thread_ts) AND (h_43.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261008 h_44  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_44.workflow_id = candidates.workflow_id) AND (h_44.thread_ts = candidates.thread_ts) AND (h_44.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261009 h_45  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_45.workflow_id = candidates.workflow_id) AND (h_45.thread_ts = candidates.thread_ts) AND (h_45.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261010 h_46  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_46.workflow_id = candidates.workflow_id) AND (h_46.thread_ts = candidates.thread_ts) AND (h_46.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261011 h_47  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_47.workflow_id = candidates.workflow_id) AND (h_47.thread_ts = candidates.thread_ts) AND (h_47.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261012 h_48  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_48.workflow_id = candidates.workflow_id) AND (h_48.thread_ts = candidates.thread_ts) AND (h_48.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261013 h_49  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_49.workflow_id = candidates.workflow_id) AND (h_49.thread_ts = candidates.thread_ts) AND (h_49.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261014 h_50  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_50.workflow_id = candidates.workflow_id) AND (h_50.thread_ts = candidates.thread_ts) AND (h_50.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261015 h_51  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_51.workflow_id = candidates.workflow_id) AND (h_51.thread_ts = candidates.thread_ts) AND (h_51.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261016 h_52  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_52.workflow_id = candidates.workflow_id) AND (h_52.thread_ts = candidates.thread_ts) AND (h_52.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261017 h_53  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_53.workflow_id = candidates.workflow_id) AND (h_53.thread_ts = candidates.thread_ts) AND (h_53.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261018 h_54  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_54.workflow_id = candidates.workflow_id) AND (h_54.thread_ts = candidates.thread_ts) AND (h_54.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261019 h_55  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_55.workflow_id = candidates.workflow_id) AND (h_55.thread_ts = candidates.thread_ts) AND (h_55.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261020 h_56  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_56.workflow_id = candidates.workflow_id) AND (h_56.thread_ts = candidates.thread_ts) AND (h_56.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Seq Scan on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261021 h_57  (cost=0.00..0.00 rows=1 width=48) (never executed)
                     Filter: ((h_57.workflow_id = candidates.workflow_id) AND (h_57.thread_ts = candidates.thread_ts) AND (h_57.workflow_created_at = candidates.workflow_created_at))
                     I/O Timings: read=0.000 write=0.000
               ->  Index Scan using p_duo_workflows_checkpoint_heade_workflow_id_thread_ts_id_idx38 on gitlab_partitions_dynamic.p_duo_workflows_checkpoint_headers_20261022 h_58  (cost=0.15..3.17 rows=1 width=48) (never executed)
                     Index Cond: ((h_58.workflow_id = candidates.workflow_id) AND (h_58.thread_ts = candidates.thread_ts))
                     Filter: (h_58.workflow_created_at = candidates.workflow_created_at)
                     I/O Timings: read=0.000 write=0.000
Settings: work_mem = '230MB', jit = 'off', random_page_cost = '1.5', seq_page_cost = '4', effective_cache_size = '472585MB'
Query ID: -4094959447696475273


stats:

Time: 97.184 ms
  - planning: 42.196 ms
  - execution: 54.988 ms
    - I/O read: 51.385 ms
    - I/O write: 0.000 ms

Shared buffers:
  - hits: 249 (~1.90 MiB) from the buffer pool
  - reads: 50 (~400.00 KiB) from the OS file cache, including disk I/O
  - dirtied: 2 (~16.00 KiB)
  - writes: 0

The inserts are plain INSERT ... VALUES of at most 10 header rows and their blobs per sub-batch, with ON CONFLICT DO NOTHING on idx_duo_wf_checkpoint_blobs_dedup for blobs. No plan is attached for them.

Legacy checkpoint size on GitLab.com (Database Lab, block sample of the 2026-09-14 partition): stored pg_column_size p50 62 KB, p99 1.04 MB, max 2.4 MB; raw JSON p50 180 KB, p99 2.4 MB, max 6 MB. That is why the sub-batch is 10 rows.

The db:gitlabcom-database-testing pipeline is triggered on this MR for a duration estimate. The legacy table is about 1 TB on GitLab.com.

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Eduardo Bonet

Merge request reports

Loading
Loading