Skip to main content

pgmerge - a PostgreSQL data import and merge utility

Build Status PyPI Version Code Coverage Checked with mypy

This utility's main purpose is to manage a set of CSV files that correspond with tables in a PostgreSQL database:

  • Each of these CSV file's data can then be merged into their corresponding table (see section below).
  • The database schema is analysed to determine dependencies among tables (due to foreign keys), and CSV files are then imported in the correct order such that the data/tables that they might depend on have been imported first.
  • pgmerge can then also export data in the same format expected for import.

These features allow you to move data between databases with the same schema to keep them up to date and in sync, although it does not cover handling deleted data.

Import merging

Merging CSVs into a table means that the following process will occur (also called an upsert operation):

  • Rows whose primary key don't yet exist in the table will be imported.
  • When the primary key already exists, row values will be updated.
  • Rows that are missing or unchanged will be ignored.

CLI arguments

$ pgmerge --help
Usage: pgmerge [OPTIONS] COMMAND [ARGS]...

Merges data in CSV files into a Postgresql database.

Options:
--version  Show the version and exit.
--help     Show this message and exit.

Commands:
export  Export each table to a CSV file.
import  Import/merge each CSV file into a table.
inspect  Inspect database schema in various ways.

Import

$ pgmerge import --help
Usage: pgmerge import [OPTIONS] DIRECTORY [TABLES]...

Import/merge each CSV file into a table.

All CSV files need the same name as their matching table and have to be located
in the given directory. If one or more tables are specified then only they will
be used, otherwise all tables found will be selected.

Options:
-d, --dbname TEXT               Database name to connect to.  [required]
-h, --host TEXT                 Database server host or socket directory.
                                [default: localhost]
-p, --port TEXT                 Database server port.  [default: 5432]
-U, --username TEXT             Database user name.  [default: postgres]
-s, --schema TEXT               Database schema to use.  [default: public]
-w, --no-password               Never prompt for password (e.g. peer
                                authentication).
-W, --password TEXT             Database password (default is to prompt for
                                password or read config).
-L, --uri TEXT                  Connection URI can be used instead of specifying
                                parameters separately (also sets --no-password).
-f, --ignore-cycles             Don't stop import when cycles are detected in
                                schema (will still fail if there are cycles in
                                data)
-F, --disable-foreign-keys      Disable foreign key constraint checking during
                                import (necessary if you have cycles, but requires
                                superuser rights).
-c, --config PATH               Config file for customizing how tables are
                                imported/exported.
-i, --include-dependent-tables  When selecting specific tables, also include all
                                tables on which they depend due to foreign key
                                constraints.
--help                          Show this message and exit.

Installation

WARNING: the reliability of this utility is not guaranteed and loss or corruption of data is always a possibility.

Install from PyPI

With Python 3 installed on your system, you can run:

pip install pgmerge

To test that installation worked, run:

pgmerge --help

and you can uninstall at any time with:

pip uninstall pgmerge

Install from Github

To install the newest code directly from Github:

pip install git+https://github.com/samuller/pgmerge

Issues

If you have trouble installing and you're running a Debian-based Linux that uses Python 2 as its system default, then you might need to run:

sudo apt install libpq-dev python3-pip python3-setuptools
sudo -H pip3 install pgmerge

Release files for pgmerge 1.13.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pgmerge 1.13.0
File Size Uploaded
pgmerge-1.13.0.tar.gz 31.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pgmerge 1.13.0
File Interpreter ABI Platform
pgmerge-1.13.0-py3-none-any.whl Python 3 none any Details

Total release size: 67.9 kB

Release files / pgmerge-1.13.0.tar.gz

Download URL pgmerge-1.13.0.tar.gz
Size 31.9 kB
Tags Source
SHA-256 checksum
How to use checksums
1d8d8253f9f26d64dde23ff68661b435d840c4e8ee36f7a019cb1daf7ad0e463
BLAKE2b-256 checksum
How to use checksums
aa7fcb7623b7981b0229572baeaa7c93a50ed0695883fabfd944d008302bbb75
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.5.1 CPython/3.8.10 Linux/5.15.90.1-microsoft-standard-WSL2

Release files / pgmerge-1.13.0-py3-none-any.whl

Download URL pgmerge-1.13.0-py3-none-any.whl
Size 36.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4eac4005f3da07f7b860ad41588edc70d8770e6ed78fc10b5ae44787d5e6035a
BLAKE2b-256 checksum
How to use checksums
8fe67c74c03b4b8945bb9bf0da3280bb36a92ea9828dfa1e25eb4dc01eadb70b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.5.1 CPython/3.8.10 Linux/5.15.90.1-microsoft-standard-WSL2

Release history Release notifications | RSS feed

This release

1.13.0 This release

2 release files

1.12.0

2 release files

1.11.0

2 release files

1.10.1

2 release files

1.10.0

2 release files

1.9.1

2 release files

1.9.0

2 release files

1.8.0

1 release file

1.7.0

1 release file

1.6.2

1 release file

1.6.1

1 release file

1.6.0

1 release file

1.5.0

1 release file

1.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page