PostgreSQL migration linter rules comparison: MigrationPilot 112 rules vs Squawk 40 rules
112 rules vs 40

MigrationPilot vs SquawkMore Rules, Auto-Fix, Same CLI Workflow

Both MigrationPilot and Squawk are PostgreSQL migration linters. MigrationPilot ships 112 safety rules; Squawk has 40 as of v2.62.0 (Aug 2026). MigrationPilot also adds lock analysis, risk scoring, 20 auto-fixes, and a VS Code extension. Same workflow, more coverage.

Feature Comparison

CapabilitySquawkMigrationPilot
Total safety rules40 (v2.62.0, Aug 2026)112 (all free)
Auto-fixNo20 rules (--fix)
Lock type analysisNoPer-statement (SHARE through ACCESS EXCLUSIVE)
Risk scoringNoRED / YELLOW / GREEN (0-100)
GitHub ActionYesYes + inline annotations + Job Summary
VS Code extensionNoYes (diagnostics, hover, quick-fix)
Execution planNoYes (visual timeline with lock types)
SARIF outputNoYes (GitHub Code Scanning)
MCP ServerNoYes (4 tools for AI integration)
Schema drift detectionNoYes
Historical trendsNoYes (JSONL + trends command)
Config presetsNo5 built-in (recommended, strict, ci, startup, enterprise)
Framework detectionNo14 frameworks auto-detected
Watch modeNoYes (file watcher + pre-commit hooks)
Production contextNoTable sizes, query frequency
Rollback DDL generationNoYes
RLS safety rulesNoYes (MP057, MP079)
JSONB index analysisNoYes (MP056)
Replication safetyNoYes (MP055, MP060, MP064)
Partition rulesNoYes (MP046, MP049, MP072)
pgvector index adviceNoYes (MP050)
LanguageRustTypeScript (Node.js)
Parserpg-query-rslibpg-query (WASM)
LicenseApache-2.0 / MITMIT
PriceFreeFree (all 112 rules)

Rule-by-Rule Coverage

These 25 Squawk rules map directly onto a MigrationPilot rule. Seven of the equivalents are auto-fixable.

Squawk RuleMigrationPilotAuto-Fix
require-concurrent-index-creationMP001 require-concurrent-indexYes
require-concurrent-index-deletionMP009 require-drop-index-concurrentlyYes
adding-not-nullable-fieldMP002 require-check-not-null—
adding-field-with-defaultMP003 volatile-default-rewrite—
adding-foreign-key-constraintMP005 require-not-valid-fk—
ban-drop-columnMP017 no-drop-column—
ban-drop-tableMP026 ban-drop-table—
ban-drop-databaseMP034 ban-drop-database—
ban-drop-not-nullMP029 ban-drop-not-null—
changing-column-typeMP007 no-column-type-change—
renaming-columnMP010 no-rename-column—
renaming-tableMP028 no-rename-table—
disallowed-unique-constraintMP027 disallowed-unique-constraint—
prefer-text-fieldMP037 prefer-text-over-varcharYes
prefer-bigint-over-intMP038 prefer-bigint-over-int—
prefer-bigint-over-smallintMP038 prefer-bigint-over-int—
prefer-identityMP039 prefer-identity-over-serial—
prefer-timestamptzMP040 prefer-timestamptzYes
ban-char-fieldMP041 ban-char-fieldYes
adding-serial-primary-key-fieldMP015 no-add-column-serial—
setting-not-nullable-fieldMP018 no-force-set-not-null—
constraint-missing-not-validMP030 require-not-valid-checkYes
ban-truncate-cascadeMP036 ban-truncate-cascade—
require-timeoutMP004 require-lock-timeoutYes
ban-concurrent-index-creation-in-transactionMP025 ban-concurrent-in-transaction—

Key Differentiators

Twice the Rules

MigrationPilot has 112 safety rules; Squawk has 40 as of v2.62.0 (Aug 2026). Coverage includes RLS, JSONB, logical replication, partitioning, pgvector, TOAST compression, and more.

Auto-Fix

20 rules can be automatically fixed with --fix. Missing CONCURRENTLY, lock_timeout, statement_timeout, NOT VALID, IF NOT EXISTS, VARCHAR-to-TEXT, TIMESTAMP-to-TIMESTAMPTZ, and more. Squawk only reports; MigrationPilot can fix.

Lock Type Analysis

Every DDL statement output includes the PostgreSQL lock it acquires (SHARE, SHARE UPDATE EXCLUSIVE, ACCESS EXCLUSIVE) and whether it blocks reads, writes, or both. Squawk does not analyze locks.

Risk Scoring

RED / YELLOW / GREEN risk scores (0-100) driven by what the rules found and by the lock each statement takes — a critical finding always reads RED. Pass --database-url and 15 more rules read live table sizes, write traffic and replication state — free, like everything else.

VS Code Extension

Real-time diagnostics, hover tooltips with lock info, and quick-fix actions directly in your editor. Squawk does not have an editor extension.

MCP Server

MigrationPilot ships an MCP server (4 tools), so Claude, Cursor, and other AI assistants can analyze a migration before they hand it to you. Squawk has no MCP integration. Both tools are permissively licensed — MigrationPilot is MIT, Squawk is Apache-2.0 / MIT — so neither carries copyleft obligations.

When to Use Each Tool

Squawk may be a better fit if...

  • You prefer a Rust binary with zero runtime dependencies
  • You only need the 40 rules it covers
  • It is already wired into your CI and covers what you check for
  • You want the fastest possible binary execution time

MigrationPilot is a better fit if...

  • You want the widest PostgreSQL rule set (112 rules)
  • You need auto-fix to automatically remediate issues
  • You want lock analysis and risk scoring per statement
  • You need a VS Code extension for real-time feedback
  • You need RLS, JSONB, replication, or partitioning rules
  • You want production context analysis with actual table sizes
  • You want an MCP server so AI assistants can check migrations too

Switch in 60 Seconds

1

Replace the CLI

# Remove Squawk
# npm uninstall squawk-cli  (or cargo uninstall squawk)

# Use MigrationPilot
npx migrationpilot analyze migrations/
2

Update your CI

# Replace your Squawk GitHub Action:
- uses: mickelsamuel/migrationpilot@v1
  with:
    path: migrations/
    fail-on: critical
3

Enable auto-fix

# Preview fixes without modifying files
npx migrationpilot analyze migrations/ --fix --dry-run

# Apply fixes in-place
npx migrationpilot analyze migrations/ --fix

112 rules to Squawk's 40. Auto-fix included.

112 safety rules. 20 auto-fixes. Lock analysis. Risk scoring. VS Code extension. GitHub Action with inline annotations. Same CLI workflow, more comprehensive coverage.