Subscriptions#
What Are Subscriptions in PostgreSQL?#
A PostgreSQL subscription connects to a publication and continuously replicates data changes (INSERT, UPDATE, DELETE) from a source database into a target database using logical replication.
A subscription is a logical replication object that connects to a publication and pulls data from it.
If Publication says βwhat to shareβ, Subscription says βI want to receive itβ.
Publication vs Subscription#
Aspect |
Publication |
Subscription |
|---|---|---|
Lives in |
Source database |
Target database |
Role |
Publisher |
Subscriber |
Defines |
What data is shared |
Where data is copied |
Direction |
Outgoing |
Incoming |
pgAdmin section |
Publications |
Subscriptions |
How Subscriptions Work#
- 1οΈ Publisher database
Has tables
Defines a publication
CREATE PUBLICATION my_pub FOR TABLE users;
- 2οΈ Subscriber database
Creates subscription
Connects to publisher
CREATE SUBSCRIPTION my_sub
CONNECTION 'host=source_host dbname=source_db user=rep_user password=secret'
PUBLICATION my_pub;
- 3οΈ PostgreSQL does the rest automatically
Copies existing data (initial sync)
Streams future changes
Keeps tables in sync
What Gets Replicated?#
- By default:
β INSERT
β UPDATE
β DELETE
β TRUNCATE (optional)
Same rules as publication.
What pgAdmin Shows Under βSubscriptionsβ
Database
βββ Subscriptions
βββ my_sub
- Clicking it shows:
Connection info
Status (active / inactive)
Publications linked
Replication slot used
Worker process
Important Subscription Options
Initial data copy
WITH (copy_data = true)
Disable initial copy:
WITH (copy_data = false)
Disable temporarily
ALTER SUBSCRIPTION my_sub DISABLE;
Enable again:
ALTER SUBSCRIPTION my_sub ENABLE;
π Permissions & Requirements
Requirement |
Needed |
|---|---|
Source user |
REPLICATION role |
Tables |
Must exist on subscriber |
Schema |
Must match |
Network |
Direct DB connection |
WAL |
Logical replication enabled |
β οΈ Very Important Limitations
β No conflict resolution
If both sides modify same row β β error
- β No DDL replication
Table structure changes not replicated
You must manually apply DDL
- β One-way only
Publisher β Subscriber
Not bi-directional (unless complex setup)
π Real-World Use Cases
- β Read replicas
Reporting / analytics DB
- β Microservices
User service subscribes to Auth DB
- β Multi-region sync
Central DB publishes
Regional DBs subscribe
- β ETL pipelines
Operational DB β Data warehouse
Real-World Analogy
Think of YouTube:
Concept |
PostgreSQL |
|---|---|
Channel |
Publication |
Subscriber |
Subscription |
Videos |
Data changes |
Notifications |
Replication stream |
You donβt get content unless you subscribe.
How to Check Subscription Status
SELECT * FROM pg_stat_subscription;
Check replication slots:
SELECT * FROM pg_replication_slots;
Publication + Subscription Summary
Source DB
βββ Publication
β
WAL logical stream
β
Target DB
βββ Subscription
.. note::
PostgreSQL subscriptions are part of logical replication and act as the receiving side of a publication. A subscription connects to a remote PostgreSQL database, fetches initial table data, and continuously applies data changes to keep the subscriber database in sync.