Isso é orientado para Java pesado, mas as APIs do cliente de banco de dados nativo podem ser conectadas às fontes de dados JDBC. O Tungsten Myosotis é um exemplo para o MySQL nativo da ponte JDBC.
Tungstênio Enterpriese é bom para multi-mestre assíncrono. Eu acho que funciona para MySQL, PostgreSQL e Oracle. Pode ser executado de forma independente ou incorporado em um aplicativo Java. Eu já vi isso funcionar no MySQL, mas eles reivindicam o PostgreSQL. O componente Replicator é de código aberto, mas a solução completa possui mais peças e requer custos de licenciamento. O Continuent originalmente possuía o Sequoia para multi-mestre síncrono, mas eles o abandonaram e, em vez disso, criaram o Tungsten para multi-mestre assíncrono - consideram escalar um negócio mais estratégico do que a consistência síncrona do ACID. O tungstênio é escrito em Java; é por isso que eles oferecem o Myosotis para conectar clientes de banco de dados nativos.
SymmetricDS é bom para multi-mestre assíncrono. É de código aberto. Ele instala / desinstala os gatilhos para capturar atualizações, em vez do log de posição. Pode ser executado de forma independente ou incorporado em um aplicativo Java.
O HA-JDBC é bom para síncrono multimestre. Ele substitui o software extinto mais antigo, como C-JDBC e Sequoia. É de código aberto. Ele usa commit de duas fases e trabalha para PostgreSQL, MySQL, Oracle, SQL Server, Derby, Sybase e muitos outros via dialetos. É principalmente para incorporado, portanto, incorpore em um aplicativo Java para conectá-lo ao PostgreSQL. Bloqueios distribuídos, sequências, hora, rand, etc. são tratados pelo jGroups do Redhat / JBoss. Um recurso interessante é o modo de transação "serial" em vez de "paralelo", se o seu aplicativo tiver conflitos e não suportar reversão. Usei esse modo "serial" com êxito para atualizar um aplicativo herdado que não tinha conhecimento do cluster de banco de dados e, portanto, estava faltando o código de nova tentativa de transação. O modo serial salvou o dia e evitou uma reescrita desagradável.
H2 é bom para multi-mestre síncrono. É de código aberto. Ele suporta bancos de dados ou clusters independentes usando confirmação de duas fases, semelhante à arquitetura HA-JDBC, mas é tudo em um, em vez de exigir um componente extra para confirmação de duas fases. Não tenho certeza se ele distribui bloqueios ou depende de terceiros, como jGroups ou Hazelcast.
Qualquer replicação baseada em JDBC para PostgreSQL e outros bancos de dados precisa de uma ponte nativa para JDBC, a menos que seu aplicativo já esteja gravado em Java. Para o MySQL, o Tungsten Enterprise oferece um componente opcional chamado Myosotis. Usei isso com êxito para conectar o PHP / Perl / C / mysqlclient ao JDBC, onde a fonte de dados JDBC era uma fonte de dados proxy HA-JDBC apontando para um cluster MySQL / InnoDB de 4 nós.
O Tungsten suporta o PostgreSQL nos componentes Replicator e Router, mas não tem certeza sobre o componente Myosotis. Talvez. Os componentes do replicador / roteador de tungstênio são para multi-mestre assíncrono, mas o Myosotis pode conectar você a um back-end JDBC alternativo, como HA-JDBC ou H2, para síncrona.
Se houver um nativo do PostgreSQL na ponte JDBC, eu gostaria de ouvir sobre isso. Em teoria, qualquer banco de dados com um driver JDBC Tipo 4 pode ser ponte. O JDBC do tipo 4 fala o protocolo de banco de dados nativo da mesma forma que a interface do cliente nativo para esse banco de dados; portanto, deve haver um mapeamento individual das chamadas nativas para chamadas JDBC.