Làm cách nào để kiểm soát phiên bản lược đồ PostgreSQL bằng các bình luận?


9

Phiên bản tôi kiểm soát hầu hết công việc của tôi với Git : mã, tài liệu, cấu hình hệ thống. Tôi có thể làm điều đó bởi vì tất cả các công việc có giá trị của tôi được lưu trữ dưới dạng tệp văn bản.

Tôi cũng đã viết và xử lý rất nhiều lược đồ SQL cho cơ sở dữ liệu Postgres của chúng tôi. Lược đồ bao gồm các khung nhìn, các hàm SQL và chúng ta sẽ viết các hàm Postgres bằng ngôn ngữ lập trình R (thông qua PL / R ).

Tôi đã cố gắng sao chép và vượt qua lược đồ khối mà tôi và các cộng tác viên của tôi viết nhưng tôi quên làm điều đó. Các hành động sao chép và quá khứ là lặp đi lặp lại và dễ bị lỗi.

Phương thức pg_dump / pg_restore sẽ không hoạt động vì mất bình luận.

Lý tưởng nhất là tôi muốn có một số cách để trích xuất lược đồ hiện tại của tôi thành một tệp hoặc tệp và lưu giữ các bình luận để tôi có thể kiểm soát phiên bản.

Thực tiễn tốt nhất để lược đồ kiểm soát phiên bản với các bình luận là gì?


2
Tôi không nghĩ rằng câu hỏi là cụ thể. Bạn đã đọc một số câu trả lời tại SO stackoverflow.com/ hay chưa? Có thể có một cái gì đó cho bạn.
DrColossos

@DrColossos - một số câu hỏi là những ứng cử viên di cư tốt.
CoderHawk

@DrColossos COMMENT ONcó sẵn trong môi trường không postgres? Tôi không nghĩ đó là SQL chuẩn. có nghĩa là điều này có thể được postgres cụ thể.
xenoterracide

@xenoterracide Bạn nói đúng, tôi đã nói nhiều hơn về vấn đề phiên bản cơ sở dữ liệu
DrColossos

Câu trả lời:


9

Tại sao bạn không có COMMENT ONcác SCHEMAthành phần khác nhau , theo cách mà các bình luận của bạn nằm trong lược đồ và sẽ bị loại bỏ.

COMMENT lưu trữ một nhận xét về một đối tượng cơ sở dữ liệu.
Để sửa đổi nhận xét, hãy đưa ra lệnh COMMENT mới cho cùng một đối tượng. Chỉ có một chuỗi nhận xét được lưu trữ cho mỗi đối tượng. Để xóa một nhận xét, viết NULL thay cho chuỗi văn bản. Nhận xét được tự động thả khi đối tượng bị rơi.


Thực sự hữu ích, nhưng tôi không muốn đánh dấu đây là Trả lời vì tôi hy vọng sẽ có được câu trả lời thực tiễn tốt nhất.
Alexanderr Levchuk

2

Các lược đồ kiểm soát phiên bản luôn là vấn đề đối với tôi. Tôi thường kiểm soát phiên bản lược đồ được tạo bởi công cụ mô hình hóa dữ liệu mà tôi đang sử dụng. Mô hình cũng được kiểm soát phiên bản. Tôi sử dụng các khác biệt giữa lược đồ hiện tại và trước đây để xây dựng bản vá cần thiết để cập nhật lược đồ. Một số công cụ mô hình hóa tạo các kịch bản cập nhật lược đồ có thể sử dụng. Các kịch bản cập nhật cũng được kiểm soát phiên bản.

Thỉnh thoảng tôi thấy các tập lệnh được dự định kết xuất lược đồ theo định dạng phù hợp để tạo lại lược đồ. Một trong số này có thể là những gì bạn đang tìm kiếm. Một số công cụ mô hình hóa và truy vấn có khả năng tạo các kịch bản tái tạo lược đồ tạo thành một lược đồ hiện có. Nếu bạn có thể tạo tập lệnh này, nó có thể cung cấp cho bạn một tệp phù hợp với kiểm soát phiên bản.


2

Một cách khác (hoặc bạn có thể kết hợp chúng) với đề xuất trước đây của tôi là viết mã SQL của bạn trong trình soạn thảo (IDE) và lưu các tệp, và cam kết chúng với VCS của bạn, sau đó chạy mã trên cơ sở dữ liệu bằng cách sử dụng psql -1f. Bằng cách này, mã được kiểm soát phiên bản trước khi được thực thi.


"Bằng cách này, mã được kiểm soát phiên bản trước khi được thực thi." Và nó nên được.
Mike Sherrill 'Nhớ lại mèo'

@catcall yeah nhưng nếu bạn đọc bài đăng của ops, tôi không nghĩ đó là trường hợp.
xenoterracide

Thật không may, không phải là trường hợp ở hầu hết các nơi tôi đã thấy. Nhưng đó là cách duy nhất để đảm bảo rằng mã bạn kiểm tra và QA là cùng mã mà bạn chuyển sang sản xuất. Ý tưởng rằng cơ sở dữ liệu "thực" nằm trong VCS, không phải trong DBMS, không phổ biến.
Mike Sherrill 'Nhớ lại mèo'

0

Tôi đang làm việc trong dự án tương tự. Đây là đề xuất thiết kế của tôi:

  1. Nhận xét các đối tượng DB trên cơ sở thời gian thường xuyên cho phép nói hai tuần một lần hoặc hai lần một tháng.
  2. làm pg_dump tất cả (có nhận mọi thứ để đảm bảo bạn có được tất cả các chi tiết và mối quan hệ nhỏ). Đặt tên cho chúng theo yyyymmdd-VERSION.dump
  3. Nếu sử dụng Git, hãy sử dụng plugin cho các tệp lớn
  4. Nếu không sử dụng repo thì hãy tạo một bảng đơn giản ở dạng văn bản .CSV như bảng dưới đây:

    version | file name | date | description | 1.0 | yyyymmdd-v10.dump | yyyymmdd | new version of user table | 1.1 | backupDB-v11.dump | yyyymmdd | normalized reports tables |

  5. bằng cách giữ mối quan hệ trong tệp CSV của các bãi chứa được tạo bằng tên tệp, bạn có thể dễ dàng theo dõi chúng bằng cách nào đó và bạn chắc chắn rằng khôi phục sẽ hoạt động vì bạn đã bỏ hoàn toàn mọi thứ.

Ngày nay, bất kỳ lưu trữ đám mây hoặc lưu trữ trên trang web nào cũng không nên quá đắt ngay cả khi nói về TB của dữ liệu. có một số hoành hành từ 700 đến 1000 USD với tối đa 16 TB .

Bạn thậm chí có thể tiết kiệm $$$ hơn rất nhiều nếu bạn chuyển sang đám mây lưu trữ như loại AWS S3 phổ biến nhất

Nếu các tiêu chuẩn của một tổ chức và thiết kế tốt được xác định để theo dõi tất cả các cơ sở hạ tầng và tài sản CNTT thì nó sẽ không gây đau đớn khi được triển khai, nó có thể tương đối đơn giản và sẽ giúp bạn tiết kiệm thời gian và quan trọng nhất là ...

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.