Mamy wiele różnych serwerów, które pchają się do centralnych stołów w Postgresie, co dodaje kolejną zmarszczkę. Co się stanie, jeśli dodam kolumnę do tabeli:
ALTER TABLE item ADD COLUMN category citext;
Teraz tabela ma cztery kolumny zamiast trzech.
Wszystkie moje dotychczasowe pushe natychmiast przerwać, ponieważ teraz w danych wejściowych brakuje kolumny. Istnieje 0% szansy, że możemy zaktualizować cały serwer jednocześnie, więc nie ma takiej opcji.
Jednym z rozwiązań jest utworzenie niestandardowego typu dla każdej wersji tabeli:
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);
A potem funkcja dla każdego typu:
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.
Myślę, że możesz mieć jedną ogromną metodę, która pobiera dowolną tablicę i używa CASE do uporządkowania kodu do uruchomienia. Nie zrobiłbym tego z kilku powodów, ale przypuszczam, że możesz. (Widziałem, jak to podejście zmienia się w gangrenę w więcej niż jednym języku w naprawdę pośpiechu).
Wszystko to wydaje się być niezłą pracą. Czy brakuje mi prostszej techniki? Wyobrażam sobie, że możesz przesłać strukturalny tekst/XML/JSON, rozpakować go i stamtąd pracować. Ale nie plik, który pod "prostszym".
Oczywiście nadal pracuję nad projektem tutaj. Napisałem wystarczająco dużo kodu, aby przetestować to, co pokazałem, ale chcę uporządkować szczegóły przed powrotem i zaimplementowaniem tego na dziesiątkach tabel.
Dzięki za wszelką pomoc.