Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Checks

diesel-guard ships with 24 built-in safety checks covering the most common Postgres migration hazards.

CheckOperationLock Type
ADD COLUMN with DEFAULTALTER TABLE ... ADD COLUMN ... DEFAULTACCESS EXCLUSIVE + table rewrite
Adding an IndexCREATE INDEX without CONCURRENTLYSHARE
Adding a UNIQUE ConstraintALTER TABLE ... ADD UNIQUEACCESS EXCLUSIVE
Changing Column TypeALTER TABLE ... ALTER COLUMN ... TYPEACCESS EXCLUSIVE + table rewrite
CHAR FieldsCHAR/CHARACTER column types— (best practice)
Creating an ExtensionCREATE EXTENSION— (requires superuser)
Dropping a ColumnALTER TABLE ... DROP COLUMNACCESS EXCLUSIVE
Dropping a ConstraintUnnamed UNIQUE/FOREIGN KEY/CHECK constraints— (best practice)
Dropping a DatabaseDROP DATABASEExclusive access
Dropping an IndexDROP INDEX without CONCURRENTLYACCESS EXCLUSIVE
Dropping a Primary KeyALTER TABLE ... DROP CONSTRAINT ... pkeyACCESS EXCLUSIVE
Dropping a TableDROP TABLEACCESS EXCLUSIVE
Generated ColumnsADD COLUMN ... GENERATED ALWAYS AS ... STOREDACCESS EXCLUSIVE + table rewrite
JSON FieldsADD COLUMN ... JSON— (best practice)
Wide IndexesCREATE INDEX with 4+ columns— (best practice)
Renaming a ColumnALTER TABLE ... RENAME COLUMNACCESS EXCLUSIVE
Renaming a TableALTER TABLE ... RENAME TOACCESS EXCLUSIVE
REINDEXREINDEX without CONCURRENTLYACCESS EXCLUSIVE
SERIAL Primary KeysADD COLUMN ... SERIAL/BIGSERIALACCESS EXCLUSIVE + table rewrite
SET NOT NULLALTER TABLE ... ALTER COLUMN ... SET NOT NULLACCESS EXCLUSIVE
Short Primary KeysSMALLINT/INT primary keys— (best practice)
TIMESTAMP FieldsTIMESTAMP without time zone— (best practice)
TRUNCATE TABLETRUNCATE TABLEACCESS EXCLUSIVE
Unnamed ConstraintsConstraints without explicit names— (best practice)

Need project-specific rules beyond these? See Custom Checks.