PostgreSQL: şema farkı / yama aracı [kapalı]


14

Aşağıdaki ayarı göz önünde bulundurun:

  • Üretim DB
  • Yeni özellikleri etkinleştirmek için şema değişikliklerinin yapıldığı bir dev db

Yeni bir özelliğin geliştirilmesi tamamlandığında, pg_dump --schema-onlyher iki DB de aynı olana kadar prod db şemasını el ile güncelleştirmek zorunda . Bu süreç hataya açık ve yorucudur.

Yani, aşağıdakileri yapabilen bir araç arıyorum:

  • İki şema (gibi diff) arasındaki farkların bir özetini gösterin . Şemanın yalnızca metinsel bir farkını değil, "Tablo'nun Xyeni bir sütunu var Y" gibi sonuçlar çıkarabilen daha ayrıntılı bir araç aradığımı unutmayın .
  • Bir şemayı diğerine dönüştürecek SQL kodunu otomatik olarak oluşturun (gibi patch)

Prod şemalarını daha gelişmiş dev şemalarına dönüştürmeme yardımcı olabilecek bir şema diff / patch aracı var mı?


2
Farklılık yapmak yerine, geçiş komut dosyalarınızı kontrollü bir şekilde yönetmelisiniz. Bir DBMS'de hiçbir zaman geçici DDL değişiklikleri yapmayın, değişikliği her zaman bir komut dosyasına (sürüm kontrol sisteminde depolanır) koyun ve komut dosyasını uygulayın. Liquibase veya Flyway gibi araçlara bakın
a_horse_with_no_name

1
@a_horse_with_no_name Teşekkürler. Bu yaklaşımla bile, bir fark / yama aracı hayatımı kolaylaştıracaktır. BTW, şarkıyı mırıldanmaya yardım edemem.
Adam Matan

Sen pg_comparator deneyebilirsiniz: pgfoundry.org/projects/pg-comparator (Ben hiç kullanmadım). Liquibase'in yerleşik bir farkı vardır ve yanılmıyorsam sonuçları bir Liquibase değişiklik kümesi olarak yayar, böylece daha kontrollü bir şema yönetimi için iyi bir başlangıç ​​noktası olabilir
a_horse_with_no_name 13:14

Teşekkürler. Cevap verebilmeyi umar mıyım?
Adam Matan

Yanıtlar:


11

Eski bir soruyu dirilttiğim için üzgünüm

Son zamanlarda JetBrains tarafından 0xDBE DataGrip Veritabanı yönetim aracını kullanıyorum .

Mükemmel Jetbrains IDE'de birden fazla veritabanı motorunu destekler ve yararlı bulduğum önemli bir özellik, diff2 tabloya (DEV ve PROD) yeteneğidir .

Aşağıda, eylemdeki farkın bir ekran görüntüsü bulunmaktadır (bu durumda yalnızca bir sütun farkı vardır). Ekran görüntüsü, üstteki "Sağa Birleştir" düğmesinin sonucudur ve sağ tabloyu sıfırlamak için gereken SQL'i oluşturur.

0xDBE SQL Tablo Farkı

Umarım bu yeni araç yardımcı olur.


3
Eski soruları yeniden canlandırmakta sorun yok (bundan ulaşmak için bile rozetler var). Ve bir soru: tüm veritabanlarını karşılaştırmak mümkün mü (en azından, içindeki tüm tablolar)?
dezso

@dezso - Güvence için teşekkürler. Evet, bir veritabanı, şema ve tablo düzeyinde karşılaştırabilirsiniz.
Ewan

1
@BasilBourque - Soldaki Databasemenüden, karşılaştırmak istediğiniz 2 tabloyu (ile cmd/ctrl + click) seçin, sağ tıklayın ve seçinCompare
Ewan

3
Geçenlerde python ile yazılmış yeni bir araca rastladım migra . Tablolarda, görünümlerde, işlevlerde, dizinlerde, kısıtlamalarda, numaralandırmalarda, sekanslarda ve yüklü uzantılarda yapılan değişiklikleri izleyebilir ve ayrıca bir kütüphane olarak da kullanılabilir
komut dosyaları

1
@Ewan Ayrıca migra, tetikleyiciler ve işlevler dahil her iki veritabanındaki her şeyi izler. Ancak DataGrip bunu yapmaz. Bu nedenle, DataGrip'i farklı bir araç olarak kullanmaktan vazgeçiyorum. Dezavantajları da vardır: 1) migra sadece bir PostgreSQL aracıdır; 2) migra değişiklikleri izler, ancak her zaman tablo değiştirme gibi uygun DDL işleçleri üretmez ... sütun ekle, tablo değiştirme yerine sütun bırak ... sütun yeniden adlandır vb. Ve üreten herhangi bir araç bulamadım DDL komutlarını düzeltin. Her zaman cilalamaya ihtiyaç duyarlar. Ayrıca, Liquibase gibi bazı taşıma araçları olmadan, herhangi bir veritabanı değişikliği çok karmaşık olacaktır.
Exterminator13

6

Likibaz kullanın .

Farkı destekler , sıfırdan bir db oluşturur, bir db'yi yamalar, bir db'yi geri alır ve bir sürü başka şey.

XML'deki her şeyi liquibase ile yazmak zorunda kalırdınız, ancak artık değil. % 99'unu seçtiğiniz SQL lehçesine yazabilirsiniz. Misal:

--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;

Likibaz changelog'larınızı git veya neyinizde tutmalısınız.


Bununla ilgili bir sorun, siparişleri veya kaldırma kısıtlarını ve birincil anahtarları doğru almamasıdır.
keşiş

2
Flyway , Liquibase'e benzer başka bir seçenektir.
Basil Bourque
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.