Postgresql: разделить ячейку, содержащую имена столбцов (WHERE Metacolumn = 'col1; col2; col3; ..'), в массив для динамического создания оператора INSERT - PullRequest
0 голосов
/ 08 марта 2019

В Postgresql (и Sybase ADS) я делаю свою собственную основанную на триггерах репликацию с несколькими хозяевами на обеих платформах, которая должна динамически обрабатывать различные составные ключи и иногда без PK в определенных таблицах.Чтобы упростить процесс, я пытаюсь автоматически сгенерировать INSERT / UPDATE / DELETE, где пользователь может выбрать столбцы, которые он хочет скопировать, перечислив имена столбцов в ячейке, разделенной точкой с запятой.

- "SELECT Address, city, us_state, zipcode FROM public.place;" будет таблица, которая должна быть реплицирована.Метатабельно для публикации / подписки будет иметь ячейку, содержащую «Address;city;us_state;zipcode».-Я использую триггеры вставки / обновления / удаления для захвата новых данных строки и хочу использовать столбцы для динамического создания оператора типа «insert into place (Address,city,us_state,zipcode) VALUES (NEW.Address,NEW.city,NEW.us_state,NEW.zipcode);», который можно прочитать и выполнить по назначению через скрипт.Я сделаю то же действие для UPDATE и DELETE, используя префикс OLD в сгенерированных инструкциях UPDATE и DELETE, где это необходимо.

Я не ищу кого-то, кто мог бы выполнить кучу работы, но чтобы дать представление о любомзадействованные функции, логика и утверждения.Спасибо за любые идеи или советы.

1 Ответ

0 голосов
/ 09 марта 2019

Вы можете разделить строку и создать массив, используя функцию regexp_split_to_array.

Возможно что-то вроде: regexp_split_to_array(metacolumn, ';')

Дополнительная информация о строковых функциях: https://www.postgresql.org/docs/9.6/functions-string.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...