PostgreSQL: lược đồ diff / patch tool [đã đóng]


14

Hãy xem xét các cài đặt sau:

  • Một DB sản xuất
  • Một db db, trên đó thay đổi lược đồ được thực hiện để kích hoạt các tính năng mới

Khi quá trình phát triển một tính năng mới hoàn tất, tôi phải cập nhật thủ công lược đồ db prod cho đến khi pg_dump --schema-onlytrên cả hai DB giống hệt nhau. Quá trình này dễ bị lỗi và tẻ nhạt.

Vì vậy, tôi đang tìm kiếm một công cụ có thể:

  • Hiển thị một bản tóm tắt về sự khác biệt giữa hai lược đồ (như diff). Lưu ý rằng tôi không tìm kiếm một khác biệt văn bản của lược đồ, nhưng một công cụ phức tạp hơn có thể đưa ra kết luận như "Bảng Xcó một cột mới Y".
  • Tự động tạo mã SQL sẽ chuyển đổi một lược đồ sang một lược đồ khác (như patch)

Có một công cụ diff / patch lược đồ nào có thể giúp tôi chuyển đổi các lược đồ prod sang các lược đồ dev nâng cao hơn không?


2
Thay vì thực hiện tìm khác biệt, bạn nên quản lý các tập lệnh di chuyển của mình theo cách được kiểm soát. Không bao giờ thay đổi DDL đặc biệt thành DBMS, luôn đặt thay đổi thành tập lệnh (được lưu trữ trong hệ thống kiểm soát phiên bản) và sau đó áp dụng tập lệnh. Nhìn vào các công cụ như Liquibase hoặc Flyway
a_horse_with_no_name

1
@a_horse_with_no_name Cảm ơn. Ngay cả với phương pháp này, một công cụ diff / patch sẽ giúp cuộc sống của tôi dễ dàng hơn. BTW, tôi không thể giúp ngân nga bài hát.
Adam Matan

Bạn có thể thử pg_comparator: pgfoundry.org/projects/pg-comparator (Tôi chưa bao giờ sử dụng nó). Liquibase cũng có một diff khác được tích hợp sẵn và phát ra kết quả dưới dạng bộ thay đổi của Fluibase nếu tôi không nhầm, vì vậy đó có thể là điểm khởi đầu tốt để quản lý lược đồ được kiểm soát nhiều hơn
a_horse_with_no_name

Cảm ơn. Quan tâm để gửi nó như là một câu trả lời để tôi có thể upvote?
Adam Matan

Câu trả lời:


11

Xin lỗi để làm sống lại một câu hỏi cũ

Gần đây tôi đã được sử dụng 0xDBE DataGrip công cụ quản lý cơ sở dữ liệu bằng cách JetBrains.

Nó hỗ trợ nhiều công cụ cơ sở dữ liệu, trong IDE Jetbrains tuyệt vời và một tính năng quan trọng mà tôi thấy hữu ích là khả năng diff2 bảng (DEV và PROD).

Dưới đây là một ảnh chụp màn hình của diff trong hành động (trong trường hợp này chỉ có một sự khác biệt cột). Ảnh chụp màn hình là kết quả của nút "Hợp nhất" ở trên cùng, tạo ra SQL cần thiết để đưa bảng bên phải lên đầu.

Bảng 0xDBE SQL

Hy vọng công cụ mới này sẽ giúp.


3
Không có vấn đề gì với việc hồi sinh những câu hỏi cũ (thậm chí còn có huy hiệu để đạt được từ đó). Và một câu hỏi: có thể so sánh toàn bộ cơ sở dữ liệu (ý tôi là, ít nhất, tất cả các bảng trong đó)?
dezso

@dezso - Cảm ơn sự trấn an. Có, bạn có thể so sánh ở mức cơ sở dữ liệu, lược đồ và bảng.
Ewan

Làm thế nào để một người khởi tạo tính năng khác trong 0xDBE? Tôi không thể tìm thấy bất kỳ mục menu nào cho công cụ 'diff'.
Basil Bourque

1
@BasilBourque - Từ Databasemenu bên trái , chọn 2 bảng bạn muốn so sánh (với cmd/ctrl + click), nhấp chuột phải và chọnCompare
Ewan

2
Gần đây tôi đã bắt gặp một công cụ mới, được viết bằng python, Migra . Nó có thể theo dõi các thay đổi đối với các thay đổi đối với bảng, dạng xem, hàm, chỉ mục, ràng buộc, enum, trình tự và tiện ích mở rộng đã cài đặt và cũng có thể được sử dụng làm thư viện
tập lệnh

6

Sử dụng chất lỏng .

Nó hỗ trợ diff , tạo db từ đầu, vá db, khôi phục db và một loạt các thứ khác.

Bạn đã từng phải viết mọi thứ bằng XML bằng chất lỏng, nhưng không còn nữa. Bạn có thể viết 99% trong số đó theo phương ngữ SQL bạn chọn. Thí dụ:

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

Bạn nên giữ các thay đổi chất lỏng trong git hoặc những gì bạn có.


Một vấn đề với điều này là nó không nhận được thứ tự hoặc loại bỏ các ràng buộc và các khóa chính.
tu sĩ

2
Flyway là một lựa chọn khác tương tự như Liquibase.
Basil Bourque
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.