Noções Básicas de Gerenciamento de Mudanças
8 exemplos para você começar com o gerenciamento de mudanças do Postgres - 5 básicos e 3 intermediários.
Busque em todas as páginas da documentação
8 exemplos para você começar com o gerenciamento de mudanças do Postgres - 5 básicos e 3 intermediários.
# Migrações executadas através da sua ferramenta padrão com revisão
flyway -url="$DATABASE_URL" info
# ou
liquibase --changelog-file=db/changelog.xml statusdocs/ ou runbooks/.Atribua um nível a cada migração antes do merge.
| Nível | Exemplos | Aprovação | Janela |
|---|---|---|---|
| Baixo | CREATE INDEX CONCURRENTLY, adicionar coluna anulável | Revisão de PR | A qualquer momento |
| Médio | Backfill NOT NULL, novo FK com NOT VALID | Líder de equipe + DBA | Horário comercial |
| Alto | ALTER TYPE, reescrita de tabela, anexo de partição | DBA + CAB | Janela de manutenção |
| Digno de Sev | pg_upgrade, migração de armazenamento principal | Executivo + aprovação de DR | Janela dedicada |
-- risk: medium em comentários de cabeçalho.Relacionado: Melhores Práticas de Gerenciamento de Mudanças - checklist de aplicação
Evite que as migrações esperem para sempre por bloqueios.
-- Definir no início da sessão de migração (callback Flyway ou pre-sql Liquibase)
SET lock_timeout = '5s';
SET statement_timeout = '30min';
SET idle_in_transaction_session_timeout = '5min';
ALTER TABLE orders ADD COLUMN IF NOT EXISTS priority smallint;Primeiro passo seguro de expandir/contrair.
-- Expansão: adicionar coluna (instantâneo no PostgreSQL 11+ para valor padrão nulo anulável)
ALTER TABLE customers ADD COLUMN IF NOT EXISTS tier text;
-- Deploy da aplicação escreve o tier apenas em novas linhas (feature flag)
-- Backfill em lotes
UPDATE customers SET tier = 'standard' WHERE tier IS NULL AND id BETWEEN 1 AND 10000;NOT NULL sem um valor padrão em uma única etapa em tabelas grandes.UPDATE com intervalos de chave primária para evitar bloqueios longos.Somente depois que o código não ler mais a coluna.
-- Verifique zero leituras em pg_stat_user_tables (aproximado) e métricas da aplicação
SELECT relname, seq_scan, idx_scan FROM pg_stat_user_tables WHERE relname = 'customers';
-- Contração
ALTER TABLE customers DROP COLUMN IF EXISTS legacy_code;Cada DDL de produção vincula evidências.
## CHG-2044 Adicionar orders.priority
- Nível de risco: Médio
- Migração: V2044__orders_priority.sql
- Raio de explosão: tabela orders (42M linhas), serviço de checkout
- Rollback: DROP COLUMN priority (após reverter a aplicação)
- Teste de bloqueio: passou em staging em 2026-07-08
- Consciente do plantão: simEXPLAIN para qualquer novo índice.Relacionado: Janelas de Manutenção - quando agendar
Adicione aplicação sem bloquear escritas em linhas existentes.
ALTER TABLE line_items
ADD CONSTRAINT line_items_order_id_fkey
FOREIGN KEY (order_id) REFERENCES orders(id)
NOT VALID;
-- Valide mais tarde em uma janela menor (ainda leva ShareUpdateExclusiveLock)
ALTER TABLE line_items VALIDATE CONSTRAINT line_items_order_id_fkey;NOT VALID adiciona apenas metadados; linhas ruins existentes permanecem até a validação.VALIDATE CONSTRAINT.Construção concorrente para tabelas OLTP.
CREATE INDEX CONCURRENTLY IF NOT EXISTS orders_customer_id_idx
ON orders (customer_id);
-- Flyway: desativar o wrapper de transação para este script# Verificar índice válido
psql -c "SELECT indisvalid FROM pg_index WHERE indexrelid = 'orders_customer_id_idx'::regclass;"REINDEX CONCURRENTLY (veja solução de problemas).CREATE INDEX CONCURRENTLY em um bloco de transação.Trate pg_upgrade como um lançamento de produto, não um patch.
## Pré-voo
- [ ] Backup lógico + checkpoint PITR verificado
- [ ] Matriz de compatibilidade de extensão (pgvector, PostGIS)
- [ ] Rollback = manter cluster antigo parado, reverter DNS
- [ ] String de conexão da aplicação testada em PG 18.4 stagingpg_upgrade --check em um clone primeiro.Relacionado: Antes/Depois: Upgrade de Versão Principal - referência narrativa
Versões da Stack: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x e PostGIS 3.5+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026