Dropping a Column
Check name: DropColumnCheck
Lock type: ACCESS EXCLUSIVE + table rewrite
Bad
Dropping a column acquires an ACCESS EXCLUSIVE lock and typically triggers a table rewrite. This blocks all operations and can cause errors if application code is still referencing the column.
ALTER TABLE users DROP COLUMN email;
Good
Remove references from application code first, then drop the column in a later migration:
-- Step 1: Mark column as unused in application code
-- Deploy application code changes first
-- Step 2: (Optional) Set to NULL to reclaim space
ALTER TABLE users ALTER COLUMN email DROP NOT NULL;
UPDATE users SET email = NULL;
-- Step 3: Drop in later migration after confirming it's unused
ALTER TABLE users DROP COLUMN email;
Postgres doesn’t support DROP COLUMN CONCURRENTLY, so the table rewrite is unavoidable. Staging the removal minimizes risk by ensuring no running application code depends on the column at the time of the drop.