Вставка в таблицу postgresql из триггера db2

Моя проблема заключается в следующем:

У меня есть база данных db2 и база данных postgres. Они на разных серверах. Каждый раз, когда я добавляю новую запись в таблицу db2, она также должна быть немедленно добавлена ​​в postgresql.

Я думал сделать это через триггер. Но я понятия не имею, что положить внутрь, чтобы вставить в postgresql. Я читал, может быть, я могу вызвать внешнюю хранимую процедуру, но я не совсем уверен, что это то, что я ищу.

Заранее спасибо!


person Ruben    schedule 08.04.2013    source источник


Ответы (1)


Хранимая процедура Java

Да, вы можете создать хранимую процедуру, например, на Java. Вы вызываете эту хранимую процедуру из своего триггера. А внутри хранимой процедуры Java вы создаете соединение с postgresql и вставляете полученные значения из DB2 и вставляете их в postgres. Я думаю, вам придется иметь дело с двумя подключениями, одним из DB2 и новым для postgres.

Существует много информации о хранимых процедурах Java:

Федерация: оболочка Postgres

Другой подход — создать оболочку для Postgresql. В настоящее время IBM предоставляет множество коннекторов через сервер InfoSphere Federation, но я не нашел ни одного для Postgres или Mysql. Однако вы можете создать свою собственную оболочку. Документация здесь:

Если вы хотите создать проект OpenSource для обёртки postgresql, мне будет интересно поучаствовать.

person AngocA    schedule 08.04.2013
comment
Одна вещь, которую следует учитывать при любом подходе, — это то, как справляться с ошибками. Я предполагаю, что если вставка postgres не удалась, то вставка DB2 также должна откатиться. Для триггера, может быть, это следует сделать «перед вставкой», чтобы вся вставка могла быть прервана, если возникла проблема с postgres? - person AngerClown; 08.04.2013
comment
перед вставкой или после вставки не влияет на транзакцию, если хранимая процедура выдает исключение/состояние sql при возникновении ошибки при выполнении. В обоих случаях транзакция будет отменена в DB2. - person AngocA; 08.04.2013
comment
Однако если хранимая процедура оборачивает все ошибки (попробуйте catch), то DB2 может зафиксировать, но в Postgres не будет соответствующего значения. - person AngocA; 08.04.2013
comment
Эти проблемы с синхронизацией не возникают при использовании оболочки. Он уже учитывает все эти случаи. - person AngocA; 08.04.2013
comment
@AngocA спасибо за вашу помощь. Кажется, это правильный путь. - person Ruben; 09.04.2013