PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Подобряване на функция, която UPSERTs въз основа на входен масив

Имаме много различни сървъри, които се насочват към централните маси в 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, да го разопаковате и да работите от там. Но аз не бих файл, който под "по-просто."

Все още работя по дизайна тук, очевидно. Написах достатъчно код, за да тествам това, което съм показал, но искам да подредя подробностите, преди да се върна и да внедря това на десетки таблици.

Благодаря за всяка помощ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgres - където в (списък) - колоната не съществува

  2. SQLAlchemy:филтриране на стойности, съхранени във вложен списък на полето JSONB

  3. Как да завъртите регистрационните файлове на PgBouncer в Linux/Windows?

  4. Postgres не използва индекс, когато сканирането на индекса е много по-добър вариант

  5. Намек за PostgreSQL