pgdiff

Overview

This pgdiff gem compares two PostgreSQL databases and generates SQL statements to update the source database to match the target datbase.

The script detects differences in:

* Schemas
* Extensions
* Domains
* Tables
* Sequences
* Views
* Constraints
* Indices
* Functions
* Triggers
* Rules

Two objects with the same name are considered equal if they have the same definitions.

pgdiff does not currently compare ownership, user rights, object dependencies, table inheritance, type casts, aggregates or operators. Patches are welcome to add this functionality.

Installation

Install pgdiff:

gem install pgdiff

Usage

To use pgdiff open a command prompt and runn the following command:

pg_diff --source "source_connection_string" --target "destination_connection_string"

The format of the connection strings are documented in the Ruby PG gem at www.rubydoc.info/gems/pg/PG/Connection.new.

For eample:

"host=localhost dbname=a_database user=a_user password=a_password"

Ignore Schemas

By default, pgdiff will not process the following system schemas:

* pg_catalog
* pg_toast
* information_schema

You may specify additions schemas to ingore using the ‘–ingore-schemas` flag:

pgdiff --ignore_schemas=schema1,schema2

Output

By default, pgdiff will output results to stdout. You may also specify a file path via the ‘–output` command line parameter:

pgdiff --ouput=/tmp/diff.sql

You can then run this sql script against your database.

Run The Script

The sql script generated by pgdiff will change your database. It is YOUR responsibility to verify the script before running it. pgdiff may have bugs, which could result in catastrophic, unrecoverable changes to your database. DO NOT RUN THIS ON A PRODUCTION DATABASE WITHOUT BACKING UP AND TESTING FIRST.

Support

If you have any questions or want to contribute to pgdiff please visit github.com/cfis/pgdiff.git

License

pgdiff is provided under the MIT license.