Kami memiliki banyak server berbeda yang mendorong ke tabel pusat di Postgres, yang menambahkan kerutan lain. Bagaimana jika saya menambahkan kolom ke tabel saya:
ALTER TABLE item ADD COLUMN category citext;
Sekarang tabel memiliki empat kolom, bukan tiga.
Semua dorongan saya yang ada segera break karena sekarang ada kolom yang hilang dari input. Ada kemungkinan 0% bahwa kami dapat memperbarui semua server secara bersamaan, jadi itu bukan pilihan.
Salah satu solusinya adalah membuat tipe kustom untuk setiap versi tabel:
CREATE TYPE item_v1 AS (
id uuid,
marked_for_deletion boolean,
name_ citext);
CREATE TYPE item_v2 AS (
id uuid,
marked_for_deletion boolean,
name_ citext,
category citext);
Dan kemudian fungsi untuk setiap jenis:
CREATE OR REPLACE FUNCTION data.item_insert_array (data_in item_v1[])
etc.
CREATE OR REPLACE FUNCTION data.item_insert_array (data_in item_v2[])
etc.
Saya kira Anda bisa memiliki satu metode ginormous yang menggunakan anyarray dan menggunakan CASE untuk memilah kode apa yang harus dijalankan. Saya tidak akan melakukan itu karena beberapa alasan, tetapi saya kira Anda bisa. (Saya telah melihat pendekatan itu berubah menjadi gangren di lebih dari satu bahasa dengan sangat tergesa-gesa.)
Semua itu tampak seperti pekerjaan yang adil. Apakah ada teknik sederhana yang saya lewatkan? Saya membayangkan Anda dapat mengirimkan teks terstruktur/XML/JSON, membongkarnya, dan bekerja dari sana. Tapi saya tidak file itu di bawah "lebih sederhana."
Saya masih mengerjakan desain di sini, jelas. Saya telah menulis cukup banyak kode untuk menguji apa yang telah saya tunjukkan, tetapi saya ingin memilah-milah detailnya sebelum kembali dan menerapkannya pada lusinan tabel.
Terima kasih atas bantuannya.