Large-Table ALTER Strategies: Changing Schema Without Locking Production
How to add columns, change types, and backfill huge tables without long locks: native online DDL per dialect, expand/contract, batched backfills, and gh-ost.
How to add columns, change types, and backfill huge tables without long locks: native online DDL per dialect, expand/contract, batched backfills, and gh-ost.
How PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, and SQLite differ on stored vs. virtual generated columns, and what breaks when you migrate them.
How PostgreSQL, MySQL, SQL Server, and Oracle differ in partition syntax, key constraints, and what breaks when you migrate a partitioned table.
Comparing integer and UUID primary keys: storage size, B-tree index locality, UUIDv4 vs v7, and the pattern of using an integer key with a UUID alias.
Practical database indexing strategies: composite index column order, covering indexes, write cost trade-offs, index bloat, and reviewing indexes as schemas evolve.
How to automate database schema checks in CI/CD — compare environments, fail on drift, and generate migrations from the command line.
How caching layers shield your database from repeat load, the difference between cache-aside and read-through, and why invalidation strategy matters most.
A guide to SQL isolation levels — Read Committed, Repeatable Read, Snapshot, and Serializable — covering trade-offs, write skew, and when to use each.
How to migrate a PostgreSQL schema to Amazon Redshift: data type mapping, unenforced constraints, distribution/sort keys, and in-place ALTER limits.
MySQL and MariaDB share a wire protocol but diverge on JSON types, sequences, generated columns, and CHECK constraint enforcement. Here's what breaks.