PostgreSQL: ferramenta de correção / correção de esquema [fechada]

14

Considere a seguinte configuração:

  • Um banco de dados de produção
  • Um dev db, no qual são feitas alterações de esquema para habilitar novos recursos

Quando o desenvolvimento de um novo recurso é concluído, tenho que atualizar manualmente o esquema prod db até que pg_dump --schema-onlynos dois bancos de dados seja idêntico. Esse processo é propenso a erros e tedioso.

Então, estou procurando uma ferramenta que possa:

  • Mostre um resumo das diferenças entre dois esquemas (como diff). Observe que não estou procurando uma mera diferença textual do esquema, mas uma ferramenta mais elaborada que pode tirar conclusões como "A tabela Xpossui uma nova coluna Y".
  • Gere automaticamente o código SQL que converteria um esquema em outro (como patch)

Existe um esquema diff / patch de ferramenta que pode me ajudar a converter esquemas prod aos esquemas dev mais avançados?

Adam Matan
fonte
2
Em vez de fazer uma diferença, você deve gerenciar seus scripts de migração de maneira controlada. Nunca faça alterações ad-hoc de DDL em um DBMS, sempre coloque as alterações em um script (armazenado em um sistema de controle de versão) e depois aplique o script. Procure ferramentas como Liquibase ou Flyway
a_horse_with_no_name
1
@a_horse_with_no_name Thanks. Mesmo com essa abordagem, uma ferramenta diff / patch tornaria minha vida mais fácil. BTW, não posso deixar de cantarolar a música.
Adam Matan
Você pode tentar pg_comparator: pgfoundry.org/projects/pg-comparator (eu nunca o usei). Liquibase tem um built-in diff bem e emite os resultados como um conjunto de alterações Liquibase se eu não me engano, o que pode ser um ponto de partida bom para mais uma gestão esquema controlado
a_horse_with_no_name
Obrigado. Gostaria de publicá-lo como uma resposta para que eu possa votar?
14138 Adam Matan

Respostas:

11

Desculpe ressuscitar uma pergunta antiga

Recentemente, tenho usado a ferramenta de gerenciamento de banco de dados DataGrip 0xDBE da JetBrains.

Ele suporta vários mecanismos de banco de dados, no excelente Jetbrains IDE, e um recurso importante que achei útil é a capacidade de diff2 tabelas (DEV e PROD).

Abaixo está uma captura de tela do diff em ação (neste caso, existe apenas uma diferença de coluna). A captura de tela é o resultado do botão "Mesclar à direita" na parte superior, gerando o SQL necessário para trazer a tabela correta para o zero.

Diferença de tabela SQL 0xDBE

Espero que esta nova ferramenta ajude.

Ewan
fonte
3
Não há problema em ressuscitar perguntas antigas (existem até distintivos a serem obtidos com isso). E uma pergunta: é possível comparar bancos de dados inteiros (quero dizer, pelo menos, todas as tabelas neles)?
Dezso
@dezso - Obrigado pela garantia. Sim, você pode comparar no nível de banco de dados, esquema e tabela.
Ewan
Como alguém inicia o recurso diff no 0xDBE? Não consigo encontrar nenhum item de menu para uma ferramenta 'diff'.
Basil Bourque
1
@BasilBourque - Do lado esquerdo Databasedo menu, selecione as 2 tabelas que você deseja comparar (com cmd/ctrl + click), clique direito e selecioneCompare
Ewan
2
Recentemente, deparei com uma nova ferramenta, escrita em python, migra . Ele pode rastrear alterações para mudanças em tabelas, visões, funções, índices, restrições, enums, sequências e extensões instaladas e também pode ser usado como uma biblioteca
scripts de
6

Use liquibase .

Ele suporta diff , gerando um banco de dados do zero, corrigindo um banco de dados, revertendo um banco de dados e várias outras coisas.

Você costumava escrever tudo em XML com liquibase, mas não mais. Você pode escrever 99% no dialeto SQL de sua escolha. Exemplo:

--liquibase formatted sql

--changeset neil:1 

create table contacts(
  contact_id serial primary key,
  name text not null unique
);

--changeset neil:2
alter table contacts add column phone_num text;

Você deve manter os registros de alterações da base de dados no git ou no que quiser.

Neil McGuigan
fonte
Um problema disso é que ele não recebe as ordens ou remove as restrições e chaves primárias corretamente.
7685 monksy
2
Flyway é outra opção semelhante à Liquibase.
Basil Bourque