Chapter 28. Logical Replication

Table of Contents

28.1. Publication
28.2. Subscription
28.2.1. Replication Slot Management
28.2.2. Examples: Set Up Logical Replication
28.2.3. Examples: Deferred Replication Slot Creation
28.3. Logical Replication Failover
28.4. Row Filters
28.4.1. Row Filter Rules
28.4.2. Expression Restrictions
28.4.3. UPDATE Transformations
28.4.4. Partitioned Tables
28.4.5. Initial Data Synchronization
28.4.6. Combining Multiple Row Filters
28.4.7. Examples
28.5. Column Lists
28.6. Conflicts
28.7. Restrictions
28.8. Architecture
28.9. Monitoring
28.10. Security
28.11. Configuration Settings
28.11.1. Publishers
28.11.2. Subscribers
28.12. Quick Setup

Logical replication is a method of replicating data objects and their changes, based upon their replication identity (usually a primary key). We use the term logical in contrast to physical replication, which uses exact block addresses and byte-by-byte replication. Postgres Pro supports both mechanisms concurrently, see Chapter 25. Logical replication allows fine-grained control over both data replication and security.

Logical replication uses a publish and subscribe model with one or more subscribers subscribing to one or more publications on a publisher node. Subscribers pull data from the publications they subscribe to and may subsequently re-publish data to allow cascading replication or more complex configurations.

Logical replication of a table typically starts with taking a snapshot of the data on the publisher database and copying that to the subscriber. Once that is done, the changes on the publisher are sent to the subscriber as they occur in real-time. The subscriber applies the data in the same order as the publisher so that transactional consistency is guaranteed for publications within a single subscription. This method of data replication is sometimes referred to as transactional replication.

The typical use-cases for logical replication are:

The subscriber database behaves in the same way as any other Postgres Pro instance and can be used as a publisher for other databases by defining its own publications. When the subscriber is treated as read-only by application, there will be no conflicts from a single subscription. On the other hand, if there are other writes done either by an application or by other subscribers to the same set of tables, conflicts can arise.