diff --git a/doc/src/sgml/logicaldecoding.sgml b/doc/src/sgml/logicaldecoding.sgml index 05d59ce..467b216 100644 --- a/doc/src/sgml/logicaldecoding.sgml +++ b/doc/src/sgml/logicaldecoding.sgml @@ -723,27 +723,61 @@ OutputPluginWrite(ctx, true); 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. - + + Overview + - - - 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 + + Caveats + + + + The use of any command to take an ACCESS EXCLUSIVE lock on [user] catalog tables + can cause the deadlock of logical decoding in synchronous mode. This means that + at the transaction commit, the command hangs or the server becomes to block + any new connections. To avoid this, users must refrain from such operations. + + + + When COMMIT is conducted for a transaction that has + issued explicit LOCK on pg_class + with logical decoding, the deadlock occurs. Also, committing one that runs + CLUSTER pg_class is another + deadlock scenario. - + + + The deadlock can happen when users execute TRUNCATE + on user_catalog_table under the condition that output plugin have reference to it. + +