Мне нужен совет по поводу следующего сценария.
У меня есть несколько встроенных систем, поддерживающих базу данных PostgreSQL, работающих в разных местах, и у нас есть сервер, работающий на CentOS в наших помещениях.
Каждая системаработает в удаленном месте и имеет несколько таблиц в своей базе данных.Эти таблицы имеют те же имена, что и имена таблиц сервера, но каждая система имеет другое имя таблицы, чем другие системы, например:
система 1 имеет таблицы:
Система 2 имеет таблицы
Я хочу обновлять таблицы sys1_table1
, sys1_table2
, sys2_table1
и sys2_table2
на сервере при каждой вставке, выполненной в системе 1 и системе 2.
Одним из решений является запись триггера накаждая таблица, которая будет выполняться при каждой вставке таблиц обеих систем и вставлять одни и те же данные в таблицы сервера.Этот триггер также удалит записи в системах после вставки данных на сервер.Проблема с этим решением заключается в том, что если соединение с сервером не установлено из-за проблем с сетью, этот триггер не будет выполнен или вставка будет потрачена впустую.Я проверил следующее решение для этого триггера для вставки строк в удаленную базу данных после удаления
Второе решение заключается в репликации таблиц из системы 1 и системы 2 в таблицы сервера.Проблема с репликацией будет в том, что если мы удалим данные из систем, это также приведет к удалению записей на сервере.Я мог бы добавить альтернативный триггер для таблиц сервера, который обновит дублирующуюся таблицу, поэтому реплицированная таблица может опустеть и это не повлияет на данные, но создаст длинный список таблиц, если у нас более 200 систем.
Третье решение - написать внешнюю таблицу с использованием postgres_fdw или dblink и обновить данные внутри таблиц сервера, но повлияет ли это на данные внутри сервера, когда мы удаляем данные из таблицы системы, верно?И что произойдет, если нет соединения с сервером?
Четвертое решение - написать приложение на python внутри каждой системы, которое установит соединение с базой данных сервера и записать данные в режиме реального времени, и еслинет подключения к серверу, так как он будет хранить данные внутри sys1.table1
или sys2.table2
или независимо от того, к какой таблице принадлежат данные, и после повторного подключения код отправит данные таблиц в таблицы сервера.
Какой вариант будет наилучшим в соответствии с этим сценарием?Мне больше нравится решение триггера, но есть ли способ избежать потери данных в случае отключения от сервера?