ENGINEERING

Merge-request preflight EXPLAIN regression gate

On every merge request, runs EXPLAIN ANALYZE for the queries it touches against a production-like replica, compares estimated cost and rows to the base branch.

CategoryEngineering
Enginesim
Difficultyadvanced
Triggerwebhook
Steps4
Setup~25 min

How it runs

The automated pipeline, trigger to output.

  • TriggerGitLab merge-request open/update webhookGitLabGitLab
  • ActionRun EXPLAIN ANALYZE on replica for both branchesPostgreSQLPostgres
  • LogicDiff cost/rows/scan type and apply regression threshold
  • OutputComment pass/fail verdict on the merge requestGitLabGitLab

What it does

When a merge request opens or updates, this workflow detects the SQL it changes, runs EXPLAIN ANALYZE for each touched query against a production-like Postgres replica on both the MR branch and the base branch, and diffs planner cost, estimated rows, and scan types. If a query regresses to a sequential scan or its cost balloons past threshold, the workflow posts a blocking comment on the MR; otherwise it posts a green preflight note. The goal is to catch the regression before it ships, not after.

When to use it

Use this as a guardrail on repos where query performance regressions are expensive to roll back. It shifts slow-query detection left into code review so reviewers see a concrete plan diff next to the diff itself.

How it works

  1. 1GitLab merge-request webhook fires on open or update.
  2. 2Run EXPLAIN ANALYZE for touched queries on the replica for both branches.
  3. 3Diff cost, estimated rows, and scan type between branches.
  4. 4Branch on whether any query breaches the regression threshold.
  5. 5Comment a blocking fail or a green pass back on the merge request.

Set it up

What you configure once, before turning it on.

  1. 1
    Connect GitLabRepos, MRs, pipelines, registry.
  2. 2
    Connect PostgresAny Postgres URL — query, write, migrate.
  3. 3
    Set each agent's modelWe leave models unset so you pick the tier — fast + cheap, or top-quality.
  4. 4
    Tune it to your dataEdit the prompts, filters, and field mappings so it matches how your team works.
  5. 5
    Test, then turn it onRun once against a sample, confirm the output, then enable the trigger.

Run this workflow in your colony.

14-day trial. No DevOps. No Sales call. Provisioned in under a minute.