From 4ecc5e3683cbf55d5bc0d8366edd5b5ed181c7bc Mon Sep 17 00:00:00 2001 From: Benita Volkmann Date: Fri, 28 Nov 2025 15:18:24 +0200 Subject: [PATCH 01/15] Add references (with placeholder) --- README.md | 1 + architecture/powersync-protocol.mdx | 2 +- installation/app-backend-setup.mdx | 2 +- .../writing-client-changes.mdx | 4 +- .../integrating-with-your-backend.mdx | 2 +- installation/database-connection.mdx | 23 ++++ installation/database-setup.mdx | 108 +++++++++++++++++- .../database-setup/private-endpoints.mdx | 2 +- installation/quickstart-guide.mdx | 2 +- integration-guides/coolify.mdx | 2 +- intro/powersync-overview.mdx | 4 +- intro/powersync-philosophy.mdx | 4 +- .../usage-and-billing-faq.mdx | 2 +- usage/sync-rules.mdx | 7 +- .../advanced-topics/sharded-databases.mdx | 2 +- usage/sync-rules/types.mdx | 6 + 16 files changed, 154 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 8fa4fc2a..449fdbe4 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ We use the following icons for supported backend databases and SDKs: - Postgres: `icon="elephant"` - MongoDB: `icon="leaf"` - MySQL: `icon="dolphin"` +- SQL Server: `icon="server"` - Flutter: `icon="flutter"` - React Native: `icon="react"` - Web: `icon="js"` diff --git a/architecture/powersync-protocol.mdx b/architecture/powersync-protocol.mdx index 89b466a9..8dc413a3 100644 --- a/architecture/powersync-protocol.mdx +++ b/architecture/powersync-protocol.mdx @@ -67,4 +67,4 @@ Write checkpoints are used to ensure clients have synced their own changes back Creating a write checkpoint is a separate operation, which is performed by the client after all data has been uploaded. It is important that this happens after the data has been written to the backend source database. -The server then keeps track of the current CDC stream position on the database (LSN in Postgres, resume token in MongoDB, or GTID + Binlog Position in MySQL), and notifies the client when the data has been replicated, as part of checkpoint data in the normal data stream. +The server then keeps track of the current CDC stream position on the database (LSN in Postgres, resume token in MongoDB, GTID + Binlog Position in MySQL, or CDC LSN in SQL Server), and notifies the client when the data has been replicated, as part of checkpoint data in the normal data stream. diff --git a/installation/app-backend-setup.mdx b/installation/app-backend-setup.mdx index b59b87eb..19c1ffd3 100644 --- a/installation/app-backend-setup.mdx +++ b/installation/app-backend-setup.mdx @@ -7,7 +7,7 @@ PowerSync generally assumes that you have some kind of "backend application" as When you integrate PowerSync into your app project, PowerSync relies on that "backend application" for a few purposes: -1. **Allowing client-side write operations to be uploaded** and [applied](/installation/app-backend-setup/writing-client-changes) to the backend database (Postgres, MongoDB or MySQL). When you write to the client-side SQLite database provided by PowerSync, those writes are also placed into an upload queue. The PowerSync Client SDK manages uploading of those writes to your backend using the `uploadData()` function that you defined in the [Client-Side Setup](/installation/client-side-setup/integrating-with-your-backend) part of the implementation. That `uploadData()` function should call your backend application API to apply the writes to your backend database. The reason why we designed PowerSync this way is to give you full control over things like data validation and authorization of writes, while PowerSync itself requires minimal permissions. +1. **Allowing client-side write operations to be uploaded** and [applied](/installation/app-backend-setup/writing-client-changes) to the backend database (Postgres, MongoDB, MySQL, or SQL Server/Azure SQL). When you write to the client-side SQLite database provided by PowerSync, those writes are also placed into an upload queue. The PowerSync Client SDK manages uploading of those writes to your backend using the `uploadData()` function that you defined in the [Client-Side Setup](/installation/client-side-setup/integrating-with-your-backend) part of the implementation. That `uploadData()` function should call your backend application API to apply the writes to your backend database. The reason why we designed PowerSync this way is to give you full control over things like data validation and authorization of writes, while PowerSync itself requires minimal permissions. 2. **Authentication integration:** Your backend is responsible for securely generating the [JWTs](/installation/authentication-setup) used by the PowerSync Client SDK to authenticate with the [PowerSync Service](/architecture/powersync-service). diff --git a/installation/app-backend-setup/writing-client-changes.mdx b/installation/app-backend-setup/writing-client-changes.mdx index 9e6babad..01b5539a 100644 --- a/installation/app-backend-setup/writing-client-changes.mdx +++ b/installation/app-backend-setup/writing-client-changes.mdx @@ -17,13 +17,13 @@ Since you get to define the client-side `uploadData()` function as you wish, you You can also use any API style you want — e.g. REST, GraphQL, gRPC, etc. -It's important that your API endpoint be blocking/synchronous with underlying writes to the backend database (Postgres, MongoDB or MySQL). +It's important that your API endpoint be blocking/synchronous with underlying writes to the backend database (Postgres, MongoDB, MySQL, or SQL Server/Azure SQL). In other words, don't place writes into something like a queue for processing later — process them immediately. For more details, see the explainer below. -PowerSync uses a server-authoritative architecture with a checkpoint system for conflict resolution and [consistency](/architecture/consistency). The client advances to a new write checkpoint after uploads have been processed, so if the client believes that the server has written changes into your backend database (Postgres, MongoDB or MySQL), but the next checkpoint does not contain your uploaded changes, those changes will be removed from the client. This could manifest as UI glitches for your end-users, where the changes disappear from the device for a few seconds and then re-appear. +PowerSync uses a server-authoritative architecture with a checkpoint system for conflict resolution and [consistency](/architecture/consistency). The client advances to a new write checkpoint after uploads have been processed, so if the client believes that the server has written changes into your backend database (Postgres, MongoDB, MySQL, or SQL Server/Azure SQL), but the next checkpoint does not contain your uploaded changes, those changes will be removed from the client. This could manifest as UI glitches for your end-users, where the changes disappear from the device for a few seconds and then re-appear. ### Write operations recorded on the client diff --git a/installation/client-side-setup/integrating-with-your-backend.mdx b/installation/client-side-setup/integrating-with-your-backend.mdx index abf43b01..ac39b505 100644 --- a/installation/client-side-setup/integrating-with-your-backend.mdx +++ b/installation/client-side-setup/integrating-with-your-backend.mdx @@ -7,7 +7,7 @@ After you've [instantiated](/installation/client-side-setup/instantiate-powersyn | Purpose | Description | |---------|-------------| -| **Uploading writes to your backend:** | Writes that are made to the client-side SQLite database are uploaded to your backend application, where you control how they're applied to your backend database (Postgres, MongoDB or MySQL). This is how PowerSync achieves bi-directional syncing of data. | +| **Uploading writes to your backend:** | Writes that are made to the client-side SQLite database are uploaded to your backend application, where you control how they're applied to your backend database (Postgres, MongoDB, MySQL, or SQL Server/Azure SQL). This is how PowerSync achieves bi-directional syncing of data. | | **Authentication integration:** | PowerSync uses JWTs for authentication between the Client SDK and PowerSync Service. Your backend application should be able to generate JWTs that the PowerSync Client SDK can retrieve and use for authentication against your [PowerSync Service](/architecture/powersync-service) instance. | Accordingly, you must pass a _backend connector_ as an argument when you call `connect()` on the client-side PowerSync database. You must define that backend connector, and it must implement two functions/methods: diff --git a/installation/database-connection.mdx b/installation/database-connection.mdx index d29d4991..9b4bcc16 100644 --- a/installation/database-connection.mdx +++ b/installation/database-connection.mdx @@ -228,3 +228,26 @@ For other providers and self-hosted databases: Make sure that your MySQL database allows access to PowerSync's IPs — see [Security and IP Filtering](/installation/database-setup/security-and-ip-filtering) +## SQL Server/Azure SQL (Alpha) Specifics + +1. In the [PowerSync Dashboard](https://dashboard.powersync.com/), select your project and instance and go to the **Database Connections** view. +2. Click **Connect to Source Database** and ensure the **"SQL Server"** tab is selected. +3. Fill in your SQL Server connection details: + 1. "**Name**", "**Host**", "**Port**", "**Database name**", "**Username**", "**Password**" are required. + 2. "**Name**" can be any name for the connection. + 3. "**Host**" is the endpoint for your SQL Server instance. + 4. "**Port**" is typically 1433 for SQL Server (default port). + 5. "**Database name**" is the database where CDC is enabled. + 6. "**Username**" and "**Password**" maps to the database user created in [Source Database Setup](/installation/database-setup#sql-server-alpha) (e.g., `powersync_user`). +4. Click **Test Connection** and fix any errors. +5. Click **Save Connection**. + +PowerSync deploys and configures an isolated cloud environment for you, which can take a few minutes to complete. + + + Make sure that your SQL Server/Azure SQL database allows access to PowerSync's IPs — see [Security and IP Filtering](/installation/database-setup/security-and-ip-filtering) + + +Also see: +- [SQL Server Setup](/installation/database-setup#sql-server-alpha) + diff --git a/installation/database-setup.mdx b/installation/database-setup.mdx index 2eb136f0..f8772f82 100644 --- a/installation/database-setup.mdx +++ b/installation/database-setup.mdx @@ -4,7 +4,7 @@ description: "Configure your backend database for PowerSync, including permissio sidebarTitle: "Overview" --- -Jump to: [Postgres](#postgres) | [MongoDB](#mongodb) | [MySQL](#mysql-beta) +Jump to: [Postgres](#postgres) | [MongoDB](#mongodb) | [MySQL](#mysql-beta) | [SQL Server](#sql-server-alpha) import PostgresPowerSyncUser from '/snippets/postgres-powersync-user.mdx'; import PostgresPowerSyncPublication from '/snippets/postgres-powersync-publication.mdx'; @@ -399,6 +399,112 @@ binlog-do-db=invoices_db binlog-ignore-db=user_db ``` +## SQL Server (Alpha) + + + **Version compatibility**: PowerSync requires SQL Server 2022+ or Azure SQL Database. + + +PowerSync replicates data from SQL Server using Change Data Capture (CDC). This process builds up change tables based on changes to tracked tables. The change tables are populated by reading from the SQL Server transaction log on a fixed interval. PowerSync then polls these CDC tables for changes using built-in stored procedures. + +### Supported Editions/Versions + +| Database | Edition | Version | Min Service Tier | +|----------|---------|---------|------------------| +| SQL Server 2022+ | Standard, Enterprise, Developer, Evaluation | 16.0+ | N/A | +| Azure SQL* | Database, Managed instance | N/A | Any service tier on Vcore subscription model. S3 tier and up on DTU purchasing model. | + +\* Azure SQL Database is always running on the latest version of the SQL Server DB Engine + +### Database Setup Requirements + +#### 1. Enable CDC on the Database + +Change Data Capture (CDC) needs to be enabled on the database: + +```sql +-- Enable CDC on the database +EXEC sys.sp_cdc_enable_db; +``` + +#### 2. Enable CDC on Tables + +CDC must be enabled for the specific tables that need to be replicated: + +```sql +-- Enable CDC on a specific table +EXEC sys.sp_cdc_enable_table + @source_schema = N'dbo', + @source_name = N'your_table_name', + @role_name = N'cdc_reader', + @supports_net_changes = 1; +``` + +Repeat this for each table you want to replicate. + +#### 3. Create Database User + +Create a database user that has: +- Read access to the replicated tables (`db_datareader` role) +- Read access to the CDC tables (`cdc_reader` role) + +```sql +-- Create a user for PowerSync +CREATE USER powersync_user WITH PASSWORD = 'your_secure_password'; + +-- Grant read access to replicated tables +ALTER ROLE db_datareader ADD MEMBER powersync_user; + +-- Grant access to CDC tables +ALTER ROLE cdc_reader ADD MEMBER powersync_user; +``` + +Alternatively, you can grant more granular permissions: + +```sql +-- Grant SELECT on specific tables +GRANT SELECT ON dbo.your_table_name TO powersync_user; + +-- Grant access to CDC schema +GRANT SELECT ON SCHEMA::cdc TO powersync_user; +``` + +### CDC Management + +Management of CDC is up to the developer, though there are some settings of interest to PowerSync: + +#### Retention Period + +The retention period before data is expired from the CDC tables. Default is 3 days. You can check and modify this: + +```sql +-- Check current retention period (in minutes) +EXEC sys.sp_cdc_help_jobs; + +-- Change retention period (in minutes, e.g., 4320 = 3 days) +EXEC sys.sp_cdc_change_job + @job_type = N'cleanup', + @retention = 4320; +``` + +#### Polling Interval + +The polling interval of the CDC capture job determines how often the capture job reads changes from the transaction log. Default is every 5 seconds. Can be set to 0 so that there is zero downtime between scans, but this can impact DB performance. + +```sql +-- Check current polling interval +EXEC sys.sp_cdc_help_jobs; + +-- Change polling interval (in seconds, 0 = continuous scanning) +EXEC sys.sp_cdc_change_job + @job_type = N'capture', + @pollinginterval = 5; +``` + + + Setting the polling interval to 0 (continuous scanning) can impact database performance. Monitor your database performance when adjusting this setting. + + ## Next Step Next, connect PowerSync to your database: diff --git a/installation/database-setup/private-endpoints.mdx b/installation/database-setup/private-endpoints.mdx index 784d2934..a418d8cc 100644 --- a/installation/database-setup/private-endpoints.mdx +++ b/installation/database-setup/private-endpoints.mdx @@ -14,7 +14,7 @@ Do not rely on Private Endpoints as the only form of security. Always use strong ## Current Limitations -1. Private Endpoints are currently only supported for Postgres and MongoDB instances. [Contact us](/resources/contact-us) if you need this for MySQL. +1. Private Endpoints are currently only supported for Postgres and MongoDB instances. [Contact us](/resources/contact-us) if you need this for MySQL or SQL Server/Azure SQL. 2. Self-service is not yet available on the PowerSync side — [contact PowerSync support](/resources/contact-us) to configure the instance. 3. Only AWS is supported currently — other cloud providers are not supported yet. 4. The **"Test Connection"** function on the [PowerSync Dashboard](https://dashboard.powersync.com/) is not supported yet - the instance has to be deployed to test the connection. diff --git a/installation/quickstart-guide.mdx b/installation/quickstart-guide.mdx index 73d62d9a..bac21827 100644 --- a/installation/quickstart-guide.mdx +++ b/installation/quickstart-guide.mdx @@ -3,7 +3,7 @@ title: "Quickstart Guide / Installation Overview" sidebarTitle: "Quickstart / Overview" --- -PowerSync is designed to be stack agnostic, and currently supports [Postgres](/installation/database-setup#postgres), [MongoDB](/installation/database-setup#mongodb) and [MySQL](/installation/database-setup#mysql-beta) (Beta) as the backend source database, and has the following official client-side SDKs available: +PowerSync is designed to be stack agnostic, and currently supports [Postgres](/installation/database-setup#postgres), [MongoDB](/installation/database-setup#mongodb), [MySQL](/installation/database-setup#mysql-beta) (Beta), and [SQL Server/Azure SQL](/installation/database-setup#sql-server-alpha) (Alpha) as the backend source database, and has the following official client-side SDKs available: - [**Dart/Flutter**](/client-sdk-references/flutter) (mobile and [web](/client-sdk-references/flutter/flutter-web-support)) - [**React Native**](/client-sdk-references/react-native-and-expo) (mobile and [web](/client-sdk-references/react-native-and-expo/react-native-web-support)) - [**JavaScript Web**](/client-sdk-references/javascript-web) (including integrations for React, Vue and TanStack) diff --git a/integration-guides/coolify.mdx b/integration-guides/coolify.mdx index 7ec560d7..20396e6a 100644 --- a/integration-guides/coolify.mdx +++ b/integration-guides/coolify.mdx @@ -122,7 +122,7 @@ The following configuration options should be updated: PS_DATABASE_TYPE - postgresql OR mongodb OR mysql + postgresql OR mongodb OR mysql OR sqlserver PS_DATABASE_URI diff --git a/intro/powersync-overview.mdx b/intro/powersync-overview.mdx index bc155114..743b80e5 100644 --- a/intro/powersync-overview.mdx +++ b/intro/powersync-overview.mdx @@ -17,12 +17,14 @@ It lets you avoid the complexities of using APIs to move app state [over the net PowerSync is designed to be backend database agnostic, and currently supports: - + + + ### Supported Client SDKs diff --git a/intro/powersync-philosophy.mdx b/intro/powersync-philosophy.mdx index 9208bd6a..6837710f 100644 --- a/intro/powersync-philosophy.mdx +++ b/intro/powersync-philosophy.mdx @@ -13,7 +13,7 @@ The app is always [fast and responsive](https://www.powersync.com/blog/local-fir PowerSync lets you avoid the complexities of using APIs to move app state [over the network](https://www.powersync.com/blog/escaping-the-network-tarpit). Its goal is to solve the hard problems of keeping data in sync, without getting in your way. -You use a standard Postgres, MongoDB or MySQL \[[1](#footnotes)\] database on the server, a standard SQLite database on the client, and your [own backend](/installation/app-backend-setup) to process writes. PowerSync simply keeps the SQLite database in sync with your backend/server database. +You use a standard Postgres, MongoDB, MySQL, or SQL Server/Azure SQL \[[1](#footnotes)\] database on the server, a standard SQLite database on the client, and your [own backend](/installation/app-backend-setup) to process writes. PowerSync simply keeps the SQLite database in sync with your backend/server database. #### State Management @@ -38,7 +38,7 @@ Our goal is also to be stack-agnostic: whether you are switching from MySQL to P #### Simplicity -You use plain Postgres, MongoDB or MySQL on the server — no extensions, and no significant change in your schema required \[[2](#footnotes)\]. PowerSync [uses](/installation/database-setup) Postgres logical replication, MongoDB change streams or the MySQL binlog to replicate changes to the [PowerSync Service](/architecture/powersync-service), where data is transformed and partitioned according to [Sync Rules](/usage/sync-rules), and persisted in a way that allows efficiently streaming incremental changes to each client. +You use plain Postgres, MongoDB, MySQL, or SQL Server/Azure SQL on the server — no extensions, and no significant change in your schema required \[[2](#footnotes)\]. PowerSync [uses](/installation/database-setup) Postgres logical replication, MongoDB change streams, MySQL binlog, or SQL Server Change Data Capture (CDC) to replicate changes to the [PowerSync Service](/architecture/powersync-service), where data is transformed and partitioned according to [Sync Rules](/usage/sync-rules), and persisted in a way that allows efficiently streaming incremental changes to each client. PowerSync has been used in apps with hundreds of tables. There are no complex migrations to run: You define your [Sync Rules](/usage/sync-rules) and [client-side schema](/installation/client-side-setup/define-your-schema), and the data is automatically kept in sync. If you [change Sync Rules](/usage/lifecycle-maintenance/implementing-schema-changes), the entire new set of data is applied atomically on the client. When you do need to make schema changes on the server while still supporting older clients, we [have the processes in place](/usage/lifecycle-maintenance/implementing-schema-changes) to do that without hassle. diff --git a/resources/usage-and-billing/usage-and-billing-faq.mdx b/resources/usage-and-billing/usage-and-billing-faq.mdx index 67c4c20c..a3199ccb 100644 --- a/resources/usage-and-billing/usage-and-billing-faq.mdx +++ b/resources/usage-and-billing/usage-and-billing-faq.mdx @@ -74,7 +74,7 @@ description: "Usage and billing FAQs and troubleshooting strategies." Data processing was calculated as the total uncompressed size of data replicated from your source database(s) to PowerSync Service instances, plus data synced from PowerSync Service instances to user devices. These values are still available in your [Usage metrics](/usage/tools/monitoring-and-alerting#usage-metrics) as "Data replicated per day/hour" and "Data synced per day/hour". - Data replicated refers to activity from your backend database (Postgres/MongoDB or MySQL database) to the PowerSync Service — this is not billed. + Data replicated refers to activity from your backend database (Postgres, MongoDB, MySQL, or SQL Server/Azure SQL database) to the PowerSync Service — this is not billed. Data synced refers to data streamed from the PowerSync Service to client devices — this is used for billing. diff --git a/usage/sync-rules.mdx b/usage/sync-rules.mdx index c97e18b8..ee12315b 100644 --- a/usage/sync-rules.mdx +++ b/usage/sync-rules.mdx @@ -26,11 +26,8 @@ We encourage you to explore Sync Streams for new projects, and migrating to Sync ## Defining Sync Rules -Each [PowerSync Service](/architecture/powersync-service) instance has a Sync Rules configuration where Sync Rules are defined using SQL-like queries (limitations and more info [here](/usage/sync-rules/operators-and-functions)) combined together in a YAML file. - -This SQL-like syntax is used when connecting to either Postgres, MongoDB or MySQL as the backend source database. - -The [PowerSync Service](/architecture/powersync-service) uses these SQL-like queries to group data into "sync buckets" when replicating data to client devices. +Each [PowerSync Service](/architecture/powersync-service) instance has a Sync Rules configuration where Sync Rules are defined using SQL-like queries (limitations and more info [here](/usage/sync-rules/operators-and-functions)) combined together in a YAML file. +The Service uses these SQL-like queries to group data into "sync buckets" when replicating data from your backend source database to client devices. diff --git a/usage/sync-rules/advanced-topics/sharded-databases.mdx b/usage/sync-rules/advanced-topics/sharded-databases.mdx index b9bf1201..0f202624 100644 --- a/usage/sync-rules/advanced-topics/sharded-databases.mdx +++ b/usage/sync-rules/advanced-topics/sharded-databases.mdx @@ -8,7 +8,7 @@ In the case of Postgres, PowerSync cannot replicate Postgres [foreign tables](ht However, PowerSync does have options available to support sharded databases in general. - When using MongoDB or MySQL as the backend source database, PowerSync does not currently support connecting to sharded clusters. + When using MongoDB, MySQL, or SQL Server/Azure SQL as the backend source database, PowerSync does not currently support connecting to sharded clusters. The primary options are: diff --git a/usage/sync-rules/types.mdx b/usage/sync-rules/types.mdx index 430ec0a4..e596d6f0 100644 --- a/usage/sync-rules/types.mdx +++ b/usage/sync-rules/types.mdx @@ -105,3 +105,9 @@ MySQL values are mapped according to this table: Binary data can be accessed in the Sync Rules, but cannot be used as bucket parameters. Before it can be synced directly to clients it needs to be converted to hex or base64 first. See [Operators & Functions](/usage/sync-rules/operators-and-functions) + +## SQL Server (Alpha) Type Mapping + + + Type mappings between SQL Server and SQLite need to be documented. This section will be completed in a future update. + \ No newline at end of file From 2a272f2ccaee10a6b1db9fa114ea62e264fd528c Mon Sep 17 00:00:00 2001 From: Benita Volkmann Date: Fri, 28 Nov 2025 15:32:31 +0200 Subject: [PATCH 02/15] Scripts from self-host-example --- installation/database-setup.mdx | 140 ++++++++++++++++++++++++++------ integration-guides/coolify.mdx | 2 +- 2 files changed, 114 insertions(+), 28 deletions(-) diff --git a/installation/database-setup.mdx b/installation/database-setup.mdx index f8772f82..aef87a27 100644 --- a/installation/database-setup.mdx +++ b/installation/database-setup.mdx @@ -423,55 +423,141 @@ PowerSync replicates data from SQL Server using Change Data Capture (CDC). This Change Data Capture (CDC) needs to be enabled on the database: ```sql --- Enable CDC on the database -EXEC sys.sp_cdc_enable_db; +-- Enable CDC on the database (idempotent) +IF NOT EXISTS (SELECT 1 FROM sys.databases WHERE name = DB_NAME() AND is_cdc_enabled = 1) +BEGIN + EXEC sys.sp_cdc_enable_db; +END +GO ``` -#### 2. Enable CDC on Tables +#### 2. Create the PowerSync Checkpoints Table -CDC must be enabled for the specific tables that need to be replicated: +PowerSync requires a `_powersync_checkpoints` table to generate regular updates. This table must be CDC enabled: ```sql --- Enable CDC on a specific table -EXEC sys.sp_cdc_enable_table - @source_schema = N'dbo', - @source_name = N'your_table_name', - @role_name = N'cdc_reader', - @supports_net_changes = 1; +-- Create the PowerSync checkpoints table (idempotent) +IF NOT EXISTS (SELECT 1 FROM sys.tables WHERE name = '_powersync_checkpoints' AND schema_id = SCHEMA_ID('dbo')) +BEGIN + CREATE TABLE dbo._powersync_checkpoints ( + id INT PRIMARY KEY IDENTITY(1,1), + checkpoint_data NVARCHAR(MAX), + created_at DATETIME2 DEFAULT GETUTCDATE() + ); +END +GO + +-- Enable CDC on the checkpoints table (idempotent) +IF NOT EXISTS (SELECT 1 FROM cdc.change_tables WHERE source_object_id = OBJECT_ID(N'dbo._powersync_checkpoints')) +BEGIN + EXEC sys.sp_cdc_enable_table + @source_schema = N'dbo', + @source_name = N'_powersync_checkpoints', + @role_name = N'cdc_reader', + @supports_net_changes = 1; +END +GO ``` -Repeat this for each table you want to replicate. +#### 3. Enable CDC on Tables -#### 3. Create Database User - -Create a database user that has: -- Read access to the replicated tables (`db_datareader` role) -- Read access to the CDC tables (`cdc_reader` role) +CDC must be enabled for all tables that need to be replicated. Use idempotent guards to safely re-run the script: ```sql --- Create a user for PowerSync -CREATE USER powersync_user WITH PASSWORD = 'your_secure_password'; +-- Enable CDC for a specific table (idempotent guard) +IF NOT EXISTS (SELECT 1 FROM cdc.change_tables WHERE source_object_id = OBJECT_ID(N'dbo.your_table_name')) +BEGIN + EXEC sys.sp_cdc_enable_table + @source_schema = N'dbo', + @source_name = N'your_table_name', + @role_name = N'cdc_reader', + @supports_net_changes = 0; +END +GO +``` + +Repeat this for each table you want to replicate. Note that `@supports_net_changes` can be set to `0` or `1` depending on your requirements. + +#### 4. Create Database User --- Grant read access to replicated tables -ALTER ROLE db_datareader ADD MEMBER powersync_user; +Create a database user with the following permissions: --- Grant access to CDC tables -ALTER ROLE cdc_reader ADD MEMBER powersync_user; +**Required permissions:** +- Read/Write permissions on the `_powersync_checkpoints` table +- Read permissions on the replicated tables +- `cdc_reader` role (grants access to CDC tables and functions) +- `VIEW DATABASE PERFORMANCE STATE` (SQL Server and Azure SQL) +- `VIEW SERVER PERFORMANCE STATE` (SQL Server only - not required for Azure SQL) + +```sql +-- Create a user for PowerSync (idempotent) +IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = 'powersync_user') +BEGIN + CREATE USER powersync_user WITH PASSWORD = 'your_secure_password'; +END +GO + +-- Grant read/write access to the checkpoints table +GRANT SELECT, INSERT, UPDATE, DELETE ON dbo._powersync_checkpoints TO powersync_user; +GO + +-- Grant read access to replicated tables (using db_datareader role) +IF IS_ROLEMEMBER('db_datareader', 'powersync_user') = 0 +BEGIN + ALTER ROLE db_datareader ADD MEMBER powersync_user; +END +GO + +-- Grant access to CDC tables and functions +IF IS_ROLEMEMBER('cdc_reader', 'powersync_user') = 0 +BEGIN + ALTER ROLE cdc_reader ADD MEMBER powersync_user; +END +GO + +-- Grant performance state permissions +-- Note: For Azure SQL, only VIEW DATABASE PERFORMANCE STATE is required +GRANT VIEW DATABASE PERFORMANCE STATE TO powersync_user; +GO + +-- VIEW SERVER PERFORMANCE STATE is only available on SQL Server (not Azure SQL) +IF SERVERPROPERTY('EngineEdition') != 5 -- 5 = Azure SQL Database +BEGIN + GRANT VIEW SERVER PERFORMANCE STATE TO powersync_user; +END +GO ``` -Alternatively, you can grant more granular permissions: +Alternatively, you can grant more granular permissions on specific tables: ```sql -- Grant SELECT on specific tables GRANT SELECT ON dbo.your_table_name TO powersync_user; - --- Grant access to CDC schema -GRANT SELECT ON SCHEMA::cdc TO powersync_user; +GO + +-- Grant read/write on checkpoints table +GRANT SELECT, INSERT, UPDATE, DELETE ON dbo._powersync_checkpoints TO powersync_user; +GO + +-- Grant performance state permissions +GRANT VIEW DATABASE PERFORMANCE STATE TO powersync_user; +GO + +-- VIEW SERVER PERFORMANCE STATE is only available on SQL Server (not Azure SQL) +IF SERVERPROPERTY('EngineEdition') != 5 -- 5 = Azure SQL Database +BEGIN + GRANT VIEW SERVER PERFORMANCE STATE TO powersync_user; +END +GO ``` + + For Azure SQL Database, the `VIEW SERVER PERFORMANCE STATE` permission is not available and not required. Only `VIEW DATABASE PERFORMANCE STATE` is needed. The example above uses `SERVERPROPERTY('EngineEdition')` to conditionally grant this permission only on SQL Server instances. + + ### CDC Management -Management of CDC is up to the developer, though there are some settings of interest to PowerSync: +Management of CDC is left to the developer, though there are some settings of interest to PowerSync: #### Retention Period diff --git a/integration-guides/coolify.mdx b/integration-guides/coolify.mdx index 20396e6a..a00255a1 100644 --- a/integration-guides/coolify.mdx +++ b/integration-guides/coolify.mdx @@ -122,7 +122,7 @@ The following configuration options should be updated: PS_DATABASE_TYPE - postgresql OR mongodb OR mysql OR sqlserver + postgresql OR mongodb OR mysql OR mssql PS_DATABASE_URI From 2b70f432d61205284536b82849c47a5bb9dd3120 Mon Sep 17 00:00:00 2001 From: Benita Volkmann Date: Fri, 28 Nov 2025 15:36:57 +0200 Subject: [PATCH 03/15] Additional reading links --- installation/database-setup.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/installation/database-setup.mdx b/installation/database-setup.mdx index aef87a27..6868125f 100644 --- a/installation/database-setup.mdx +++ b/installation/database-setup.mdx @@ -407,6 +407,10 @@ binlog-ignore-db=user_db PowerSync replicates data from SQL Server using Change Data Capture (CDC). This process builds up change tables based on changes to tracked tables. The change tables are populated by reading from the SQL Server transaction log on a fixed interval. PowerSync then polls these CDC tables for changes using built-in stored procedures. +For more information about CDC, see: +- [Change Data Capture (SQL Server)](https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server) - for SQL Server +- [Change Data Capture (Azure SQL Database)](https://learn.microsoft.com/en-us/azure/azure-sql/database/change-data-capture-overview?view=azuresql) - for Azure SQL Database + ### Supported Editions/Versions | Database | Edition | Version | Min Service Tier | From 4b6ceaf4c192cb365c0e76a39ddbd98a7b95fb84 Mon Sep 17 00:00:00 2001 From: Benita Volkmann Date: Fri, 28 Nov 2025 16:03:38 +0200 Subject: [PATCH 04/15] Limitations placeholder --- installation/database-setup.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/installation/database-setup.mdx b/installation/database-setup.mdx index 6868125f..5ee5a301 100644 --- a/installation/database-setup.mdx +++ b/installation/database-setup.mdx @@ -595,6 +595,10 @@ EXEC sys.sp_cdc_change_job Setting the polling interval to 0 (continuous scanning) can impact database performance. Monitor your database performance when adjusting this setting. +### Current Limitations + +- TODO + ## Next Step Next, connect PowerSync to your database: From c3929ae61abe886c7f1cf25e55aba39cef952bf9 Mon Sep 17 00:00:00 2001 From: Benita Volkmann Date: Fri, 28 Nov 2025 16:21:18 +0200 Subject: [PATCH 05/15] Simplify --- installation/database-setup.mdx | 29 ++--------------------------- 1 file changed, 2 insertions(+), 27 deletions(-) diff --git a/installation/database-setup.mdx b/installation/database-setup.mdx index 5ee5a301..dd37e1f5 100644 --- a/installation/database-setup.mdx +++ b/installation/database-setup.mdx @@ -562,38 +562,13 @@ GO ### CDC Management Management of CDC is left to the developer, though there are some settings of interest to PowerSync: - -#### Retention Period - -The retention period before data is expired from the CDC tables. Default is 3 days. You can check and modify this: - -```sql --- Check current retention period (in minutes) -EXEC sys.sp_cdc_help_jobs; - --- Change retention period (in minutes, e.g., 4320 = 3 days) -EXEC sys.sp_cdc_change_job - @job_type = N'cleanup', - @retention = 4320; -``` +- The retention period before data is expired from the CDC tables. Default is 3 days. You can check and modify this: +- The polling interval of the CDC capture job determines how often the capture job reads changes from the transaction log. Default is every 5 seconds. Can be set to 0 so that there is zero downtime between scans, but this can impact database performance. #### Polling Interval -The polling interval of the CDC capture job determines how often the capture job reads changes from the transaction log. Default is every 5 seconds. Can be set to 0 so that there is zero downtime between scans, but this can impact DB performance. - -```sql --- Check current polling interval -EXEC sys.sp_cdc_help_jobs; --- Change polling interval (in seconds, 0 = continuous scanning) -EXEC sys.sp_cdc_change_job - @job_type = N'capture', - @pollinginterval = 5; -``` - - Setting the polling interval to 0 (continuous scanning) can impact database performance. Monitor your database performance when adjusting this setting. - ### Current Limitations From 509aa2104e34dacd3814aaf89d7852f7e794c644 Mon Sep 17 00:00:00 2001 From: Benita Volkmann Date: Fri, 28 Nov 2025 16:21:37 +0200 Subject: [PATCH 06/15] cleanup --- installation/database-setup.mdx | 5 ----- 1 file changed, 5 deletions(-) diff --git a/installation/database-setup.mdx b/installation/database-setup.mdx index dd37e1f5..93cf9193 100644 --- a/installation/database-setup.mdx +++ b/installation/database-setup.mdx @@ -565,11 +565,6 @@ Management of CDC is left to the developer, though there are some settings of in - The retention period before data is expired from the CDC tables. Default is 3 days. You can check and modify this: - The polling interval of the CDC capture job determines how often the capture job reads changes from the transaction log. Default is every 5 seconds. Can be set to 0 so that there is zero downtime between scans, but this can impact database performance. -#### Polling Interval - - - - ### Current Limitations - TODO From c55ad9d3dc55a909b0d7aa5366299e0416f67c30 Mon Sep 17 00:00:00 2001 From: Benita Volkmann Date: Tue, 2 Dec 2025 10:16:07 +0200 Subject: [PATCH 07/15] update diagram --- architecture/architecture-overview.mdx | 20 +++++------------- ...ync-docs-diagram-architecture-overview.png | Bin 106205 -> 108738 bytes 2 files changed, 5 insertions(+), 15 deletions(-) mode change 100755 => 100644 images/architecture/powersync-docs-diagram-architecture-overview.png diff --git a/architecture/architecture-overview.mdx b/architecture/architecture-overview.mdx index 5259e1a4..f4b7b804 100644 --- a/architecture/architecture-overview.mdx +++ b/architecture/architecture-overview.mdx @@ -10,12 +10,8 @@ description: "The core components of PowerSync are the service and client SDKs" The [PowerSync Service](/architecture/powersync-service) and client SDK operate in unison to keep client-side SQLite databases in sync with a backend database. Learn about their architecture: - - - - - - + + ### Protocol @@ -23,12 +19,8 @@ The [PowerSync Service](/architecture/powersync-service) and client SDK operate Learn about the sync protocol used between PowerSync clients and a [PowerSync Service](/architecture/powersync-service): - - - - - - + + ### Self-Hosted Architecture @@ -36,7 +28,5 @@ Learn about the sync protocol used between PowerSync clients and a [PowerSync Se For more details on typical architecture of a production self-hosted deployment, see here: - - - + \ No newline at end of file diff --git a/images/architecture/powersync-docs-diagram-architecture-overview.png b/images/architecture/powersync-docs-diagram-architecture-overview.png old mode 100755 new mode 100644 index 010dd9110f235acdfd000c9a1a2d14edac43b77e..0b71ce3fd4f59622463e67a4cb9972b9b598d1d2 GIT binary patch literal 108738 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 z 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 z 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 Lu6{1-oD!Mj literal 106205 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

EFlX-{>{qQ2mEDZ+O@g>dMC^;-3% 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 F{a>t!2CV=9 From 5ba4de620a4e747490bd1a6216383d7dfaa5255f Mon Sep 17 00:00:00 2001 From: Benita Volkmann Date: Tue, 2 Dec 2025 15:59:04 +0200 Subject: [PATCH 08/15] Don't need to mention Azure SQL explicitly --- installation/app-backend-setup.mdx | 2 +- installation/app-backend-setup/writing-client-changes.mdx | 4 ++-- .../client-side-setup/integrating-with-your-backend.mdx | 2 +- installation/database-connection.mdx | 4 ++-- installation/database-setup/private-endpoints.mdx | 2 +- installation/quickstart-guide.mdx | 2 +- intro/powersync-overview.mdx | 2 +- intro/powersync-philosophy.mdx | 4 ++-- resources/usage-and-billing/usage-and-billing-faq.mdx | 2 +- usage/sync-rules/advanced-topics/sharded-databases.mdx | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/installation/app-backend-setup.mdx b/installation/app-backend-setup.mdx index 19c1ffd3..d314e1c9 100644 --- a/installation/app-backend-setup.mdx +++ b/installation/app-backend-setup.mdx @@ -7,7 +7,7 @@ PowerSync generally assumes that you have some kind of "backend application" as When you integrate PowerSync into your app project, PowerSync relies on that "backend application" for a few purposes: -1. **Allowing client-side write operations to be uploaded** and [applied](/installation/app-backend-setup/writing-client-changes) to the backend database (Postgres, MongoDB, MySQL, or SQL Server/Azure SQL). When you write to the client-side SQLite database provided by PowerSync, those writes are also placed into an upload queue. The PowerSync Client SDK manages uploading of those writes to your backend using the `uploadData()` function that you defined in the [Client-Side Setup](/installation/client-side-setup/integrating-with-your-backend) part of the implementation. That `uploadData()` function should call your backend application API to apply the writes to your backend database. The reason why we designed PowerSync this way is to give you full control over things like data validation and authorization of writes, while PowerSync itself requires minimal permissions. +1. **Allowing client-side write operations to be uploaded** and [applied](/installation/app-backend-setup/writing-client-changes) to the backend database (Postgres, MongoDB, MySQL, or SQL Server). When you write to the client-side SQLite database provided by PowerSync, those writes are also placed into an upload queue. The PowerSync Client SDK manages uploading of those writes to your backend using the `uploadData()` function that you defined in the [Client-Side Setup](/installation/client-side-setup/integrating-with-your-backend) part of the implementation. That `uploadData()` function should call your backend application API to apply the writes to your backend database. The reason why we designed PowerSync this way is to give you full control over things like data validation and authorization of writes, while PowerSync itself requires minimal permissions. 2. **Authentication integration:** Your backend is responsible for securely generating the [JWTs](/installation/authentication-setup) used by the PowerSync Client SDK to authenticate with the [PowerSync Service](/architecture/powersync-service). diff --git a/installation/app-backend-setup/writing-client-changes.mdx b/installation/app-backend-setup/writing-client-changes.mdx index 01b5539a..dc7c5e43 100644 --- a/installation/app-backend-setup/writing-client-changes.mdx +++ b/installation/app-backend-setup/writing-client-changes.mdx @@ -17,13 +17,13 @@ Since you get to define the client-side `uploadData()` function as you wish, you You can also use any API style you want — e.g. REST, GraphQL, gRPC, etc. -It's important that your API endpoint be blocking/synchronous with underlying writes to the backend database (Postgres, MongoDB, MySQL, or SQL Server/Azure SQL). +It's important that your API endpoint be blocking/synchronous with underlying writes to the backend database (Postgres, MongoDB, MySQL, or SQL Server). In other words, don't place writes into something like a queue for processing later — process them immediately. For more details, see the explainer below. -PowerSync uses a server-authoritative architecture with a checkpoint system for conflict resolution and [consistency](/architecture/consistency). The client advances to a new write checkpoint after uploads have been processed, so if the client believes that the server has written changes into your backend database (Postgres, MongoDB, MySQL, or SQL Server/Azure SQL), but the next checkpoint does not contain your uploaded changes, those changes will be removed from the client. This could manifest as UI glitches for your end-users, where the changes disappear from the device for a few seconds and then re-appear. +PowerSync uses a server-authoritative architecture with a checkpoint system for conflict resolution and [consistency](/architecture/consistency). The client advances to a new write checkpoint after uploads have been processed, so if the client believes that the server has written changes into your backend database (Postgres, MongoDB, MySQL, or SQL Server), but the next checkpoint does not contain your uploaded changes, those changes will be removed from the client. This could manifest as UI glitches for your end-users, where the changes disappear from the device for a few seconds and then re-appear. ### Write operations recorded on the client diff --git a/installation/client-side-setup/integrating-with-your-backend.mdx b/installation/client-side-setup/integrating-with-your-backend.mdx index ac39b505..84c95be3 100644 --- a/installation/client-side-setup/integrating-with-your-backend.mdx +++ b/installation/client-side-setup/integrating-with-your-backend.mdx @@ -7,7 +7,7 @@ After you've [instantiated](/installation/client-side-setup/instantiate-powersyn | Purpose | Description | |---------|-------------| -| **Uploading writes to your backend:** | Writes that are made to the client-side SQLite database are uploaded to your backend application, where you control how they're applied to your backend database (Postgres, MongoDB, MySQL, or SQL Server/Azure SQL). This is how PowerSync achieves bi-directional syncing of data. | +| **Uploading writes to your backend:** | Writes that are made to the client-side SQLite database are uploaded to your backend application, where you control how they're applied to your backend database (Postgres, MongoDB, MySQL, or SQL Server). This is how PowerSync achieves bi-directional syncing of data. | | **Authentication integration:** | PowerSync uses JWTs for authentication between the Client SDK and PowerSync Service. Your backend application should be able to generate JWTs that the PowerSync Client SDK can retrieve and use for authentication against your [PowerSync Service](/architecture/powersync-service) instance. | Accordingly, you must pass a _backend connector_ as an argument when you call `connect()` on the client-side PowerSync database. You must define that backend connector, and it must implement two functions/methods: diff --git a/installation/database-connection.mdx b/installation/database-connection.mdx index 9b4bcc16..9d78efd8 100644 --- a/installation/database-connection.mdx +++ b/installation/database-connection.mdx @@ -228,7 +228,7 @@ For other providers and self-hosted databases: Make sure that your MySQL database allows access to PowerSync's IPs — see [Security and IP Filtering](/installation/database-setup/security-and-ip-filtering) -## SQL Server/Azure SQL (Alpha) Specifics +## SQL Server (Alpha) Specifics 1. In the [PowerSync Dashboard](https://dashboard.powersync.com/), select your project and instance and go to the **Database Connections** view. 2. Click **Connect to Source Database** and ensure the **"SQL Server"** tab is selected. @@ -245,7 +245,7 @@ For other providers and self-hosted databases: PowerSync deploys and configures an isolated cloud environment for you, which can take a few minutes to complete. - Make sure that your SQL Server/Azure SQL database allows access to PowerSync's IPs — see [Security and IP Filtering](/installation/database-setup/security-and-ip-filtering) + Make sure that your SQL Server database allows access to PowerSync's IPs — see [Security and IP Filtering](/installation/database-setup/security-and-ip-filtering) Also see: diff --git a/installation/database-setup/private-endpoints.mdx b/installation/database-setup/private-endpoints.mdx index a418d8cc..2db85306 100644 --- a/installation/database-setup/private-endpoints.mdx +++ b/installation/database-setup/private-endpoints.mdx @@ -14,7 +14,7 @@ Do not rely on Private Endpoints as the only form of security. Always use strong ## Current Limitations -1. Private Endpoints are currently only supported for Postgres and MongoDB instances. [Contact us](/resources/contact-us) if you need this for MySQL or SQL Server/Azure SQL. +1. Private Endpoints are currently only supported for Postgres and MongoDB instances. [Contact us](/resources/contact-us) if you need this for MySQL or SQL Server. 2. Self-service is not yet available on the PowerSync side — [contact PowerSync support](/resources/contact-us) to configure the instance. 3. Only AWS is supported currently — other cloud providers are not supported yet. 4. The **"Test Connection"** function on the [PowerSync Dashboard](https://dashboard.powersync.com/) is not supported yet - the instance has to be deployed to test the connection. diff --git a/installation/quickstart-guide.mdx b/installation/quickstart-guide.mdx index bac21827..d04fe700 100644 --- a/installation/quickstart-guide.mdx +++ b/installation/quickstart-guide.mdx @@ -3,7 +3,7 @@ title: "Quickstart Guide / Installation Overview" sidebarTitle: "Quickstart / Overview" --- -PowerSync is designed to be stack agnostic, and currently supports [Postgres](/installation/database-setup#postgres), [MongoDB](/installation/database-setup#mongodb), [MySQL](/installation/database-setup#mysql-beta) (Beta), and [SQL Server/Azure SQL](/installation/database-setup#sql-server-alpha) (Alpha) as the backend source database, and has the following official client-side SDKs available: +PowerSync is designed to be stack agnostic, and currently supports [Postgres](/installation/database-setup#postgres), [MongoDB](/installation/database-setup#mongodb), [MySQL](/installation/database-setup#mysql-beta) (Beta), and [SQL Server](/installation/database-setup#sql-server-alpha) (Alpha) as the backend source database, and has the following official client-side SDKs available: - [**Dart/Flutter**](/client-sdk-references/flutter) (mobile and [web](/client-sdk-references/flutter/flutter-web-support)) - [**React Native**](/client-sdk-references/react-native-and-expo) (mobile and [web](/client-sdk-references/react-native-and-expo/react-native-web-support)) - [**JavaScript Web**](/client-sdk-references/javascript-web) (including integrations for React, Vue and TanStack) diff --git a/intro/powersync-overview.mdx b/intro/powersync-overview.mdx index 743b80e5..214a59be 100644 --- a/intro/powersync-overview.mdx +++ b/intro/powersync-overview.mdx @@ -24,7 +24,7 @@ PowerSync is designed to be backend database agnostic, and currently supports: - + ### Supported Client SDKs diff --git a/intro/powersync-philosophy.mdx b/intro/powersync-philosophy.mdx index 6837710f..837d5239 100644 --- a/intro/powersync-philosophy.mdx +++ b/intro/powersync-philosophy.mdx @@ -13,7 +13,7 @@ The app is always [fast and responsive](https://www.powersync.com/blog/local-fir PowerSync lets you avoid the complexities of using APIs to move app state [over the network](https://www.powersync.com/blog/escaping-the-network-tarpit). Its goal is to solve the hard problems of keeping data in sync, without getting in your way. -You use a standard Postgres, MongoDB, MySQL, or SQL Server/Azure SQL \[[1](#footnotes)\] database on the server, a standard SQLite database on the client, and your [own backend](/installation/app-backend-setup) to process writes. PowerSync simply keeps the SQLite database in sync with your backend/server database. +You use a standard Postgres, MongoDB, MySQL, or SQL Server \[[1](#footnotes)\] database on the server, a standard SQLite database on the client, and your [own backend](/installation/app-backend-setup) to process writes. PowerSync simply keeps the SQLite database in sync with your backend/server database. #### State Management @@ -38,7 +38,7 @@ Our goal is also to be stack-agnostic: whether you are switching from MySQL to P #### Simplicity -You use plain Postgres, MongoDB, MySQL, or SQL Server/Azure SQL on the server — no extensions, and no significant change in your schema required \[[2](#footnotes)\]. PowerSync [uses](/installation/database-setup) Postgres logical replication, MongoDB change streams, MySQL binlog, or SQL Server Change Data Capture (CDC) to replicate changes to the [PowerSync Service](/architecture/powersync-service), where data is transformed and partitioned according to [Sync Rules](/usage/sync-rules), and persisted in a way that allows efficiently streaming incremental changes to each client. +You use plain Postgres, MongoDB, MySQL, or SQL Server on the server — no extensions, and no significant change in your schema required \[[2](#footnotes)\]. PowerSync [uses](/installation/database-setup) Postgres logical replication, MongoDB change streams, MySQL binlog, or SQL Server Change Data Capture (CDC) to replicate changes to the [PowerSync Service](/architecture/powersync-service), where data is transformed and partitioned according to [Sync Rules](/usage/sync-rules), and persisted in a way that allows efficiently streaming incremental changes to each client. PowerSync has been used in apps with hundreds of tables. There are no complex migrations to run: You define your [Sync Rules](/usage/sync-rules) and [client-side schema](/installation/client-side-setup/define-your-schema), and the data is automatically kept in sync. If you [change Sync Rules](/usage/lifecycle-maintenance/implementing-schema-changes), the entire new set of data is applied atomically on the client. When you do need to make schema changes on the server while still supporting older clients, we [have the processes in place](/usage/lifecycle-maintenance/implementing-schema-changes) to do that without hassle. diff --git a/resources/usage-and-billing/usage-and-billing-faq.mdx b/resources/usage-and-billing/usage-and-billing-faq.mdx index a3199ccb..fdd886f4 100644 --- a/resources/usage-and-billing/usage-and-billing-faq.mdx +++ b/resources/usage-and-billing/usage-and-billing-faq.mdx @@ -74,7 +74,7 @@ description: "Usage and billing FAQs and troubleshooting strategies." Data processing was calculated as the total uncompressed size of data replicated from your source database(s) to PowerSync Service instances, plus data synced from PowerSync Service instances to user devices. These values are still available in your [Usage metrics](/usage/tools/monitoring-and-alerting#usage-metrics) as "Data replicated per day/hour" and "Data synced per day/hour". - Data replicated refers to activity from your backend database (Postgres, MongoDB, MySQL, or SQL Server/Azure SQL database) to the PowerSync Service — this is not billed. + Data replicated refers to activity from your backend database (Postgres, MongoDB, MySQL, or SQL Server database) to the PowerSync Service — this is not billed. Data synced refers to data streamed from the PowerSync Service to client devices — this is used for billing. diff --git a/usage/sync-rules/advanced-topics/sharded-databases.mdx b/usage/sync-rules/advanced-topics/sharded-databases.mdx index 0f202624..157059a5 100644 --- a/usage/sync-rules/advanced-topics/sharded-databases.mdx +++ b/usage/sync-rules/advanced-topics/sharded-databases.mdx @@ -8,7 +8,7 @@ In the case of Postgres, PowerSync cannot replicate Postgres [foreign tables](ht However, PowerSync does have options available to support sharded databases in general. - When using MongoDB, MySQL, or SQL Server/Azure SQL as the backend source database, PowerSync does not currently support connecting to sharded clusters. + When using MongoDB, MySQL, or SQL Server as the backend source database, PowerSync does not currently support connecting to sharded clusters. The primary options are: From 09bb3827fe6ba2691d0abdbce75e4cabe10e9c8f Mon Sep 17 00:00:00 2001 From: Roland Teichert Date: Wed, 3 Dec 2025 13:39:30 +0200 Subject: [PATCH 09/15] Added SQLServer <-> SQLite type mapping --- usage/sync-rules/types.mdx | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/usage/sync-rules/types.mdx b/usage/sync-rules/types.mdx index e596d6f0..b27174a9 100644 --- a/usage/sync-rules/types.mdx +++ b/usage/sync-rules/types.mdx @@ -95,7 +95,7 @@ MySQL values are mapped according to this table: | year | text | | | json | text | There is no dedicated JSON type — JSON functions operate directly on text values. | | binary, varbinary | blob | See note below regarding binary types | -| blob, tinyblob, mediumblob, longblob | blob | | +| image | blob | | | geometry, geometrycollection | blob | | | point, multipoint | blob | | | linestring, multilinestring | blob | | @@ -108,6 +108,30 @@ MySQL values are mapped according to this table: ## SQL Server (Alpha) Type Mapping - - Type mappings between SQL Server and SQLite need to be documented. This section will be completed in a future update. - \ No newline at end of file +SQL Server values are mapped according to this table: + +| SQL Server Data Type | PowerSync / SQLite Column Type | Notes | +|----------------------------------------------------|--------------------------------|--------------------------------------------------------| +| tinyint, smallint, int, bigint | integer | | +| numeric, decimal | text | Numeric string | +| float, real | real | | +| bit | integer | | +| money, smallmoney | text | Numeric string | +| xml | text | | +| char, nchar, ntext | text | | +| varchar, nvarchar, text | text | | +| uniqueidentifier | text | | +| timestamp | text | ISO 8061 format: `YYYY-MM-DDTHH:mm:ss.sssZ` | +| date | text | Format: `YYYY-MM-DD` | +| time | text | Format: `HH:mm:ss.sss` | +| datetime, datetime2, smalldatetime, datetimeoffset | text | ISO 8061 format: `YYYY-MM-DDTHH:mm:ss.sssZ` | +| json | text | Only exists for Azure SQL Database and SQL Server 2025 | +| geometry, geography | text | Text of JSON object describing the spatial data type | +| binary, varbinary, image | blob | See note below regarding binary types | +| rowversion, timestamp | blob | See note below regarding binary types | +| User Defined Types: hiearchyid | blob | See note below regarding binary types | + + + Binary data can be accessed in the Sync Rules, but cannot be used as bucket parameters. Before it can be synced directly to clients it needs to be converted to hex or base64 first. + See [Operators & Functions](/usage/sync-rules/operators-and-functions) + \ No newline at end of file From 285e8eb5297da2fec77469370d985b8435b400cf Mon Sep 17 00:00:00 2001 From: Roland Teichert Date: Wed, 3 Dec 2025 13:40:05 +0200 Subject: [PATCH 10/15] Small fixes --- architecture/powersync-protocol.mdx | 2 +- integration-guides/coolify.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/architecture/powersync-protocol.mdx b/architecture/powersync-protocol.mdx index 8dc413a3..9a4fe36e 100644 --- a/architecture/powersync-protocol.mdx +++ b/architecture/powersync-protocol.mdx @@ -67,4 +67,4 @@ Write checkpoints are used to ensure clients have synced their own changes back Creating a write checkpoint is a separate operation, which is performed by the client after all data has been uploaded. It is important that this happens after the data has been written to the backend source database. -The server then keeps track of the current CDC stream position on the database (LSN in Postgres, resume token in MongoDB, GTID + Binlog Position in MySQL, or CDC LSN in SQL Server), and notifies the client when the data has been replicated, as part of checkpoint data in the normal data stream. +The server then keeps track of the current CDC stream position on the database (LSN in Postgres & SQL Server, resume token in MongoDB and GTID + Binlog Position in MySQL), and notifies the client when the data has been replicated, as part of checkpoint data in the normal data stream. diff --git a/integration-guides/coolify.mdx b/integration-guides/coolify.mdx index a00255a1..432bd8bb 100644 --- a/integration-guides/coolify.mdx +++ b/integration-guides/coolify.mdx @@ -122,7 +122,7 @@ The following configuration options should be updated: PS_DATABASE_TYPE - postgresql OR mongodb OR mysql OR mssql + postgresql OR mongodb OR mysql OR SQL Server PS_DATABASE_URI From 80a238be002fe0f9ad26fa6df17f7524dfabe764 Mon Sep 17 00:00:00 2001 From: Roland Teichert Date: Wed, 3 Dec 2025 13:57:17 +0200 Subject: [PATCH 11/15] Updated database setup instructions for SQL Server --- installation/database-setup.mdx | 156 +++++++++++++++++--------------- 1 file changed, 85 insertions(+), 71 deletions(-) diff --git a/installation/database-setup.mdx b/installation/database-setup.mdx index 93cf9193..10869e25 100644 --- a/installation/database-setup.mdx +++ b/installation/database-setup.mdx @@ -413,10 +413,10 @@ For more information about CDC, see: ### Supported Editions/Versions -| Database | Edition | Version | Min Service Tier | -|----------|---------|---------|------------------| -| SQL Server 2022+ | Standard, Enterprise, Developer, Evaluation | 16.0+ | N/A | -| Azure SQL* | Database, Managed instance | N/A | Any service tier on Vcore subscription model. S3 tier and up on DTU purchasing model. | +| Database | Edition | Version | Min Service Tier | +|------------------|---------------------------------------------|---------|---------------------------------------------------------------------------------------| +| SQL Server 2022+ | Standard, Enterprise, Developer, Evaluation | 16.0+ | N/A | +| Azure SQL* | Database, Managed instance | N/A | Any service tier on Vcore subscription model. S3 tier and up on DTU purchasing model. | \* Azure SQL Database is always running on the latest version of the SQL Server DB Engine @@ -427,8 +427,9 @@ For more information about CDC, see: Change Data Capture (CDC) needs to be enabled on the database: ```sql --- Enable CDC on the database (idempotent) -IF NOT EXISTS (SELECT 1 FROM sys.databases WHERE name = DB_NAME() AND is_cdc_enabled = 1) +-- Enable CDC on the database if not already enabled +USE ; +IF (SELECT is_cdc_enabled FROM sys.databases WHERE name = '') = 0 BEGIN EXEC sys.sp_cdc_enable_db; END @@ -437,97 +438,110 @@ GO #### 2. Create the PowerSync Checkpoints Table -PowerSync requires a `_powersync_checkpoints` table to generate regular updates. This table must be CDC enabled: +PowerSync requires a `_powersync_checkpoints` table to generate regular checkpoints. CDC must be enabled for this table: ```sql --- Create the PowerSync checkpoints table (idempotent) -IF NOT EXISTS (SELECT 1 FROM sys.tables WHERE name = '_powersync_checkpoints' AND schema_id = SCHEMA_ID('dbo')) +-- Create the PowerSync checkpoints table in your schema +IF OBJECT_ID('._powersync_checkpoints', 'U') IS NULL BEGIN - CREATE TABLE dbo._powersync_checkpoints ( - id INT PRIMARY KEY IDENTITY(1,1), - checkpoint_data NVARCHAR(MAX), - created_at DATETIME2 DEFAULT GETUTCDATE() - ); +CREATE TABLE ._powersync_checkpoints ( + id INT IDENTITY PRIMARY KEY, + last_updated DATETIME NOT NULL DEFAULT GETUTCDATE() +); END -GO --- Enable CDC on the checkpoints table (idempotent) -IF NOT EXISTS (SELECT 1 FROM cdc.change_tables WHERE source_object_id = OBJECT_ID(N'dbo._powersync_checkpoints')) +-- Enable CDC for the powersync checkpoints table if not already enabled +-- Note: the cdc_reader role created the first time CDC is enabled on a table +IF NOT EXISTS (SELECT 1 FROM cdc.change_tables WHERE source_object_id = OBJECT_ID(N'._powersync_checkpoints')) BEGIN EXEC sys.sp_cdc_enable_table - @source_schema = N'dbo', - @source_name = N'_powersync_checkpoints', - @role_name = N'cdc_reader', - @supports_net_changes = 1; + @source_schema = N'', + @source_name = N'_powersync_checkpoints', + @role_name = N'cdc_reader', + @supports_net_changes = 0; END GO ``` #### 3. Enable CDC on Tables -CDC must be enabled for all tables that need to be replicated. Use idempotent guards to safely re-run the script: +CDC must be enabled for all tables that need to be replicated: ```sql --- Enable CDC for a specific table (idempotent guard) -IF NOT EXISTS (SELECT 1 FROM cdc.change_tables WHERE source_object_id = OBJECT_ID(N'dbo.your_table_name')) +-- Enable CDC for specific tables in your schema if not already enabled +IF NOT EXISTS (SELECT 1 FROM cdc.change_tables WHERE source_object_id = OBJECT_ID(N'.')) BEGIN EXEC sys.sp_cdc_enable_table - @source_schema = N'dbo', - @source_name = N'your_table_name', - @role_name = N'cdc_reader', + @source_schema = N'', + @source_name = N'', + @role_name = N'cdc_reader', @supports_net_changes = 0; END GO ``` -Repeat this for each table you want to replicate. Note that `@supports_net_changes` can be set to `0` or `1` depending on your requirements. +Repeat this for each table you want to replicate. Note that PowerSync does not currently use the net changes functionality so `@supports_net_changes` can be set to `0`. #### 4. Create Database User -Create a database user with the following permissions: +Create a database user for PowerSync with the following permissions: **Required permissions:** - Read/Write permissions on the `_powersync_checkpoints` table - Read permissions on the replicated tables - `cdc_reader` role (grants access to CDC tables and functions) - `VIEW DATABASE PERFORMANCE STATE` (SQL Server and Azure SQL) -- `VIEW SERVER PERFORMANCE STATE` (SQL Server only - not required for Azure SQL) +- `VIEW SERVER PERFORMANCE STATE` (SQL Server only) ```sql --- Create a user for PowerSync (idempotent) -IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = 'powersync_user') +-- Create a SQL login for the powersync_user if missing. Note SQL Logins are created at the server level. +USE [master]; +IF NOT EXISTS (SELECT 1 FROM sys.server_principals WHERE name = '') +BEGIN + CREATE LOGIN [] WITH PASSWORD = 'YOUR_DB_USER_PASSWORD', CHECK_POLICY = ON; +END +GO + +-- Create a DB user for PowerSync if missing. Note DB users are created at the database level. +USE []; +IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = '') BEGIN - CREATE USER powersync_user WITH PASSWORD = 'your_secure_password'; + CREATE USER [] FOR LOGIN []; END GO --- Grant read/write access to the checkpoints table -GRANT SELECT, INSERT, UPDATE, DELETE ON dbo._powersync_checkpoints TO powersync_user; +-- Grant read/write access to the PowerSync checkpoints table +GRANT SELECT, INSERT, UPDATE ON ._powersync_checkpoints TO []; GO --- Grant read access to replicated tables (using db_datareader role) -IF IS_ROLEMEMBER('db_datareader', 'powersync_user') = 0 +-- Grant read access to all tables in the database using the db_datareader role (Less restrictive) +IF IS_ROLEMEMBER('db_datareader', '') = 0 BEGIN - ALTER ROLE db_datareader ADD MEMBER powersync_user; + ALTER ROLE db_datareader ADD MEMBER ; END GO --- Grant access to CDC tables and functions -IF IS_ROLEMEMBER('cdc_reader', 'powersync_user') = 0 +-- Grant access to CDC tables and functions using the cdc_reader role +IF IS_ROLEMEMBER('cdc_reader', '') = 0 BEGIN - ALTER ROLE cdc_reader ADD MEMBER powersync_user; + ALTER ROLE cdc_reader ADD MEMBER ; END GO -- Grant performance state permissions --- Note: For Azure SQL, only VIEW DATABASE PERFORMANCE STATE is required -GRANT VIEW DATABASE PERFORMANCE STATE TO powersync_user; + +-- Note: For Azure SQL, only VIEW DATABASE PERFORMANCE STATE is required. Granted at the database level. +-- PowerSync uses this to access the sys.dm_db_log_stats DMV and the sys.dm_db_partition_stats DMV +USE []; +GRANT VIEW DATABASE PERFORMANCE STATE TO []; GO --- VIEW SERVER PERFORMANCE STATE is only available on SQL Server (not Azure SQL) +-- VIEW SERVER PERFORMANCE STATE is only available on SQL Server (not Azure SQL). Granted at the server level. +-- PowerSync requires this permission to access the sys.dm_db_log_stats DMV on SQL Server. +USE [master]; IF SERVERPROPERTY('EngineEdition') != 5 -- 5 = Azure SQL Database BEGIN - GRANT VIEW SERVER PERFORMANCE STATE TO powersync_user; + GRANT VIEW SERVER PERFORMANCE STATE TO []; END GO ``` @@ -535,39 +549,39 @@ GO Alternatively, you can grant more granular permissions on specific tables: ```sql --- Grant SELECT on specific tables -GRANT SELECT ON dbo.your_table_name TO powersync_user; -GO - --- Grant read/write on checkpoints table -GRANT SELECT, INSERT, UPDATE, DELETE ON dbo._powersync_checkpoints TO powersync_user; -GO - --- Grant performance state permissions -GRANT VIEW DATABASE PERFORMANCE STATE TO powersync_user; -GO - --- VIEW SERVER PERFORMANCE STATE is only available on SQL Server (not Azure SQL) -IF SERVERPROPERTY('EngineEdition') != 5 -- 5 = Azure SQL Database -BEGIN - GRANT VIEW SERVER PERFORMANCE STATE TO powersync_user; -END -GO +-- Grant SELECT on the specific replicated tables (recommended for more restrictive access) +GRANT SELECT ON . TO []; ``` - For Azure SQL Database, the `VIEW SERVER PERFORMANCE STATE` permission is not available and not required. Only `VIEW DATABASE PERFORMANCE STATE` is needed. The example above uses `SERVERPROPERTY('EngineEdition')` to conditionally grant this permission only on SQL Server instances. + For Azure SQL Database, the `VIEW SERVER PERFORMANCE STATE` permission is not available and not required. Only `VIEW DATABASE PERFORMANCE STATE` is needed. ### CDC Management -Management of CDC is left to the developer, though there are some settings of interest to PowerSync: -- The retention period before data is expired from the CDC tables. Default is 3 days. You can check and modify this: -- The polling interval of the CDC capture job determines how often the capture job reads changes from the transaction log. Default is every 5 seconds. Can be set to 0 so that there is zero downtime between scans, but this can impact database performance. - -### Current Limitations - -- TODO +Management and performance turning of CDC is left to the developer and is primarily done by modifying the change capture jobs. See [Change Data Capture Jobs (SQL Server)](https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/administer-and-monitor-change-data-capture-sql-server?view=sql-server-ver17) for more details. +Capture Job settings of interest to PowerSync: +- Polling interval: The frequency at which the capture job reads changes from the transaction log. Default is every 5 seconds. Can be set to 0 so that there is zero downtime between scans, but this will impact database performance. +- Max Trans: The maximum number of transactions that are processed per scan. Default is 500. +- Max Scans: The maximum number of scans that are performed per capture job scan cycle. Default is 10. + +Cleanup Job settings of interest to PowerSync: +- Retention: The retention period before data is expired from the CDC tables. Default is 3 days. If your PowerSync instance is offline for longer than this period, data will need to be fully re-synced. Specified in minutes. + +Recommended Capture Job settings: +| Parameter | Recommended Value | +|-------------------------|-------------------| +| maxtrans | 5000 | +| maxscans | 10 | +| pollinginterval| 1 second | + +### Limitations + +- For Azure SQL Database, the CDC capture and cleanup jobs are managed automatically. Manual configuration is greatly limited. +See: [Azure CDC Customization Limitations](https://learn.microsoft.com/en-us/azure/azure-sql/database/change-data-capture-overview?view=azuresql#cdc-customization) +The main limitation is that the capture job polling interval cannot be modified and is fixed at 20 seconds. It is, however, still possible to [manually trigger](https://learn.microsoft.com/en-us/azure/azure-sql/database/change-data-capture-overview?view=azuresql#manual-cdc-control) the capture job on demand. +- CDC can only be enabled on Azure SQL Databases on the vCore purchasing model, OR for database on the DTU purchasing model, only on the S3 tier and above. +See: [Azure SQL Database compute requirements](https://learn.microsoft.com/en-us/azure/azure-sql/database/change-data-capture-overview?view=azuresql#azure-sql-database-compute-requirements) ## Next Step From 5b82f6bc0d79e9aa876bf390a198199536518408 Mon Sep 17 00:00:00 2001 From: Roland Teichert Date: Fri, 5 Dec 2025 14:12:51 +0200 Subject: [PATCH 12/15] Tweak mssql database-setup instructions. --- installation/database-setup.mdx | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/installation/database-setup.mdx b/installation/database-setup.mdx index 10869e25..fb80af1d 100644 --- a/installation/database-setup.mdx +++ b/installation/database-setup.mdx @@ -428,7 +428,7 @@ Change Data Capture (CDC) needs to be enabled on the database: ```sql -- Enable CDC on the database if not already enabled -USE ; +USE ; -- Only for SQL Server. To switch databases on Azure SQL, you have to connect to the specific database. IF (SELECT is_cdc_enabled FROM sys.databases WHERE name = '') = 0 BEGIN EXEC sys.sp_cdc_enable_db; @@ -514,12 +514,8 @@ GO GRANT SELECT, INSERT, UPDATE ON ._powersync_checkpoints TO []; GO --- Grant read access to all tables in the database using the db_datareader role (Less restrictive) -IF IS_ROLEMEMBER('db_datareader', '') = 0 -BEGIN - ALTER ROLE db_datareader ADD MEMBER ; -END -GO +-- Grant SELECT on the specific replicated tables (recommended for more restrictive access) +GRANT SELECT ON . TO []; -- Grant access to CDC tables and functions using the cdc_reader role IF IS_ROLEMEMBER('cdc_reader', '') = 0 @@ -539,20 +535,12 @@ GO -- VIEW SERVER PERFORMANCE STATE is only available on SQL Server (not Azure SQL). Granted at the server level. -- PowerSync requires this permission to access the sys.dm_db_log_stats DMV on SQL Server. USE [master]; -IF SERVERPROPERTY('EngineEdition') != 5 -- 5 = Azure SQL Database BEGIN GRANT VIEW SERVER PERFORMANCE STATE TO []; END GO ``` -Alternatively, you can grant more granular permissions on specific tables: - -```sql --- Grant SELECT on the specific replicated tables (recommended for more restrictive access) -GRANT SELECT ON . TO []; -``` - For Azure SQL Database, the `VIEW SERVER PERFORMANCE STATE` permission is not available and not required. Only `VIEW DATABASE PERFORMANCE STATE` is needed. From 80fe196069b226c14206b1bc3853144d6ed6b06a Mon Sep 17 00:00:00 2001 From: Roland Teichert Date: Mon, 8 Dec 2025 09:16:33 +0200 Subject: [PATCH 13/15] Reworked mssql database setup instructions --- installation/database-setup.mdx | 177 +++++++++++++++++++------------- usage/sync-rules/types.mdx | 38 +++---- 2 files changed, 124 insertions(+), 91 deletions(-) diff --git a/installation/database-setup.mdx b/installation/database-setup.mdx index fb80af1d..82b9e856 100644 --- a/installation/database-setup.mdx +++ b/installation/database-setup.mdx @@ -71,7 +71,7 @@ We have documented steps for some hosting providers: GRANT SELECT ON ALL TABLES IN SCHEMA public TO powersync_role; -- Optionally, grant SELECT on all future tables (to cater for schema additions) - ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO powersync_role; + ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO powersync_role; ``` To restrict read access to specific tables, explicitly list allowed tables for both the `SELECT` privilege, and for the publication (as well as for any other publications that may exist). @@ -182,15 +182,15 @@ We have documented steps for some hosting providers: - The disk size must be at least 10 GB. - You must be on a Professional workspace or higher. - The Render support team will ask you the following: + The Render support team will ask you the following: - Database user for replication (you can use the default or create a new user yourself) - Schema(s) - Publication name (only if you want us to set `FOR ALL TABLES`; otherwise, you'll be able to create publications per table yourself later) - - If you want to create the publication `FOR ALL TABLES`, you must let their support team to know that you want the publication name to be `powersync`. - Additional notes they'll share with you: + If you want to create the publication `FOR ALL TABLES`, you must let their support team to know that you want the publication name to be `powersync`. + + Additional notes they'll share with you: > We will reserve approximately 1/8 of your storage for `wal_keep_size`. This will not be available for your normal operations and will always be reserved no matter what. We will also schedule maintenance for the database to pick up the changes. It will be initially scheduled for 14 days out with a deadline of 30 days out. Once the maintenance is added, you can reschedule to any time between immediately and the deadline. If you do nothing, it will run automatically at the initially scheduled time of 14 days out. @@ -372,6 +372,7 @@ FLUSH PRIVILEGES; ``` It is possible to constrain the MySQL user further and limit access to specific tables. Care should be taken to ensure that all the tables in the Sync Rules are included in the grants. + ```sql -- Grant select to the users and the invoices tables in the source database GRANT SELECT ON .users TO 'repl_user'@'%'; @@ -382,18 +383,22 @@ FLUSH PRIVILEGES; ``` ### Additional Configuration (optional) + #### Binlog The binlog can be configured to limit logging to specific databases. By default, events for tables in all the databases on the MySQL server will be logged. + - [binlog-do-db](https://dev.mysql.com/doc/refman/8.4/en/replication-options-binary-log.html#option_mysqld_binlog-do-db): Only updates for tables in the specified database will be logged. - [binlog-ignore-db](https://dev.mysql.com/doc/refman/8.4/en/replication-options-binary-log.html#option_mysqld_binlog-ignore-db): No updates for tables in the specified database will be logged. Examples: + ``` # Only row events for tables in the user_db and invoices_db databases will appear in the binlog. binlog-do-db=user_db binlog-do-db=invoices_db ``` + ``` # Row events for tables in the user_db will be ignored. Events for any other database will be logged. binlog-ignore-db=user_db @@ -402,21 +407,23 @@ binlog-ignore-db=user_db ## SQL Server (Alpha) - **Version compatibility**: PowerSync requires SQL Server 2022+ or Azure SQL Database. + **Version compatibility**: PowerSync requires SQL Server 2022+ or Azure SQL + Database. PowerSync replicates data from SQL Server using Change Data Capture (CDC). This process builds up change tables based on changes to tracked tables. The change tables are populated by reading from the SQL Server transaction log on a fixed interval. PowerSync then polls these CDC tables for changes using built-in stored procedures. For more information about CDC, see: + - [Change Data Capture (SQL Server)](https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server) - for SQL Server - [Change Data Capture (Azure SQL Database)](https://learn.microsoft.com/en-us/azure/azure-sql/database/change-data-capture-overview?view=azuresql) - for Azure SQL Database ### Supported Editions/Versions | Database | Edition | Version | Min Service Tier | -|------------------|---------------------------------------------|---------|---------------------------------------------------------------------------------------| +| ---------------- | ------------------------------------------- | ------- | ------------------------------------------------------------------------------------- | | SQL Server 2022+ | Standard, Enterprise, Developer, Evaluation | 16.0+ | N/A | -| Azure SQL* | Database, Managed instance | N/A | Any service tier on Vcore subscription model. S3 tier and up on DTU purchasing model. | +| Azure SQL\* | Database, Managed instance | N/A | Any service tier on Vcore subscription model. S3 tier and up on DTU purchasing model. | \* Azure SQL Database is always running on the latest version of the SQL Server DB Engine @@ -436,7 +443,80 @@ END GO ``` -#### 2. Create the PowerSync Checkpoints Table +#### 2. Create the PowerSync Database User + +Create a database user for PowerSync with the following permissions: + +**Required permissions:** + +- Read/Write permissions on the `_powersync_checkpoints` table +- Read permissions on the replicated tables +- `cdc_reader` role (grants access to CDC changetables and functions) +- `SELECT` permission on the CDC schema. (grants access to CDC metadata tables) +- `VIEW DATABASE PERFORMANCE STATE` (SQL Server and Azure SQL) +- `VIEW SERVER PERFORMANCE STATE` (SQL Server only) + +Create the login for the user first. This is done on the server / master database level. + +```sql +-- Create a SQL login for the powersync_user if missing. Note SQL Logins are created at the server level. +USE [master]; -- Use only works on SQL Server. For Azure SQL you have to connect to the master database to run these commands. +IF NOT EXISTS (SELECT 1 FROM sys.server_principals WHERE name = 'powersync_user') +BEGIN + CREATE LOGIN [powersync_user] WITH PASSWORD = 'YOUR_DB_USER_PASSWORD', CHECK_POLICY = ON; +END +GO +``` + +Create the database user next. This is done on the specific database level. + +```sql +-- Create the powersync_user database user if missing. Note DB users are created at the database level. +USE []; -- Use only works on SQL Server. For Azure SQL you have to connect to the specific database to run these commands. +IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = 'powersync_user') +BEGIN + CREATE USER [powersync_user] FOR LOGIN [powersync_user]; +END +GO +``` + +Grant the necessary permissions for the user: + +```sql +-- Grant SELECT on the specific replicated tables +GRANT SELECT ON . TO [powersync_user]; + +-- Grant access to CDC tables and functions using the cdc_reader role +IF IS_ROLEMEMBER('cdc_reader', 'powersync_user') = 0 +BEGIN + ALTER ROLE cdc_reader ADD MEMBER powersync_user; +END +GO + +-- Grant select on the CDC schema +GRANT SELECT ON SCHEMA::cdc TO [powersync_user]; + +-- Grant the necessary permissions to the user to access the performance state views + +-- Note: For Azure SQL, only VIEW DATABASE PERFORMANCE STATE is required. Granted at the database level. +-- PowerSync uses this to access the sys.dm_db_log_stats DMV and the sys.dm_db_partition_stats DMV +GRANT VIEW DATABASE PERFORMANCE STATE TO [powersync_user]; +GO + +-- VIEW SERVER PERFORMANCE STATE is only necessary on SQL Server (not Azure SQL). Granted at the server/master database level. +-- PowerSync requires this permission to access the sys.dm_db_log_stats DMV on SQL Server. +USE [master]; +BEGIN + GRANT VIEW SERVER PERFORMANCE STATE TO [powersync_user]; +END +GO +``` + + For Azure SQL Database, the `VIEW SERVER PERFORMANCE STATE` permission is not + available and not required. Only `VIEW DATABASE PERFORMANCE STATE` is needed. + + +#### 3. Create the PowerSync Checkpoints Table PowerSync requires a `_powersync_checkpoints` table to generate regular checkpoints. CDC must be enabled for this table: @@ -463,7 +543,14 @@ END GO ``` -#### 3. Enable CDC on Tables +Grant read/write access to the table for the powersync_user: + +```sql +GRANT SELECT, INSERT, UPDATE ON ._powersync_checkpoints TO [powersync_user]; +GO +``` + +#### 4. Enable CDC on Tables CDC must be enabled for all tables that need to be replicated: @@ -480,80 +567,26 @@ END GO ``` -Repeat this for each table you want to replicate. Note that PowerSync does not currently use the net changes functionality so `@supports_net_changes` can be set to `0`. - -#### 4. Create Database User - -Create a database user for PowerSync with the following permissions: - -**Required permissions:** -- Read/Write permissions on the `_powersync_checkpoints` table -- Read permissions on the replicated tables -- `cdc_reader` role (grants access to CDC tables and functions) -- `VIEW DATABASE PERFORMANCE STATE` (SQL Server and Azure SQL) -- `VIEW SERVER PERFORMANCE STATE` (SQL Server only) +Grant read access to the table for the powersync_user: ```sql --- Create a SQL login for the powersync_user if missing. Note SQL Logins are created at the server level. -USE [master]; -IF NOT EXISTS (SELECT 1 FROM sys.server_principals WHERE name = '') -BEGIN - CREATE LOGIN [] WITH PASSWORD = 'YOUR_DB_USER_PASSWORD', CHECK_POLICY = ON; -END -GO - --- Create a DB user for PowerSync if missing. Note DB users are created at the database level. -USE []; -IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = '') -BEGIN - CREATE USER [] FOR LOGIN []; -END -GO - --- Grant read/write access to the PowerSync checkpoints table -GRANT SELECT, INSERT, UPDATE ON ._powersync_checkpoints TO []; -GO - --- Grant SELECT on the specific replicated tables (recommended for more restrictive access) -GRANT SELECT ON . TO []; - --- Grant access to CDC tables and functions using the cdc_reader role -IF IS_ROLEMEMBER('cdc_reader', '') = 0 -BEGIN - ALTER ROLE cdc_reader ADD MEMBER ; -END -GO - --- Grant performance state permissions - --- Note: For Azure SQL, only VIEW DATABASE PERFORMANCE STATE is required. Granted at the database level. --- PowerSync uses this to access the sys.dm_db_log_stats DMV and the sys.dm_db_partition_stats DMV -USE []; -GRANT VIEW DATABASE PERFORMANCE STATE TO []; -GO - --- VIEW SERVER PERFORMANCE STATE is only available on SQL Server (not Azure SQL). Granted at the server level. --- PowerSync requires this permission to access the sys.dm_db_log_stats DMV on SQL Server. -USE [master]; -BEGIN - GRANT VIEW SERVER PERFORMANCE STATE TO []; -END +GRANT SELECT ON . TO [powersync_user]; GO ``` - - For Azure SQL Database, the `VIEW SERVER PERFORMANCE STATE` permission is not available and not required. Only `VIEW DATABASE PERFORMANCE STATE` is needed. - +Repeat this for each table you want to replicate. Note that PowerSync does not currently use the net changes functionality so `@supports_net_changes` can be set to `0`. ### CDC Management Management and performance turning of CDC is left to the developer and is primarily done by modifying the change capture jobs. See [Change Data Capture Jobs (SQL Server)](https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/administer-and-monitor-change-data-capture-sql-server?view=sql-server-ver17) for more details. Capture Job settings of interest to PowerSync: + - Polling interval: The frequency at which the capture job reads changes from the transaction log. Default is every 5 seconds. Can be set to 0 so that there is zero downtime between scans, but this will impact database performance. - Max Trans: The maximum number of transactions that are processed per scan. Default is 500. - Max Scans: The maximum number of scans that are performed per capture job scan cycle. Default is 10. Cleanup Job settings of interest to PowerSync: + - Retention: The retention period before data is expired from the CDC tables. Default is 3 days. If your PowerSync instance is offline for longer than this period, data will need to be fully re-synced. Specified in minutes. Recommended Capture Job settings: @@ -566,10 +599,10 @@ Recommended Capture Job settings: ### Limitations - For Azure SQL Database, the CDC capture and cleanup jobs are managed automatically. Manual configuration is greatly limited. -See: [Azure CDC Customization Limitations](https://learn.microsoft.com/en-us/azure/azure-sql/database/change-data-capture-overview?view=azuresql#cdc-customization) -The main limitation is that the capture job polling interval cannot be modified and is fixed at 20 seconds. It is, however, still possible to [manually trigger](https://learn.microsoft.com/en-us/azure/azure-sql/database/change-data-capture-overview?view=azuresql#manual-cdc-control) the capture job on demand. + See: [Azure CDC Customization Limitations](https://learn.microsoft.com/en-us/azure/azure-sql/database/change-data-capture-overview?view=azuresql#cdc-customization) + The main limitation is that the capture job polling interval cannot be modified and is fixed at 20 seconds. It is, however, still possible to [manually trigger](https://learn.microsoft.com/en-us/azure/azure-sql/database/change-data-capture-overview?view=azuresql#manual-cdc-control) the capture job on demand. - CDC can only be enabled on Azure SQL Databases on the vCore purchasing model, OR for database on the DTU purchasing model, only on the S3 tier and above. -See: [Azure SQL Database compute requirements](https://learn.microsoft.com/en-us/azure/azure-sql/database/change-data-capture-overview?view=azuresql#azure-sql-database-compute-requirements) + See: [Azure SQL Database compute requirements](https://learn.microsoft.com/en-us/azure/azure-sql/database/change-data-capture-overview?view=azuresql#azure-sql-database-compute-requirements) ## Next Step diff --git a/usage/sync-rules/types.mdx b/usage/sync-rules/types.mdx index 947b62de..93b69279 100644 --- a/usage/sync-rules/types.mdx +++ b/usage/sync-rules/types.mdx @@ -46,19 +46,19 @@ There is no dedicated boolean data type. Boolean values are represented as `1` ( ## MongoDB Type Mapping -| BSON Type | PowerSync / SQLite Column Type | Notes | -| ------------------ | ------------------------------ | ----- | -| String | text | | -| Int, Long | integer | | -| Double | real | | -| Decimal128 | text | | -| Object | text | Converted to a JSON string | -| Array | text | Converted to a JSON string | -| ObjectId | text | Lower-case hex string | -| UUID | text | Lower-case hex string | -| Boolean | integer | 1 for true, 0 for false | -| Date | text | Format: `YYYY-MM-DD hh:mm:ss.sssZ` | -| Null | null | | +| BSON Type | PowerSync / SQLite Column Type | Notes | +|--------------------|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| String | text | | +| Int, Long | integer | | +| Double | real | | +| Decimal128 | text | | +| Object | text | Converted to a JSON string | +| Array | text | Converted to a JSON string | +| ObjectId | text | Lower-case hex string | +| UUID | text | Lower-case hex string | +| Boolean | integer | 1 for true, 0 for false | +| Date | text | Format: `YYYY-MM-DD hh:mm:ss.sssZ` | +| Null | null | | | Binary | blob | Cannot sync directly to client — convert to hex or base64 first. See [Operators & Functions](/usage/sync-rules/operators-and-functions). | | Regular Expression | text | JSON text in the format `{"pattern":"...","options":"..."}` | | Timestamp | integer | Converted to a 64-bit integer | @@ -93,9 +93,9 @@ MySQL values are mapped according to this table: | time, datetime | text | ISO 8061 format: `YYYY-MM-DDTHH:mm:ss.sssZ` | | year | text | | | json | text | There is no dedicated JSON type — JSON functions operate directly on text values. | -| bit | blob | | -| binary, varbinary | blob | See note below regarding binary types | -| image | blob | | +| bit | blob | * See note below regarding syncing binary types | +| binary, varbinary | blob | | +| image | blob | | | geometry, geometrycollection | blob | | | point, multipoint | blob | | | linestring, multilinestring | blob | | @@ -127,9 +127,9 @@ SQL Server values are mapped according to this table: | datetime, datetime2, smalldatetime, datetimeoffset | text | ISO 8061 format: `YYYY-MM-DDTHH:mm:ss.sssZ` | | json | text | Only exists for Azure SQL Database and SQL Server 2025 | | geometry, geography | text | Text of JSON object describing the spatial data type | -| binary, varbinary, image | blob | See note below regarding binary types | -| rowversion, timestamp | blob | See note below regarding binary types | -| User Defined Types: hiearchyid | blob | See note below regarding binary types | +| binary, varbinary, image | blob | * See note below regarding binary types | +| rowversion, timestamp | blob | * See note below regarding binary types | +| User Defined Types: hiearchyid | blob | * See note below regarding binary types | Binary data can be accessed in the Sync Rules, but cannot be used as bucket parameters. Before it can be synced directly to clients it needs to be converted to hex or base64 first. From 9c6cf6482ca34ac56c148578be74f964fd811a44 Mon Sep 17 00:00:00 2001 From: Benita Volkmann Date: Mon, 8 Dec 2025 10:52:28 +0200 Subject: [PATCH 14/15] Next channel --- installation/database-connection.mdx | 4 ++++ resources/feature-status.mdx | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/installation/database-connection.mdx b/installation/database-connection.mdx index 9d78efd8..852dd7e8 100644 --- a/installation/database-connection.mdx +++ b/installation/database-connection.mdx @@ -230,6 +230,10 @@ For other providers and self-hosted databases: ## SQL Server (Alpha) Specifics + + SQL Server support is currently only available in the [**Next** channel](resources/feature-status#powersync-cloud) of the PowerSync Service. + + 1. In the [PowerSync Dashboard](https://dashboard.powersync.com/), select your project and instance and go to the **Database Connections** view. 2. Click **Connect to Source Database** and ensure the **"SQL Server"** tab is selected. 3. Fill in your SQL Server connection details: diff --git a/resources/feature-status.mdx b/resources/feature-status.mdx index d92180cd..f598ac8e 100644 --- a/resources/feature-status.mdx +++ b/resources/feature-status.mdx @@ -28,7 +28,7 @@ Development images may be released for bleeding edge feature additions or hotfix ## PowerSync Cloud -In the PowerSync Dashboard, developers can configure the service version channel for each instance under the `General` tab in the `Edit Instance` dialog. +In the PowerSync Dashboard, developers can configure the service version channel for their instance. This optionis available in the Settings view for each instance. ### Stable @@ -48,6 +48,7 @@ Below is a summary of the current main PowerSync features and their release stat | MySQL | Beta | | MongoDB | V1 | | Postgres | V1 | +| SQL Server | Alpha | | | | | **PowerSync Service** | | | Open Edition | Beta | From c95eb3f3bd6f838b4c3bf1a6c4430e0793099812 Mon Sep 17 00:00:00 2001 From: Benita Volkmann Date: Mon, 8 Dec 2025 10:55:18 +0200 Subject: [PATCH 15/15] Update feature status --- resources/feature-status.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/feature-status.mdx b/resources/feature-status.mdx index f598ac8e..8cf28623 100644 --- a/resources/feature-status.mdx +++ b/resources/feature-status.mdx @@ -45,10 +45,10 @@ Below is a summary of the current main PowerSync features and their release stat | **Category / Item** | **Status** | | -------------------------------------------------- | -------------- | | **Database Connectors** | | +| SQL Server | Alpha | | MySQL | Beta | | MongoDB | V1 | | Postgres | V1 | -| SQL Server | Alpha | | | | | **PowerSync Service** | | | Open Edition | Beta |