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.