Skip to main content

No project description provided

Project description

test-badge

pypgsync

Python utility to sync two postgresql databases

Installation

pip install pypgsync

Usage

Given two databases, pypgsync can determine which records differ. In the primarykey use case, records are identified by their primary key.

import psycopg
from pypgsync.mode.primarykey import delta_by_primary_key, apply_delta_by_primary_key

con_source = psycopg.connect(host="host_source", dbname="db_source", user="user_source", 
                             password="secret_source")
con_destination = psycopg.connect(host="host_destination", dbname="db_destination", 
                                  user="user_destination", password="secret_destination")

cur_source = con_source.cursor()
cur_destination = con_destination.cursor()

delta = delta_by_primary_key(cur_source=cur_source, cur_destination=cur_destination,
                                 table_name="products", primary_key="id",
                                 columns=["name", "count", "price"], pk_values=[1, 2, 3, 4, 5],)

delta provides an overview of the differences between the two database tables, in terms of which database operations (delete, insert, update) have to be applied to the destination database in order to match the source database. The primary key identifies the rows that have to be modified.

{
    "table_name": "products",
    "primary_key": "id",
    "intersection": set([1, 2]),
    "delete": set([3, ]),
    "insert": [{"id": 5, "name": "bread", "count": 5, "price": 3.2}],
    "update": [{"id": 2, "count": 20}, ]
}

delta can then be used to apply the necessary changes to the destination database.

from pypgsync.mode.primarykey import apply_delta_by_primary_key

apply_delta_by_primary_key(con_destination, delta)

After which the two database tables are identical within the column and primary key range specified.

To accomplish the sync in one step, use the sync_by_primary_key function.

from pypgsync.mode.primarykey import sync_by_primary_key
sync_by_primary_key(cur_source, con_destination, table_name="products", primary_key="id")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pypgsync-1.2.0.tar.gz (7.9 kB view hashes)

Uploaded Source

Built Distribution

pypgsync-1.2.0-py3-none-any.whl (9.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page