Имаме много различни сървъри, които се насочват към централните маси в Postgres, което добавя още една бръчка. Ами ако добавя колона към моята таблица:
ALTER TABLE item ADD COLUMN category citext;
Сега таблицата има четири колони вместо три.
Всичките ми съществуващи натискания незабавно прекъсване, защото сега липсва колона от входовете. Има 0% шанс да можем да актуализираме целия сървър едновременно, така че това не е опция.
Едно решение е да създадете персонализиран тип за всяка версия на таблицата:
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);
И след това функция за всеки тип:
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.
Предполагам, че бихте могли да имате един-единствен огромен метод, който приема произволен масив и използва CASE, за да определи какъв код да стартира. Не бих направил това поради няколко причини, но предполагам, че бихте могли. (Виждал съм този подход да се превръща в гангрена на повече от един език в много бързане.)
Всичко това изглежда като добра работа. Има ли по-проста техника, която ми липсва? Представям си, че можете да изпратите структуриран текст/XML/JSON, да го разопаковате и да работите от там. Но аз не бих файл, който под "по-просто."
Все още работя по дизайна тук, очевидно. Написах достатъчно код, за да тествам това, което съм показал, но искам да подредя подробностите, преди да се върна и да внедря това на десетки таблици.
Благодаря за всяка помощ.