Jump to: Postgres | MongoDB | MySQL

Postgres

Version compatibility: PowerSync requires Postgres version 11 or greater.

Configuring your Postgres database for PowerSync generally involves three tasks:

  1. Enable logical replication
  2. Create a PowerSync database user
  3. Create powersync logical replication publication

We have documented steps for some hosting providers:

For other providers and self-hosted databases:

Unsupported Hosted Postgres Providers

Due to the logical replication requirement, not all Postgres hosting providers are supported. Notably, some “serverless Postgres” providers do not support logical replication, and are therefore not supported by PowerSync yet.

MongoDB

Version compatibility: PowerSync requires MongoDB version 6.0 or greater.

Permissions required - MongoDB Atlas

For MongoDB Atlas databases, the minimum permissions when using built-in roles are:

readWrite@<your_database>._powersync_checkpoints
read@<your_database>

To allow PowerSync to automatically enable changeStreamPreAndPostImages on replicated collections (the default for new PowerSync instances), additionally add the dbAdmin permission:

readWrite@<your_database>._powersync_checkpoints
read@<your_database>
dbAdmin@<your_database>

If you are replicating from multiple databases in the cluster, you need read permissions on the entire cluster, in addition to the above:

readAnyDatabase@admin

Privileges required - Self-hosted / Custom roles

For self-hosted MongoDB, or for creating custom roles on MongoDB Atlas, PowerSync requires the following privileges/granted actions:

  • On the database being replicated: listCollections
  • On all collections in the database: changeStream
    • This must apply to the entire database, not individual collections. Specify collection: ""
    • If replicating from multiple databases, this must apply to the entire cluster. Specify db: ""
  • On each collection being replicated: find
  • On the _powersync_checkpoints collection: createCollection, dropCollection, find, changeStream, insert, update, and remove
  • To allow PowerSync to automatically enable changeStreamPreAndPostImages on replicated collections, additionally add the collMod permission on all replicated collections.

Post-Images

To replicate data from MongoDB to PowerSync in a consistent manner, PowerSync uses Change Streams with post-images to get the complete document after each change. This requires the changeStreamPreAndPostImages option to be enabled on replicated collections.

PowerSync supports three configuration options for post-images:

  1. Off: (post_images: off): Uses fullDocument: 'updateLookup' for backwards compatibility. This was the default for older instances. However, this may lead to consistency issues, so we strongly recommend enabling post-images instead.
  2. Automatic: (post_images: auto_configure) The default for new instances: Automatically enables the changeStreamPreAndPostImages option on collections as needed. Requires the permissions/privileges mentioned above. If a collection is removed from Sync Rules, developers can manually disable changeStreamPreAndPostImages.
  3. Read-only: (post_images: read_only): Uses fullDocument: 'required' and requires changeStreamPreAndPostImages: { enabled: true } to be set on every collection referenced in the Sync Rules. Replication will error if this is not configured. This option is ideal when permissions are restricted.

To manually configure collections for read_only mode, run this on each collection:

db.runCommand( {
 collMod: <collection>,
 changeStreamPreAndPostImages: { enabled: <boolean> }
} )

You can view which collections have the option enabled using:

db.getCollectionInfos().filter(c => c.options?.changeStreamPreAndPostImages?.enabled)

Post-images can be configured for PowerSync instances as follows:

PowerSync Cloud:

Configure the Post Images setting in the connection configuration in the Dashboard (right-click on your instance to edit it).

Self-Hosted PowerSync:

Configure post_images in the config.yaml file.

If you need to use private endpoints with MongoDB Atlas, see Private Endpoints (AWS only).

Migrating from MongoDB Atlas Device Sync

For more information on migrating from Atlas Device Sync to PowerSync, see our migration guide.

MySQL (Alpha)

This section is a work in progress. More details for MySQL connections are coming soon. In the meantime, ask on our Discord server if you have any questions.

Version compatibility: PowerSync requires MySQL version 5.7 or greater.

MySQL connections use the binary log to replicate changes.

Generally, this requires the following config:

  • gtid_mode : ON
  • enforce_gtid_consistency : ON
  • binlog_format : ROW

PowerSync also requires a user with replication permissions on the database. An example:

-- Create a user with necessary privileges
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'good_password';

-- Grant replication client privilege
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl_user'@'%';

-- Grant access to the specific database
GRANT ALL PRIVILEGES ON powersync.* TO 'repl_user'@'%';

-- Apply changes
FLUSH PRIVILEGES;

Next Step

Next, connect PowerSync to your database: