Multiple Postgres Servers (one writer, multiple reader) with Shared Disk
Solution 1:
It is not possible to run multiple PostgreSQL servers from the same data directory, even if all but one are read-only. Absolutely 100% unsupported. Cannot be done. Give up now.
Somebody might one day add such a feature but it'd involve major changes to PostgreSQL, as Pg relies heavily on shared memory and signals for inter-process synchronization. Also, the shared_buffers
contain "dirty" buffers that aren't yet written out; these can be written out lazily because PostgreSQL knows all backends will read from there and only go to disk if the data isn't in shared_buffers
.
It's possibly practical to do it with minor changes to PostgreSQL if all the servers are read-only, but I haven't investigated it as it's a pretty uninteresting use-case.
The references to shared storage you've seen are only for failover, not concurrent operation. The manual is quite specific that you need to ensure there's proper fencing in place to prevent concurrent access to the storage by multiple DB servers and that major corruption will result if you don't.
You're going to have to rely on replication or use another DB engine that supports shared storage (and deals with the resulting performance impact).
Separately, though: DBs are often I/O limited. Shared storage doesn't gain you anything if you now have two servers capable of 1000tps instead of one server that can do 2000. Or, given the overheads of synchronisation of a shared storage system w/o a low-latency bus (think Infiniband/Myrinet), more like two servers capable of 200tps each.