<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Migrations on Brian Faust</title><link>https://wimdy.works/tags/migrations/</link><description>Recent content in Migrations on Brian Faust</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate><atom:link href="https://wimdy.works/tags/migrations/rss.xml" rel="self" type="application/rss+xml"/><item><title>The Migration Plan Was Solving the Wrong Problem</title><link>https://wimdy.works/thoughts/the-migration-plan-was-solving-the-wrong-problem/</link><pubDate>Sat, 15 Aug 2026 00:00:00 +0000</pubDate><guid>https://wimdy.works/thoughts/the-migration-plan-was-solving-the-wrong-problem/</guid><description>&lt;p&gt;The approved migration plan called for a fresh database schema. I wanted to
keep the existing one. That disagreement wasn&amp;rsquo;t hidden in a difficult Go
implementation; it was written into the planning package before the production
port phase began.&lt;/p&gt;
&lt;p&gt;I had approved that package for planning, not implementation. When I asked
whether the existing migrations and schema would be faithfully replicated,
the answer was no: the documents explicitly described a redesign. The plan
could be internally consistent and still be the wrong plan for this engine.&lt;/p&gt;</description></item><item><title>A Migration Is a Production Change</title><link>https://wimdy.works/thoughts/a-migration-is-a-production-change/</link><pubDate>Wed, 01 Mar 2017 00:00:00 +0000</pubDate><guid>https://wimdy.works/thoughts/a-migration-is-a-production-change/</guid><description>&lt;p&gt;We deployed an additive schema change which the database could execute without
rewriting the table. On paper it was cheap. In production it waited
indefinitely.&lt;/p&gt;
&lt;p&gt;The statement needed an exclusive table lock. A long-running session already
held a conflicting lock, so the migration queued. New application traffic then
queued behind the migration. The column addition was cheap after lock
acquisition; waiting to begin was the incident.&lt;/p&gt;
&lt;p&gt;Another schema change looked cheap for the opposite reason: remove fields and
tables which the application no longer read. The SQL was small, but the
decision would erase financial history from data sets measured in tens of
gigabytes. Neither change could be judged by reading the migration method
alone.&lt;/p&gt;</description></item></channel></rss>