Skip to content
dbSlice®
Product Who it's for Performance Pricing Blog Guides Support Buy dbSlice

dbSlice / Sync

Sync SQL Server to PostgreSQL

Move the data once, then keep PostgreSQL up to date with SQL Server: from a Windows app or the command line, without installing agents, enabling CDC or touching SQL Server Agent.

Try it free on the Microsoft Store ↗ See pricing

At a glance

  • What it does: keeps PostgreSQL up to date with SQL Server after the first copy, with upsert, insert-new or incremental runs, from a Windows app or the CLI.
  • Engines: SQL Server to PostgreSQL and back; the same screen syncs any pair of SQL Server, PostgreSQL, Oracle, MySQL, MariaDB, Firebird, SQLite and InterSystems Caché/IRIS.
  • What it does not do: move code (procedures, triggers, functions, T-SQL), replicate in real time, or detect deletes in incremental runs.
  • Free or paid: try it in the free Microsoft Store version (no license key); writing to a target database needs a Desktop or Server license.

When this is the right tool

  • A reporting or read replica in PostgreSQL that must follow a SQL Server system of record.
  • A migration with a long cutover: the old SQL Server stays live for weeks and PostgreSQL has to catch up every night until the switch.
  • Feeding a PostgreSQL analytics database from one or more SQL Server tables on a schedule.
dbSlice Synchronize tab

How a sync works

  1. Pick the source table or a SELECT in SQL Server and the target table in PostgreSQL.
  2. Choose the key column used to match rows. dbSlice reads the source in small batches, so a live database keeps serving its users while the sync runs.
  3. Choose what the run does to the target:
    ModeWhat it does
    UpsertInserts new keys and updates the ones that changed
    Insert newInserts only keys that are missing; existing rows are untouched
    Initial loadPlain inserts into an empty table
    Update onlyUpdates rows that already exist
    Full reloadEmpties the target table and loads it again
  4. Optional: map columns with different names, add a WHERE filter, mask sensitive values in flight.
  5. Check before writing. Record Diff compares keys on both sides (how many, which are missing).
  6. Run it, or save it as a job and run it from the CLI or Windows Task Scheduler.

Incremental runs

Point the job at a column that only grows, such as updated_at. For a SQL Server rowversion, use a SELECT source that returns it as CAST(rv AS BIGINT) and point the job at that column. Each run remembers the highest value it read and the next one only reads rows above it. Combined with Upsert, a nightly refresh reads what changed instead of the whole table.

Deletes in SQL Server are not detected by an incremental run. If rows are deleted at the source, schedule a periodic full comparison or a full reload.

Your database stays yours

By default dbSlice only reads and writes rows. It does not create tables, triggers or temporary objects in your databases (the faster write mode below is opt-in). If the PostgreSQL table does not exist yet, dbSlice stops before writing and shows the CREATE TABLE script, translated from the SQL Server schema, for your DBA to review and run.

Speed, with the conditions

Initial loads and full reloads use PostgreSQL's bulk loading. For Upsert and Insert new there is a faster write mode that needs a temporary table for the session; it is off by default and you turn it on only if your DBA allows temporary tables. In our lab test with that mode on (SQL Server 2022 and PostgreSQL 17 on the same host, local container network, no other load, single run per case), dbSlice 2.3 synced:

  • 10,000 rows in Upsert mode in 0.4 s (~28,000 rows/s);
  • 1,000,000 rows in Insert new mode in 10.6 s (~94,000 rows/s).

Your numbers will differ with network latency between servers, disk, indexes, row width and any masking or transformation. Run the built-in reference test on your own servers before you plan a cutover window.

What dbSlice does not do

  • It moves data, not code. Stored procedures, triggers, functions and T-SQL are not converted to PL/pgSQL. Use a code converter for that part and dbSlice for the data.
  • It is not real-time replication. Runs are batch jobs (on demand or scheduled). If you need sub-second change capture, look at log-based CDC tools.

Also works for

The same screen syncs between any pair of SQL Server, PostgreSQL, Oracle, MySQL, MariaDB, Firebird, SQLite and InterSystems Caché/IRIS, and PostgreSQL to SQL Server in the other direction. For a one-time move, read the SQL Server to PostgreSQL migration guide. For SQL Server to MySQL or MariaDB, see the dedicated page.

Comparing tools? →

Syncing from a live system? →

Try it on your own data: the free Microsoft Store version needs no license key.

Try free on the Microsoft Store ↗Buy dbSlice

Related guides

  • Sync Oracle to PostgreSQL
  • Export InterSystems Caché and IRIS data to PostgreSQL
  • SQL Server to MySQL migration, on Windows
dbSlice®

Professional data synchronization, migration and reconciliation — for Windows and Linux (Docker).

A Thinwork product

Product

Product Pricing Guides Linux (Docker) Release notes Free version (Microsoft Store) Support FAQ Renew maintenance CLI examples

Legal

Terms of Use Privacy Policy Refund Policy EULA

Company

THINWORK TECNOLOGIA DA INFORMACAO - LTDA
CNPJ 09.166.605/0001-21
Since 2007

Av. Paulista, 1471, Conj. 511, Anexo CP 1722
Bela Vista, São Paulo - SP, 01311-927, Brazil

Sales

+55 (11) 5197-7969 [email protected]

Support hours: Mon–Fri, 9:00–17:00 (UTC−3)

github.com/thinwork Follow @dbsliceapp
© 2026 dbSlice®. All rights reserved. Windows x64 · GUI + CLI · Linux (Docker) · Web

dbSlice® and the dbSlice pizza mascot logo are registered trademarks of Thinwork Tecnologia da Informação Ltda. with the Brazilian National Institute of Industrial Property (INPI).

All other product names, logos and brands are the property of their respective owners and appear here only to identify the systems dbSlice works with. dbSlice is an independent product, not affiliated with, sponsored or endorsed by them. Learn more