SQL Migration Lock Check · comparison

SQL Migration Lock Check vs. squawk

If you have searched for a PostgreSQL migration linter, you have found squawk. It is the established answer, and this page exists because pretending otherwise would waste your time. Here is what each tool is actually built to do — and, below, an explicit note on what this page is not.

What is the actual difference?

squawk parses SQL with a real PostgreSQL parser and reports per-statement rules, with editor and CI integration and a maintained rule set.

This checker scans statements textually, and its distinguishing checks are relational — about one statement in the context of another:

A per-statement rule engine cannot answer any of those from the statement alone. That is the wedge — not a claim that it finds more, but that these four are a different shape of question.

Side by side

SQL Migration Lock Checksquawk
InstallNone for the browser tool; three files and Node 18+ for the CLIA binary or package to install
ParsingTextual statement scanner (handles comments, dollar-quoting, transaction blocks)Real PostgreSQL parser
EmphasisRelational checks: lock queue exposure, transaction grouping, the fast pathsPer-statement rules across a broad, maintained set
Editor integrationNoYes
Runs in a browserYes — paste and read, nothing uploadedNo
Database accessNone, by constructionNone required

When is squawk the right answer?

When you want a maintained, widely-used linter with a real parser, editor integration, and a rule set more people have exercised than this one. A real parser is genuinely better than text scanning on unusual SQL — deeply nested expressions, exotic syntax, dialect edge cases — and if you are standardising migration linting across a team, established tooling with a community around it is worth more than any single clever check.

Install it. The two are not exclusive, and they disagree about very little. Use this one when you want an answer in ten seconds without installing anything, when you want the four relational checks above, or when the person who needs to understand the finding is not the person who set up the linter.

Is this a benchmark or a performance comparison?

No. Nothing here is measured against squawk — no rule-count comparison, no timing, no accuracy claim, and no run of squawk was performed to produce this page. It describes what each tool is built to do, based on each project's own stated purpose. If a specific claim on this page is out of date or wrong, it is a bug in this page.

Are you affiliated with squawk?

No. This project is not affiliated with, endorsed by, or connected to squawk or its maintainers in any way. squawk is named here because it is what a practitioner searching for this has probably already found.

Check a migration