Synchronous Replication Support for Logical Decoding
+
+
Overview
- Logical decoding can be used to build
- synchronous
- replication solutions with the same user interface as synchronous
- replication for streaming
- replication. To do this, the streaming replication interface
- (see ) must be used to stream out
- data. Clients have to send Standby status update (F)
- (see ) messages, just like streaming
- replication clients do.
-
-
-
- A synchronous replica receiving changes via logical decoding will work in
- the scope of a single database. Since, in contrast to
- that,
synchronous_standby_names currently is
- server wide, this means this technique will not work properly if more
- than one database is actively used.
+ Logical decoding can be used to build
+ synchronous
+ replication solutions with the same user interface as synchronous
+ replication for streaming
+ replication. To do this, the streaming replication interface
+ (see ) must be used to stream out
+ data. Clients have to send Standby status update (F)
+ (see ) messages, just like streaming
+ replication clients do.
+
+
+
+ A synchronous replica receiving changes via logical decoding will work in
+ the scope of a single database. Since, in contrast to
+ that,
synchronous_standby_names currently is
+ server wide, this means this technique will not work properly if more
+ than one database is actively used.
-
+
+
+
+
+
Caveats
+
+ In synchronous replication setup, a deadlock can happen, if the transaction
+ has locked [user] catalog tables exclusively. This is because logical decoding of
+ transactions can lock catalog tables to access them. To avoid this users
+ must refrain from taking an exclusive lock on [user] catalog tables. This can
+ happen in the following ways:
+
+
+
+ Issuing an explicit LOCK on pg_class
+ (or any other catalog table) in a transaction.
+
+
+
+
+ Perform CLUSTER on pg_class in a
+ transaction.
+
+
+
+
+ Executing TRUNCATE on [user] catalog table in a
+ transaction.
+
+
+
+
+