05.11.2025

Squawk - linter para migrações PostgreSQL e SQL: como evitar bloqueios e erros no banco de dados

Squawk — é uma ferramenta de análise estática (linter) para arquivos SQL e migrações do PostgreSQL. Ela foi projetada para verificar, durante o desenvolvimento ou no pipeline de CI, migrações e scripts SQL em busca de operações potencialmente perigosas que possam causar bloqueios, tempo de inatividade ou problemas de compatibilidade.
A ideia central é simples: muitas alterações de esquema (como adicionar colunas com DEFAULT, renomear, excluir ou criar índices) podem levar a bloqueios longos ou paralisações inesperadas. O Squawk ajuda a automatizar a verificação dessas mudanças.

Onde encontrar o Squawk

O projeto Squawk é totalmente open-source e está disponível no GitHub. O código-fonte, a documentação e os exemplos de configuração estão disponíveis no repositório. Lá você também encontrará versões para diferentes sistemas, imagens Docker, além de integrações com GitHub Actions e exemplos de configuração.

Por que isso é importante

Em ambientes com alta carga, múltiplas versões de aplicativos ou grande volume de transações, é fundamental minimizar o risco de falhas durante migrações de esquema. Por exemplo:

Principais recursos

Instalação e início rápido

Instalação

Exemplos de comando:

npm install -g squawk-cli

ou via pip

pip install squawk-cli

ou com Docker

docker run --rm -v $(pwd):/data ghcr.io/sbdchd/squawk:latest *.sql

Verificação rápida

Suponha que você tenha um arquivo example-migration.sql:

BEGIN; ALTER TABLE table_name ADD CONSTRAINT field_name_constraint UNIQUE (field_name); COMMIT;

Execução:

squawk example-migration.sql

Saída possível:

warning[constraint-missing-not-valid]: By default new constraints require a table scan and block writes to the table while that scan occurs.
...
Found 2 issues in 1 file (checked 1 source file)

Opções CLI e configuração

Entre as opções estão:

Exemplo de .squawk.toml:

pg_version = "11.0"
excluded_rules = [
"require-concurrent-index-creation",
"require-concurrent-index-deletion",
]
assume_in_transaction = true
excluded_paths = [
"005_user_ids.sql",
"*user_ids.sql",
]

Integração ao fluxo de trabalho

Pre-commit / Git workflow

Adicione o Squawk como hook no arquivo .pre-commit-config.yaml:

repos: - repo: https://github.com/sbdchd/squawk rev: v0.10.0 hooks: - id: squawk files: path/to/postgres/migrations/**/*.sql

CI/CD e Pull Request

Você pode usar a GitHub Action oficial:

# .github/workflows/lint-migrations.yml name: Lint Migrations

on: pull_request

jobs:
lint_migrations:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: sbdchd/squawk-action@v2
with:
pattern: "migrations/*.sql"
version: "latest"

Regras (Rules)

O Squawk inclui várias regras integradas que ajudam a manter migrações seguras, como:

FAQ

Conclusão

Squawk é como um revisor cuidadoso, sempre de olho na integridade do seu banco de dados. Ele ajuda a evitar migrações perigosas e bloqueios inesperados, tornando seus deploys mais seguros e previsíveis. Se você trabalha com PostgreSQL e realiza migrações com frequência — adote o Squawk no seu pipeline. Ele se paga rapidamente, evitando horas de rollback e recuperação.

Sobre a Base de Conhecimento Serverspace

A Base de Conhecimento Serverspace é um guia prático para desenvolvedores, administradores de sistemas e engenheiros DevOps. Aqui você encontra tutoriais passo a passo, revisões de ferramentas e guias práticos sobre CI/CD, contêineres, bancos de dados, segurança e automação de infraestrutura. Nosso objetivo é ajudar profissionais a simplificar processos, reduzir o tempo de configuração e tornar o trabalho com servidores mais seguro e eficiente.