Não é possível executar vários servidores PostgreSQL a partir do mesmo diretório de dados, mesmo que todos, exceto um, sejam somente leitura. Absolutamente 100% sem suporte. Não pode ser feito. Desista agora.
Alguém pode um dia adicionar esse recurso, mas envolveria grandes alterações no PostgreSQL, já que o Pg depende muito de memória compartilhada e sinais para sincronização entre processos. Além disso, o shared_buffers
contém buffers "sujos" que ainda não foram escritos; estes podem ser escritos de forma preguiçosa porque o PostgreSQL sabe que todos os backends irão ler de lá e só irão para o disco se os dados não estiverem em shared_buffers
.
É possivelmente prático fazer isso com pequenas mudanças no PostgreSQL se todos os servidores forem somente leitura, mas eu não o investiguei porque é um uso bastante desinteressante -case.
As referências ao armazenamento compartilhado que você viu são somente para failover, não para operação simultânea. O manual é bem específico de que você precisa garantir que haja um cercamento apropriado para impedir o acesso simultâneo ao armazenamento por vários servidores de banco de dados e que a corrupção principal ocorrerá se você não o fizer.
Você precisará confiar na replicação ou usar outro mecanismo de banco de dados que ofereça suporte ao armazenamento compartilhado (e lide com o impacto no desempenho resultante).
Separadamente, embora: os bancos de dados geralmente sejam limitados por E / S. O armazenamento compartilhado não ganha nada se você agora tiver dois servidores com capacidade de 1000tps em vez de um servidor que pode fazer 2000. Ou, dadas as despesas de sincronização de um sistema de armazenamento compartilhado sem um barramento de baixa latência (pense Infiniband / Myrinet ), mais como dois servidores com capacidade de 200tps cada.