This guide explains how to use pgstream with Neon databases, covering snapshots and replication. 👉 Throughout this guide:Documentation Index
Fetch the complete documentation index at: https://xata.io/docs/llms.txt
Use this file to discover all available pages before exploring further.
pgstreamsourcerefers to the user provided in the pgstream source URL.pgstreamtargetrefers to the user provided in the pgstream target URL.
Snapshots
From Neon Database (Snapshots)
Quick Checklist
- Create a source user (
pgstreamsource) with access to required schemas/tables. - For roles without passwords → no special config needed.
- For roles with passwords → must use the
neondb_ownersuperuser. - Update YAML config with correct snapshot settings.
Steps
-
User privileges
Ensure the
pgstreamsourceuser (from the pgstream source URL) owns the database schema and tables you want to snapshot. -
Roles handling
- No roles → no changes required.
- Roles without passwords → no changes required.
- Roles with passwords → must use the
neondb_owneruser.
neondb_owneruser has access to thepg_authidtable required for snapshotting roles with passwords. Without this, you’ll see: -
Config when not snapshotting roles
If roles are disabled or not manually managed, add the following to avoid failures:
Example full configuration:
neondb_owner, neon_service, neon_superuser and cloud_admin) will not be snapshotted.
To Neon Database (Snapshots)
Quick Checklist
- Create a target user (
pgstreamtarget) for the pgstream target URL. - Grant privileges for schema/database ownership.
- Grant optional privileges depending on features (create DB, create roles).
- Use
disable_triggers: false(required for all non-neonusers).
Steps
Thepgstreamtarget user (from the pgstream target URL) must have the following privileges:
-
Schema ownership
-
Database creation (if
create_target_dbis enabled) -
Role creation (if
roles_snapshot_modeisenabled/no_passwords)⚠️pgstreamtargetmust already hold any privileges it assigns (e.g.,REPLICATION). -
Disable triggers (required for Neon)
⚠️ Not even the pseudo-superuser
neondb_owneruser can setsession_replication_roleon Neon databases.❌ If usingdisable_triggers: true, pgstream will fail with:
Replication
From Neon Database (Replication)
Quick Checklist
- Ensure logical replication is enabled on your Neon database.
- Use the
neondb_owneruser for initialization (only user with event trigger privileges). - Optionally use a different
pgstreamsourceuser for streaming.
Steps
-
Enable logical replication
Logical replication requires
wal_levelto be set tological. Check current setting:If not set tological, update it: Neon enables logical replication by default on most databases. If you seewal_level = replica, you can enable logical replication through the Neon Console:- Go to your project in the Neon Console
- Navigate to Settings → Replication
- Enable Logical replication
- No restart is required - Neon handles this automatically
-
Replication phases
- Initialization → requires elevated privileges to create schemas, event triggers, and replication slots.
- Streaming → can use a dedicated
pgstreamsourceuser.
Initialization
Initialization does the following:- Creates
pgstreamschema - Creates replication slot (if missing)
- Creates event triggers/functions for schema changes
neondb_owner user has sufficient privileges to create event triggers. Use the neondb_owner user for initialization:
Streaming
After initialization, you can:- Keep using
neondb_owner, or - Transfer ownership to a dedicated
pgstreamsourcerole.
To Neon Database (Replication)
Quick Checklist
- Ensure
pgstreamtargethas schema/database ownership. - If combined with snapshot → follow Snapshot target requirements.
Steps
Privileges required:Troubleshooting
permission denied for table pg_authid
permission denied for table pg_authid
Cause: Roles with passwords require pg_authid access.
Fix: Use
Fix: Use
neondb_owner user as source, or disable role passwords (roles_snapshot_mode: no_passwords).permission denied to set parameter "session_replication_role"
permission denied to set parameter "session_replication_role"
Cause: No available Neon users can set this parameter.
Fix: Set
Fix: Set
disable_triggers: false in target config.permission denied for schema public when transferring ownership
permission denied for schema public when transferring ownership
Cause: Target role lacks CREATE privilege on schema.
Fix: Grant CREATE on schema to the role:
Fix: Grant CREATE on schema to the role:
GRANT CREATE ON SCHEMA public TO role_name;Role creation fails
Role creation fails
Cause:
Fix: Grant required privileges to
pgstreamtarget lacks privileges it tries to assign.Fix: Grant required privileges to
pgstreamtarget first, or use a user with more privileges.