database
PostgreSQL
Our default relational database — row-level security, real constraints, no surprises.
How we use it
PostgreSQL is our default relational database for new product builds and most cloud migrations. Real constraints, real transactions, and row-level security as the access-control layer — not a NoSQL default reached for out of habit.
What we use it for
- Managed Postgres — RDS, Cloud SQL, or Azure Database, depending on the cloud
- Row-level security — access control enforced in the database, not just the application layer
- Read replicas — for reporting workloads that would otherwise slow down writes
- Full-text search and JSONB — covers a lot of ground before a separate search service is justified
Typical patterns
- Migrations in version control — schema changes reviewed like application code
- Automated backups — with a tested restore path, not just a checkbox
- Connection pooling — PgBouncer or the managed equivalent under load
Our standards
Every schema change goes through a migration file, reviewed in the same PR as the code that depends on it. Backups are tested, not assumed to work.
Related services
- Full-Stack Development — relational data modelled correctly from day one
- Cloud Migration — managed Postgres (RDS, Cloud SQL) over self-hosted
Using PostgreSQL in production?
Tell us what you run today. We will say whether PostgreSQL fits, what we would change, and what it would take — no deck.