Blog

Technical guides on PostgreSQL migrations, locking behavior, and zero-downtime schema changes.

12 min read

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.

10 min read

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.

11 min read

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.

14 min read

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.

11 min read

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.

10 min read

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.

9 min read

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+.

13 min read

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.