Dipende dal tuo caso d'uso. Una pratica comune è gestirla a livello di applicazione. Fondamentalmente quello che fai è replicare le azioni di un db sull'altro. Quindi, ad esempio, se salvi una voce in postgres, fai lo stesso in elasticsearch.
Se lo fai, tuttavia, dovrai disporre di un sistema di code in atto. La coda è integrata nel livello dell'applicazione, ad es. se il salvataggio in elasticsearch fallisce, puoi ripetere l'operazione. Inoltre sul tuo sistema di accodamento implementerai un meccanismo di limitazione per non sovraccaricare elasticsearch. Un altro approccio sarebbe inviare eventi a un'altra app (ad es. logstash ecc.), in modo che la limitazione e la persistenza saranno gestite da quel sistema e non dalla tua applicazione.
Un altro approccio sarebbe questo https://www.elastic.co/blog/ logstash-jdbc-plug-in-input . Utilizzi un altro sistema che "interroga" il tuo database e invia le modifiche a elasticsearch. In questo caso logstash è l'ideale poiché fa parte dello stack ELK e ha un'ottima integrazione. Controlla anche questo https://www.elastic. co/guide/en/logstash/current/plugins-inputs-jdbc.html
Un altro approccio consiste nell'usare NOTIFY meccanismo di postgres per inviare eventi a qualche coda che gestirà il salvataggio delle modifiche in elasticsearch.