Postgresql Replication Solutions: Ruce Omjian
Postgresql Replication Solutions: Ruce Omjian
Replication Solutions
BRUCE MOMJIAN
May, 2014
Replication is a complex feature. POSTGRESQL supports a variety
of replication options.
Creative Commons Attribution License
http://momjian.us/presentations
1 / 18
Theolotech.com
Fail Over
111111
000000
0 1
1
0
000000
111111
0
1
0
000000
111111
0 1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
000000
111111
0
1
0
000000
111111
0 1
1
0
1
000000
111111
0
1
0
1
000000
111111
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
111111
000000
0 1
1
0
000000
111111
0
1
0
000000
111111
0 1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
000000
111111
0
1
0
000000
111111
0 1
1
0
1
000000
111111
0
1
0
1
000000
111111
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
PostgreSQL, Replication Solutions 3 / 18
Data Warehousing
111111
000000
0
0
1
1
000000
111111
0
0
1
1
000000
111111
0
1
0
1
0
0
1
1
0
0
1
1
000000
111111
0
0
1
1
000000
111111
0
1
0
1
000000
111111
0
0
1
1
000000
111111
0
0
1
1
0
0
1
1
0
1
0
1
0
0
1
1
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
0
1
00000
11111
0 1
1
0
1
00000
11111
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
0
1
00000
11111
0 1
0
1
1
111111
000000
0
0
1
1
000000
111111
0
0
1
1
000000
111111
0
1
0
1
0
0
1
1
0
0
1
1
000000
111111
0
0
1
1
000000
111111
0
1
0
1
000000
111111
0
0
1
1
000000
111111
0
0
1
1
0
0
1
1
0
1
0
1
0
0
1
1
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
0
1
00000
11111
0 1
1
0
1
00000
11111
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
0
1
00000
11111
0 1
0
1
1
PostgreSQL, Replication Solutions 4 / 18
Load Balancing
11111
00000
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
1
0
1
0
0
1
1
0
0
1
1
0
0
1
000000
111111
0 1
1
0
1
000000
111111
0
0
1
1
000000
111111
0
0
1
1
000000
111111
0
0
1
1
0
1
0
1
0
0
1
1
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
1
0
1
00000
11111
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
1
0
1
00000
11111
11111
00000
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
1
0
1
0
0
1
1
0
0
1
1
0
0
1
000000
111111
0 1
1
0
1
000000
111111
0
0
1
1
000000
111111
0
0
1
1
000000
111111
0
0
1
1
0
1
0
1
0
0
1
1
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
1
0
1
00000
11111
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
1
0
1
00000
11111
PostgreSQL, Replication Solutions 5 / 18
Remote Servers
0
1
0
1
11111
00000
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
0
1
0
0 1
1
0
1
0
1
0
000000
111111
0 1
1
0
1
000000
111111
0
1
0
1
000000
111111
0
1
0
000000
111111
0 1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
00000
11111
0
1
0
00000
11111
0 1
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
11111
00000
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
0
1
0
0 1
1
0
1
0
1
0
000000
111111
0 1
1
0
1
000000
111111
0
1
0
1
000000
111111
0
1
0
000000
111111
0 1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
00000
11111
0
1
0
00000
11111
0 1
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
PostgreSQL, Replication Solutions 6 / 18
Mobile Servers
111111
000000
0
0
1
1
000000
111111
0
0
1
1
000000
111111
0
0
1
1
0
0
1
1
0
0
1
1
000000
111111
0
0
1
1
000000
111111
0
0
1
000000
111111
0 1
0
1
1
000000
111111
0
1
0
0 1
0
1
1
0
0
1
1
0
0
1
0 1
0
1
1
00000
11111
0
1
0
1
00000
11111
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
1
0
1
00000
11111
0
0
1
1
00000
11111
0
0
1
1
00000
11111
0
0
1
00000
11111
0 1
0
1
1
PostgreSQL, Replication Solutions 7 / 18
Replication Solutions
Taotaomona Computing
Shared Storage
1
1
0
0
0000
1111
0
1
0
1
0000
1111
1
1
0
1
1
00
0
1111
0000
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
11
1
0
0
1
1
0
0
00000
11111
0
1
0
1
00000
11111
1
1
0
00000
11111
00
1
0
1
00000
11111
0
1
0
00000
11111
1
1
01
0
00000
11111
1
1
0
0
0000
1111
0
1
0
1
0000
1111
1
1
0
0
1
1
0
0
1111
0000
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
1
1
0
0
1
1
0
0
00000
11111
0
1
0
1
00000
11111
1
1
0
0
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
1
1
0
0
00000
11111
No overhead
NetworkAttached
Storage (NAS)
Storage Mirroring
0
1
0
1
1111
0000
0
0
1
1
0000
1111
0
1
0
01
1
0
1
0000
1111
0
1
0
1
0000
1111
0
0
1
1
0000
1111
0
1
0
1
0
1
0
1
0
1
0
00000
11111
01
0
1
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
00000
11111
01
1
0
1
00000
11111
0
1
0
1
1111
0000
0
0
1
1
0000
1111
0
1
0
01
1
0
1
0000
1111
0
1
0
1
0000
1111
0
0
1
1
0000
1111
0
1
0
1
0
1
0
1
0
1
0
00000
11111
01
0
1
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
00000
11111
01
1
0
1
00000
11111
No overhead on master
Synchronous or
asynchronous
DRBD
Streaming Replication
0
0
1
1
0000
1111
0
1
0
1
0000
1111
0
0
1
1
1111
0000
0
0
1
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0
0
1
1
0
0
1
1
00000
11111
0
1
0
1
00000
11111
0
0
1
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
0
1
1
00000
11111
Write
Ahead
Log
(WAL)
0
0
1
1
0000
1111
0
1
0
1
0000
1111
0
0
1
1
1111
0000
0
0
1
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0
0
1
1
0
0
1
1
00000
11111
0
1
0
00000
11111
01
0
1
1
00000
11111
0
1
0
1
00000
11111
0
1
0
00000
11111
01
0
1
1
00000
11111
No overhead on master
Synchronous option
available (Postgres 9.1)
Slony
11111
00000
0 1
0
1
1
00000
11111
0
1
00000
11111
0 0
0
1
1
0
0
1
1
0
1
0
000000
111111
0 1
1
0
1
000000
111111
0
1
0
000000
111111
0 1
0
1
1
000000
111111
0
0
1
1
0
1
0
0 1
0
1
1
0
1
0
0 1
1
0
1
00000
11111
0
0
1
1
00000
11111
0
1
0
00000
11111
0 1
0
1
1
00000
11111
0
1
0
00000
11111
0 1
1
0
1
00000
11111
0
0
1
1
00000
11111
0
1
0
00000
11111
0 1
0
1
1
Asynchronous
11111
00000
0 1
0
1
1
00000
11111
0
1
00000
11111
0 0
0
1
1
0
0
1
1
0
1
0
000000
111111
0 1
1
0
1
000000
111111
0
1
0
000000
111111
0 1
0
1
1
000000
111111
0
0
1
1
0
1
0
0 1
0
1
1
0
1
0
0 1
1
0
1
00000
11111
0
0
1
1
00000
11111
0
1
0
00000
11111
0 1
0
1
1
00000
11111
0
1
0
00000
11111
0 1
1
0
1
00000
11111
0
0
1
1
00000
11111
0
1
0
00000
11111
0 1
0
1
1
Table-level granularity
allows complex data
partitioning configurations
Slony Internals
User
11111111
00000000
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
11111111
00000000
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
00000000
11111111
000
111
User
Origin
Subscriber
111111111
000000000
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
sl_log
00000000
11111111
11111111
00000000
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
sl_log
00000000
11111111
11111111
00000000
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
000000000
111111111
00
11
111111111
000000000
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
000000000
111111111
00
11
CREATE
TRIGGER
fills sl_log
Other
Subscribers
CREATE
TRIGGER
prevents
modifications
CREATE
TABLE
Slonik
...
000000000
111111111
000
111
111111111
000000000
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
111111111
000000000
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
User
111111111
000000000
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
111111111
000000000
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
111111111
000000000
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
Origin
sl_log
11111111
00000000
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
Subscriber
sl_log
00000000
11111111
11111111
00000000
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
User
000000000
111111111
000
111
111111111
000000000
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
111111111
000000000
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
User
111111111
000000000
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
111111111
000000000
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
111111111
000000000
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
000000000
111111111
000
111
Subscriber
sl_log
11111111
00000000
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
Origin
sl_log
00000000
11111111
11111111
00000000
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
00000000
11111111
Bucardo
00000
11111
0 1
1
0
00000
11111
0
1
0
1
00000
11111
0
1
0
1
1
1
0
0 0
1
0
1
111111
000000
0
1
0
000000
111111
0 1
1
0
1
000000
111111
0
1
0
1
1
1
000000
111111
0 1
0
0
1
0
0
1
0
0 1
1
0
1
0
1
0
1
00000
11111
1
1
0 1
0
00000
11111
0
1
0
00000
11111
1
1
0 1
0
00000
11111
0
1
00000
11111
0 0
1
0
1
00000
11111
0
1
0
1
00000
11111
0 1
1
0
1
00000
11111
1
0
0
00000
11111
Asynchronous
00000
11111
0 1
1
0
00000
11111
0
1
0
1
00000
11111
0
1
0
1
1
1
0
0 0
1
0
1
111111
000000
0
1
0
000000
111111
0 1
1
0
1
000000
111111
0
1
0
1
1
1
000000
111111
0 1
0
0
1
0
0
1
0
0 1
1
0
1
0
1
0
1
00000
11111
1
1
0 1
0
00000
11111
0
1
0
00000
11111
1
1
0 1
0
00000
11111
0
1
00000
11111
0 0
1
0
1
00000
11111
0
1
0
1
00000
11111
0 1
1
0
1
00000
11111
1
0
0
00000
11111
Pgpool II
INSERT, UPDATE,
DELETE to all
hosts
0
0
1
1
1111
0000
0
1
0
1
1111
0000
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
0000
1111
01
1
0
1
0
0
1
1
0
1
0
11111
00000
01
1
0
1
00000
11111
0
1
0
00000
11111
01
1
0
1
00000
11111
0
0
1
00000
11111
01
1
0
1
00000
11111
0
1
0
1
1111
0000
0
0
1
1
1111
0000
0
1
0
1
1111
0000
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0
1
0
1
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
0
1
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
0
1
1
1111
0000
0
1
0
1
1111
0000
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0
0
1
1
0
1
0
1
11111
00000
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
0
1
1
00000
11111
0
1
0
1
00000
11111
Automatically
load-balances read queries
Queries with
non-deterministic behavior
can cause inconsistency
pgpool
SELECT
to any host
0
0
1
1
1111
0000
0
1
0
1
1111
0000
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
0000
1111
01
1
0
1
0
0
1
1
0
1
0
11111
00000
01
1
0
1
00000
11111
0
1
0
00000
11111
01
1
0
1
00000
11111
0
0
1
00000
11111
01
1
0
1
00000
11111
INSERT, UPDATE,
DELETE to master
host
0
1
0
1
1111
0000
0
1
0
1
1111
0000
0
0
1
1
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0
0
1
1
0
1
0
1
11111
00000
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
0
1
1
00000
11111
0
1
0
1
00000
11111
streaming
replication
Master
0
1
0
0000
1111
01
1
0
1
0000
1111
0
1
0
1111
0000
01
1
0
1
0000
1111
0
1
0
0000
1111
01
1
0
1
0000
1111
0
0
1
01
1
0
1
0
1
0
1
00000
11111
0
1
0
00000
11111
01
1
0
1
00000
11111
0
0
1
00000
11111
01
1
0
1
00000
11111
0
1
0
1
00000
11111
pgpool
SELECT
to any host
01
1
0
1
1111
0000
0
1
0
1111
0000
0
0
1
1
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
01
0
1
1
0
1
0
11111
00000
01
1
0
1
00000
11111
0
1
0
00000
11111
01
1
0
1
00000
11111
0
0
1
00000
11111
01
1
0
1
00000
11111
0
1
0
1
1111
0000
0
1
0
1
1111
0000
0
0
1
1
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0000
1111
0
1
0
1
0
0
1
1
0
1
0
1
11111
00000
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
1
0
1
00000
11111
0
0
1
1
00000
11111
0
1
0
1
00000
11111
Slave
Slave
replication
Summary
Feature
Most Popular
Implementation
Communication
Method
No Special
hardware required
Allows multiple
master servers
No master server
overhead
No waiting for
multiple servers
Master failure will
never lose data
Slaves accept
read-only queries
Per-table
granularity
No conflict
resolution
necessary
StatementBased
Replication
Middleware
Asynchchronous
MultiMaster
Replic.
Synchchronous
MultiMaster
Replic.
table rows
& row locks
Shared
Disk
Fail-over
File
System
Replic.
Transaction
WAL Log
Shipping
Triggerbased
Replic.
NAS
DRBD
disk
blocks
Log shipping
pgpool-II
WAL
Slony
table
rows
SQL
Bucardo
table
rows
shared disk
http://momjian.us/presentations
PostgreSQL, Replication Solutions 18 / 18