Bagaimana versi mengontrol skema PostgreSQL dengan komentar?

9

Saya versi mengontrol sebagian besar pekerjaan saya dengan Git : kode, dokumentasi, konfigurasi sistem. Saya dapat melakukan itu karena semua pekerjaan berharga saya disimpan sebagai file teks.

Saya juga telah menulis dan berurusan dengan banyak skema SQL untuk database Postgres kami. Skema ini mencakup pandangan, fungsi SQL, dan kami akan menulis fungsi Postgres dalam bahasa pemrograman R (via PL / R ).

Saya mencoba menyalin dan melewati skema potongan yang saya dan kolaborator saya tulis tetapi saya lupa melakukannya. Salinan dan tindakan sebelumnya adalah berulang dan rentan kesalahan.

Metode pg_dump / pg_restore tidak akan berfungsi karena kehilangan komentar.

Idealnya saya ingin memiliki beberapa cara untuk mengekstrak skema saya saat ini menjadi file atau file dan menjaga komentar sehingga saya dapat melakukan kontrol versi.

Apa praktik terbaik untuk skema kontrol versi dengan komentar?

Aleksandr Levchuk
sumber
2
Saya tidak berpikir pertanyaannya adalah psql spesifik. Sudahkah Anda membaca beberapa jawaban di SO stackoverflow.com/… ? Mungkin ada sesuatu untukmu.
DrColossos
@DrColossos - beberapa pertanyaan itu adalah kandidat migrasi yang baik.
CoderHawk
@DrColossos COMMENT ONtersedia di lingkungan non postgres? Saya tidak berpikir itu SQL standar. yang berarti ini bisa spesifik postgres.
xenoterracide
@ xenoterracide Anda benar, saya lebih banyak berbicara tentang masalah versi dari database itu sendiri
DrColossos

Jawaban:

9

Mengapa tidak Anda COMMENT ONberbagai SCHEMAkomponen, sehingga komentar Anda dalam skema, dan akan dibuang.

KOMENTAR menyimpan komentar tentang objek basis data.
Untuk mengubah komentar, keluarkan perintah KOMENTAR baru untuk objek yang sama. Hanya satu string komentar yang disimpan untuk setiap objek. Untuk menghapus komentar, tulis NULL sebagai ganti string teks. Komentar dijatuhkan secara otomatis saat objek dijatuhkan.

xenoterracide
sumber
Benar-benar membantu, tetapi saya tidak ingin menandai ini sebagai Jawaban dulu karena saya berharap untuk mendapatkan jawaban praktik terbaik.
Aleksandr Levchuk
2

Skema pengontrol versi selalu bermasalah bagi saya. Saya biasanya mengontrol versi skema yang dihasilkan oleh alat pemodelan data yang saya gunakan. Model ini juga dikendalikan oleh versi. Saya menggunakan perbedaan antara skema saat ini dan sebelumnya untuk membangun tambalan yang diperlukan untuk memperbarui skema. Beberapa alat pemodelan membuat skrip pembaruan skema yang dapat digunakan. Skrip pembaruan juga dikendalikan oleh versi.

Saya kadang-kadang melihat skrip yang dimaksudkan untuk membuang skema dalam format yang sesuai untuk membuat ulang skema. Salah satunya mungkin apa yang Anda cari. Beberapa alat pemodelan dan kueri mampu membuat skrip regenerasi skrip dari skema yang ada. Jika Anda bisa skrip ini mungkin memberi Anda file yang cocok untuk kontrol versi.

BillThor
sumber
2

Alternatif (atau Anda dapat menggabungkannya) dengan proposal saya sebelumnya adalah menulis kode SQL Anda di editor (IDE) dan menyimpan file, dan mengkomitnya ke VCS Anda, setelah itu jalankan kode pada database menggunakan psql -1f. Dengan cara ini, kode dikendalikan oleh versi sebelum dieksekusi.

xenoterracide
sumber
"Dengan cara ini kode dikendalikan versi sebelum dieksekusi." Dan itu seharusnya.
Mike Sherrill 'Cat Recall'
@catcall ya tetapi jika Anda membaca posting ops, saya tidak berpikir itu masalahnya.
xenoterracide
Sayangnya tidak demikian halnya di sebagian besar tempat yang pernah saya lihat. Tapi itu satu-satunya cara untuk menjamin bahwa kode yang Anda uji dan QA adalah kode yang sama dengan yang Anda pindahkan ke produksi. Gagasan bahwa database "benar" ada di VCS, bukan di DBMS, tidak tersebar luas.
Mike Sherrill 'Cat Recall'
0

Saya bekerja di proyek serupa. Ini proposal desain saya:

  1. Memberi komentar objek DB secara berkala katakanlah setiap dua minggu atau dua kali sebulan.
  2. lakukan pg_dump semua (ya dapatkan semuanya untuk memastikan Anda mendapatkan semua detail kecil dan hubungan). Beri nama mereka dengan yyyymmdd-VERSION.dump
  3. Jika menggunakan Git, gunakan plugin untuk file besar
  4. Jika tidak menggunakan repo maka buat tabel sederhana dalam teks .CSV format seperti tabel di bawah ini:

    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. dengan menjaga hubungan dalam file CSV dari dump yang dihasilkan dengan nama file Anda dapat melacaknya dengan mudah dan Anda memastikan pengembalian akan bekerja karena Anda benar-benar membuang semuanya.

Saat ini penyimpanan awan atau penyimpanan situs tidak boleh semahal itu jika berbicara tentang TB data. ada beberapa mengamuk dari 700 hingga 1000 USD dengan hingga 16 TB .

Anda bahkan dapat menghemat lebih banyak $$$ jika Anda pindah ke cloud penyimpanan seperti jenis AWS S3 yang paling populer

Jika desain dan standar organisasi yang baik didefinisikan untuk melacak semua infrastruktur dan aset TI yang seharusnya tidak menyakitkan setelah diimplementasikan, itu bisa relatif sederhana dan akan menghemat rasa sakit konfigurasi Anda dan yang paling penting waktu ...

Andres Leon Rangel
sumber