The error “pg_replication_slots does not exist” typically occurs when you’re trying to query the `pg_replication_slots` system view in PostgreSQL, but it doesn’t exist in your version or you don’t have the necessary permissions.
## Common Causes and Solutions:
### 1. **PostgreSQL Version Too Old**
`pg_replication_slots` was introduced in **PostgreSQL 9.4**. If you’re using an older version:
“`sql
— Check your PostgreSQL version
SELECT version();
“`
**Solution**: Upgrade to PostgreSQL 9.4 or later.
### 2. **Missing Replication Slot Feature**

Replication slots require the `max_replication_slots` configuration to be set greater than 0.
**Solution**: Add to `postgresql.conf`:
“`ini
max_replication_slots = 10 # or any number > 0
wal_level = replica # or logical
“`
Then restart PostgreSQL:
“`bash
# Systemd
sudo systemctl restart postgresql
# Or init.d
sudo service postgresql restart
“`
### 3. **Permission Issues**
You need appropriate permissions to view replication slots.
**Solution**: Connect as a superuser or a user with replication privileges:
“`sql
— Connect as postgres user
sudo -u postgres psql
— Or grant privileges
GRANT pg_read_all_stats TO your_user;
“`
### 4. **Logical Replication Not Configured**
For logical replication slots, you need `wal_level = logical`.
**Solution**: Update `postgresql.conf`:
“`ini
wal_level = logical
max_replication_slots = 10
“`
### 5. **Alternative Queries for Older Versions**
If you can’t upgrade, check replication status differently:
For PostgreSQL 9.3 or earlier:
“`sql
— Check if replication is happening
SELECT * FROM pg_stat_replication;
— Check WAL sender status
SELECT * FROM pg_stat_wal_sender;
“`
### 6. **Verify the View Exists**
Check if the view exists in your database:
“`sql
— Check if the view exists
SELECT schemaname, tablename
FROM pg_tables
WHERE tablename = ‘pg_replication_slots’;
— Or for views
SELECT schemaname, viewname
FROM pg_views
WHERE viewname = ‘pg_replication_slots’;
“`
### Quick Diagnostic Script:
“`sql
— Run these to diagnose
SELECT version();
SHOW max_replication_slots;
SHOW wal_level;
SELECT current_user;
“`
After making configuration changes, remember to restart PostgreSQL and try querying again:
“`sql
SELECT * FROM pg_replication_slots;
“`
If you’re setting up replication for the first time, you might also need to create a replication slot:
“`sql
SELECT * FROM pg_create_physical_replication_slot(‘slot_name’);
— or for logical replication
SELECT * FROM pg_create_logical_replication_slot(‘slot_name’, ‘test_decoding’);
“`
Which PostgreSQL version are you using, and what are you trying to accomplish with replication slots?


