To zależy od twojego przypadku użycia. Powszechną praktyką jest obsługa tego w warstwie aplikacji. Zasadniczo to, co robisz, to replikowanie działań jednej bazy danych do drugiej. Na przykład, jeśli zapiszesz jeden wpis w postgresie, zrobisz to samo w elasticsearch.
Jeśli jednak to zrobisz, będziesz musiał mieć system kolejkowania. Albo kolejka jest zintegrowana z warstwą aplikacji, np. jeśli zapis w elasticsearch nie powiedzie się, możesz powtórzyć operację. Co więcej, w swoim systemie kolejkowym zaimplementujesz mechanizm dławienia, aby nie przytłaczać Elasticsearch. Innym podejściem byłoby wysyłanie zdarzeń do innej aplikacji (np. logstash itp.), więc ograniczanie przepustowości i trwałość będą obsługiwane przez ten system, a nie przez Twoją aplikację.
Innym podejściem byłoby to https://www.elastic.co/blog/ logstash-jdbc-input-plugin . Używasz innego systemu, który "odpytuje" Twoją bazę danych i wysyła zmiany do elasticsearch. W tym przypadku logstash jest idealny, ponieważ jest częścią stosu ELK i ma świetną integrację. Sprawdź też to https://www.elastic. co/guide/pl/logstash/current/plugins-inputs-jdbc.html
Innym podejściem jest użycie NOTIFY mechanizm postgresa do wysyłania zdarzeń do jakiejś kolejki, która zajmie się zapisywaniem zmian w elasticsearch.