| 1 | ADD COLUMN ... NOT NULL (no DEFAULT) | ACCESS EXCLUSIVE | HIGH | Add nullable, backfill, SET NOT NULL |
| 2 | ADD COLUMN ... DEFAULT <volatile> | ACCESS EXCLUSIVE | HIGH | Add without default, backfill in batches |
| 3 | ADD COLUMN ... DEFAULT <constant> (PG11+) | ACCESS EXCLUSIVE (instant) | LOW | Safe on PG11+ (metadata-only) |
| 4 | ADD COLUMN ... GENERATED STORED | ACCESS EXCLUSIVE | HIGH | Regular column + trigger + backfill |
| 5 | CREATE INDEX (non-concurrent) | SHARE | MEDIUM | CREATE INDEX CONCURRENTLY |
| 6 | DROP INDEX (non-concurrent) | ACCESS EXCLUSIVE | MEDIUM | DROP INDEX CONCURRENTLY |
| 7a | ALTER COLUMN TYPE (text / varchar widening) | ACCESS EXCLUSIVE | LOW | Metadata-only, no table rewrite |
| 7b | ALTER COLUMN TYPE varchar(N) | ACCESS EXCLUSIVE | MEDIUM | Safe if widening; verify with schema |
| 7c | ALTER COLUMN TYPE (cross-family) | ACCESS EXCLUSIVE | HIGH | Expand/contract pattern |
| 8 | ALTER COLUMN SET NOT NULL | ACCESS EXCLUSIVE | MEDIUM | CHECK NOT VALID + VALIDATE |
| 9 | ADD FOREIGN KEY (no NOT VALID) | SHARE ROW EXCLUSIVE | HIGH | NOT VALID + VALIDATE CONSTRAINT |
| 10 | ADD CHECK (no NOT VALID) | SHARE ROW EXCLUSIVE | MEDIUM | NOT VALID + VALIDATE CONSTRAINT |
| 11a | ADD UNIQUE | SHARE ROW EXCLUSIVE | HIGH | Concurrent index + USING INDEX |
| 11b | ADD UNIQUE USING INDEX | SHARE UPDATE EXCLUSIVE | LOW | Instant, attaches pre-built index |
| 12 | ADD EXCLUDE | SHARE ROW EXCLUSIVE | HIGH | No concurrent alternative; use lock_timeout |
| 13 | DROP TABLE | ACCESS EXCLUSIVE | CRITICAL | Separate release |
| 14 | DROP COLUMN | ACCESS EXCLUSIVE | HIGH | Remove app references first |
| 15 | TRUNCATE | ACCESS EXCLUSIVE | CRITICAL | Batched DELETE |
| 16 | TRUNCATE ... CASCADE | ACCESS EXCLUSIVE | CRITICAL | Explicit per-table truncation |
| 17 | RENAME COLUMN | ACCESS EXCLUSIVE | LOW | Instant on PG14+ |
| 18 | RENAME TABLE | ACCESS EXCLUSIVE | HIGH | Rename + view for backwards compat |
| 19 | VACUUM FULL | ACCESS EXCLUSIVE | HIGH | Use pg_repack |
| 20a | ALTER TYPE ... ADD VALUE (PG < 12) | ACCESS EXCLUSIVE | MEDIUM | Upgrade to PG12+ |
| 20b | ALTER TYPE ... ADD VALUE (PG12+) | EXCLUSIVE | LOW | Safe; instant but can't run inside tx |
| 21a | ATTACH PARTITION (PG < 12) | ACCESS EXCLUSIVE | HIGH | Create matching CHECK constraint first |
| 21b | ATTACH PARTITION (PG12+) | SHARE UPDATE EXCLUSIVE on parent, ACCESS EXCLUSIVE on partition | HIGH | Create matching CHECK constraint first |
| 22a | DETACH PARTITION (non-concurrent) | ACCESS EXCLUSIVE | HIGH | DETACH CONCURRENTLY (PG14+) |
| 22b | DETACH PARTITION CONCURRENTLY | SHARE UPDATE EXCLUSIVE | LOW | Safe on PG14+ |
| 23a | REFRESH MATERIALIZED VIEW | ACCESS EXCLUSIVE | HIGH | REFRESH ... CONCURRENTLY |
| 23b | REFRESH ... CONCURRENTLY | EXCLUSIVE | MEDIUM | Blocks writes; requires unique index |
| 24a | REINDEX TABLE | SHARE | HIGH | REINDEX CONCURRENTLY (PG12+) |
| 24b | REINDEX INDEX | ACCESS EXCLUSIVE | HIGH | REINDEX CONCURRENTLY (PG12+) |
| 24c | REINDEX SCHEMA/DATABASE | ACCESS EXCLUSIVE | CRITICAL | REINDEX CONCURRENTLY (PG12+) |
| 25 | CREATE TRIGGER | SHARE ROW EXCLUSIVE | MEDIUM | Use lock_timeout to bound wait |
| 26 | DROP TRIGGER | ACCESS EXCLUSIVE | MEDIUM | Use lock_timeout to bound wait |
| 27 | ENABLE/DISABLE TRIGGER | SHARE ROW EXCLUSIVE | LOW | Blocks concurrent DDL only |
| 28 | ADD PRIMARY KEY (no pre-built index) | SHARE ROW EXCLUSIVE | HIGH | Create index concurrently, then USING INDEX |
| 29 | ADD PRIMARY KEY USING INDEX | SHARE UPDATE EXCLUSIVE | LOW | Instant, attaches pre-built index |
| 30 | DROP SCHEMA | ACCESS EXCLUSIVE | CRITICAL | Remove app references, separate release |
| 31 | DROP SCHEMA CASCADE | ACCESS EXCLUSIVE | CRITICAL | Irreversible data loss, explicit per-table drops |
| 32 | DELETE without WHERE | ROW EXCLUSIVE | HIGH | Batched DELETE with FOR UPDATE SKIP LOCKED |
| 33 | VALIDATE CONSTRAINT (standalone) | SHARE UPDATE EXCLUSIVE | LOW | Non-blocking scan, safe standalone |
| 34 | REFRESH ... WITH NO DATA | ACCESS EXCLUSIVE | MEDIUM | Brief lock (truncate only), no data scan |
| 35 | DROP DATABASE | ACCESS EXCLUSIVE | CRITICAL | Irreversible, destroys entire database and all data |
| 36 | ALTER DOMAIN ADD CONSTRAINT | SHARE | HIGH | Validates against all columns using the domain, blocking writes on those tables |
| 37 | CREATE DOMAIN with constraints | ACCESS SHARE | LOW | Domains with constraints have poor migration support; use table-level CHECK constraints |