SQLite rename-and-swap migration: bounding the final exclusive lock for a small application
Context A small application runs on SQLite 3.45 in WAL mode with a few tables under 100 MB each. The team wants to change a column type and add a NOT NULL constraint — operations that require a full table rewrite. The documented pattern is to create a new table, copy rows in batches, install triggers to mirror writes, then rename the old table away and the n