Switch from Atlas to MigrationPilot
All 7 Atlas PostgreSQL lint rules are covered by MigrationPilot — plus 73 more. Free and open-source. No paid tier required for linting.
Rule-by-Rule Mapping
Every Atlas PostgreSQL lint rule (PG301–PG307) has a direct equivalent in MigrationPilot.
| Atlas Rule | MigrationPilot Rule | Auto-Fix |
|---|---|---|
| PG301 Detect creating index on a table non-concurrently | MP001 require-concurrent-index | Yes |
| PG302 Detect adding a NOT NULL column without default | MP002 require-check-not-null | — |
| PG303 Detect adding a column with a volatile default | MP003 volatile-default-rewrite | — |
| PG304 Detect adding a foreign key without NOT VALID | MP005 require-not-valid-fk | — |
| PG305 Detect adding a CHECK constraint without NOT VALID | MP030 require-not-valid-check | Yes |
| PG306 Detect dropping an index non-concurrently | MP009 require-drop-index-concurrently | Yes |
| PG307 Detect column type changes | MP007 no-column-type-change | — |
73 Rules Atlas Doesn't Have
MigrationPilot catches issues that Atlas's 7 rules miss entirely. Here are some highlights:
Require SET lock_timeout before DDL
Avoid multiple DDL statements in a single transaction
Renaming columns breaks application queries
ALTER TYPE ADD VALUE cannot run inside a transaction (PG < 12)
DROP COLUMN acquires ACCESS EXCLUSIVE lock
Require SET statement_timeout for long-running DDL
CASCADE silently drops dependent objects
CONCURRENTLY in a transaction causes runtime error
Use TEXT instead of VARCHAR(n) — same performance, no arbitrary limit
Detect type changes that may silently truncate data
DETACH PARTITION without CONCURRENTLY locks the parent table
pgvector: HNSW has better recall and no training requirement
DROP/ALTER COLUMN may break views, functions, or triggers
New enum value is not visible until COMMIT
Plus 59 more rules covering lock safety, data types, partitioning, pgvector indexes, and more. See all 80 rules.
Feature Comparison
| Feature | Atlas (Free) | Atlas (Pro) | MigrationPilot |
|---|---|---|---|
| Migration linting | Removed in v0.38 | 7 rules | 80 rules (77 free) |
| Auto-fix | — | — | 12 rules |
| GitHub Action | Limited | Yes | Free |
| PR inline annotations | — | Yes | Free |
| SARIF output | — | — | Free |
| Lock type analysis | — | — | Free |
| MCP Server (AI tools) | — | — | Free |
| Execution plan | — | — | Free |
| Schema drift detection | — | Yes | Free |
| Air-gapped mode | — | — | Free |
| Config presets | atlas.hcl | atlas.hcl | YAML presets |
| Price | $0 | Custom | $0 (77 rules free) |
Migrate in 2 Minutes
Remove Atlas lint config
Delete the lint block from your atlas.hcl file. Keep Atlas for schema management if you want — MigrationPilot only handles linting.
Add MigrationPilot to CI
# .github/workflows/migration-lint.yml
name: Lint Migrations
on: pull_request
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: mickelsamuel/migrationpilot@v1
with:
path: migrations/Optional: Configure rules
# .migrationpilotrc.yml extends: recommended pgVersion: 16 exclude: - MP008 # Allow multi-DDL transactions
Free migration linting shouldn't require a paid plan
80 safety rules. 12 auto-fixes. GitHub Action with inline annotations. Open source, no signup, no paid tier for linting.