Queries that were fast last year
A statement that ran in 40 ms now takes four seconds and the table has only doubled. We pull pg_stat_statements, sort by total time, and read the real plans — that usually names the cause inside a day.
PostgreSQL performance consulting is diagnostic work: we read pg_stat_statements, run EXPLAIN (ANALYZE, BUFFERS) against the queries that actually cost you time, then fix them — indexes, schema, pooling, server configuration. You get the query plans before and after, not a slide deck. The engineer who runs the analysis is the one who ships the fix.
A statement that ran in 40 ms now takes four seconds and the table has only doubled. We pull pg_stat_statements, sort by total time, and read the real plans — that usually names the cause inside a day.
An endpoint issues 300 small queries instead of one join, and no index will save it. We profile the request path, rewrite the offending access patterns, and add the indexes the new plan actually needs.
Every app instance opens its own pool, Postgres hits max_connections, and sessions sitting idle in transaction hold locks for minutes. We put pgBouncer in front, size the pools, and bound transaction lifetime.
MySQL, Oracle or SQL Server to PostgreSQL: type mapping, stored procedure rewrites, historical data transfer, then a cutover through logical replication measured in minutes rather than a lost weekend.
Month-end reporting competes with customer traffic on the same instance. We move it to a read replica, or to ClickHouse or BigQuery when replicas stop being enough, and keep the OLTP schema lean.
A nightly dump on the same host is not a backup. We set up pgBackRest or WAL-G with point-in-time recovery, off-host storage and a restore drill, so you know your real recovery time before you need it.
Thirty minutes: symptoms, PostgreSQL version, database size, where it runs, managed or self-hosted. You leave with a hypothesis about the cause and an honest estimate. No charge, no obligation.
We sign an NDA before anything is shared. An anonymised dump or a read-only replica is enough for the audit; production access, if implementation needs it later, is per approved task with every command logged.
pg_stat_statements for the top consumers, EXPLAIN (ANALYZE, BUFFERS) on each of them, then unused and missing indexes, lock contention, autovacuum behaviour, table bloat, and configuration against your actual hardware.
A prioritised list: what we fix without touching your code, what needs an application change, what needs a schema change. Each item carries the measured plan before and the measured time after.
Indexes built CONCURRENTLY, schema changes shipped as backwards-compatible versioned migrations with a rollback path, heavy queries rewritten alongside your developers. Production keeps serving throughout.
We re-run the same workload, then hand over the migrations, the written rationale for each change, and a monitoring dashboard with alerts. One month of warranty on everything we shipped.
Most of this work is PostgreSQL and the tooling immediately around it. We reach for ClickHouse or BigQuery only when analytics genuinely outgrows a read replica, and we will tell you that rather than sell you a second database to operate.
Roughly 20 hours at $30/hour: statistics collection, the top 20 queries by total time read plan by plan, index coverage, lock and autovacuum analysis, configuration and backup review. Delivered in 3–5 working days with before/after measurements.
The audit plus the actual fixes: indexes, rewritten queries, partitioning for large tables, pgBouncer, server tuning, verified measurements. What moves the number is database size, how many query paths are broken, and whether application code has to change.
A schema designed from scratch for a new product, or a move from MySQL, Oracle or SQL Server to PostgreSQL: type mapping, data transfer, logical replication, cutover, replication and backups on the new setup. Priced on table count and how much logic lives in the database.
Prices are indicative and do not constitute a public offer. The final cost, scope and timeline are fixed in a contract or invoice after we have discussed the task.
The KMD CRM was built from an empty database: we designed the schema, and it has since gone through 89 migrations while serving 12+ modules. Access control lives in the data model — 9 roles against 87 permissions — instead of being scattered through application code. It is the same design work we do when a team asks for a schema rebuilt for scale.
Read the KMD caseSend the symptoms, your PostgreSQL version and roughly how large the database is. You get a reply within 2 hours during business hours, and the scoping call is free.
Discuss your task