Checks
diesel-guard ships with 24 built-in safety checks covering the most common Postgres migration hazards.
| Check | Operation | Lock Type |
|---|---|---|
| ADD COLUMN with DEFAULT | ALTER TABLE ... ADD COLUMN ... DEFAULT | ACCESS EXCLUSIVE + table rewrite |
| Adding an Index | CREATE INDEX without CONCURRENTLY | SHARE |
| Adding a UNIQUE Constraint | ALTER TABLE ... ADD UNIQUE | ACCESS EXCLUSIVE |
| Changing Column Type | ALTER TABLE ... ALTER COLUMN ... TYPE | ACCESS EXCLUSIVE + table rewrite |
| CHAR Fields | CHAR/CHARACTER column types | — (best practice) |
| Creating an Extension | CREATE EXTENSION | — (requires superuser) |
| Dropping a Column | ALTER TABLE ... DROP COLUMN | ACCESS EXCLUSIVE |
| Dropping a Constraint | Unnamed UNIQUE/FOREIGN KEY/CHECK constraints | — (best practice) |
| Dropping a Database | DROP DATABASE | Exclusive access |
| Dropping an Index | DROP INDEX without CONCURRENTLY | ACCESS EXCLUSIVE |
| Dropping a Primary Key | ALTER TABLE ... DROP CONSTRAINT ... pkey | ACCESS EXCLUSIVE |
| Dropping a Table | DROP TABLE | ACCESS EXCLUSIVE |
| Generated Columns | ADD COLUMN ... GENERATED ALWAYS AS ... STORED | ACCESS EXCLUSIVE + table rewrite |
| JSON Fields | ADD COLUMN ... JSON | — (best practice) |
| Wide Indexes | CREATE INDEX with 4+ columns | — (best practice) |
| Renaming a Column | ALTER TABLE ... RENAME COLUMN | ACCESS EXCLUSIVE |
| Renaming a Table | ALTER TABLE ... RENAME TO | ACCESS EXCLUSIVE |
| REINDEX | REINDEX without CONCURRENTLY | ACCESS EXCLUSIVE |
| SERIAL Primary Keys | ADD COLUMN ... SERIAL/BIGSERIAL | ACCESS EXCLUSIVE + table rewrite |
| SET NOT NULL | ALTER TABLE ... ALTER COLUMN ... SET NOT NULL | ACCESS EXCLUSIVE |
| Short Primary Keys | SMALLINT/INT primary keys | — (best practice) |
| TIMESTAMP Fields | TIMESTAMP without time zone | — (best practice) |
| TRUNCATE TABLE | TRUNCATE TABLE | ACCESS EXCLUSIVE |
| Unnamed Constraints | Constraints without explicit names | — (best practice) |
Need project-specific rules beyond these? See Custom Checks.