Blog
Technical guides on PostgreSQL migrations, locking behavior, and zero-downtime schema changes.
The Complete Guide to PostgreSQL Lock Types for Schema Changes
Understand every PostgreSQL lock level from ACCESS SHARE to ACCESS EXCLUSIVE, which DDL statements acquire which locks, and how they impact your running application.
How to Safely Add a Column with a Default Value in PostgreSQL
Learn when adding a column with a DEFAULT value rewrites the entire table, what changed in PostgreSQL 11, and the safe patterns for every scenario.
CREATE INDEX CONCURRENTLY: The Complete PostgreSQL Guide
Everything you need to know about CREATE INDEX CONCURRENTLY in PostgreSQL: why it matters, failure modes, retry patterns, and REINDEX CONCURRENTLY.
PostgreSQL Migration Best Practices for Zero-Downtime Deployments
A practical guide to running PostgreSQL schema migrations safely in production: lock_timeout, batched backfills, expand-contract, and CI integration.
Which ALTER TABLE Operations Lock Your PostgreSQL Table?
A complete reference of which ALTER TABLE operations acquire ACCESS EXCLUSIVE locks, which are safe, and the workarounds for every dangerous operation.
How to Add Database Migration Checks to Your CI/CD Pipeline
Set up automated database migration linting in GitHub Actions, GitLab CI, and other CI/CD systems to catch dangerous schema changes before they reach production.
Adding NOT NULL Constraints to Existing PostgreSQL Columns Safely
The CHECK constraint NOT VALID + VALIDATE pattern for adding NOT NULL without locking your table. Includes version-specific advice for PG 11 and below vs PG 12+.
Flyway vs Liquibase for PostgreSQL: An Honest Comparison
A practical comparison of Flyway and Liquibase for PostgreSQL migrations: features, syntax, rollbacks, team workflows, and where each tool falls short.