Giter Club home page Giter Club logo

pgdiff's Introduction

pgdiff - PostgreSQL schema diff

pgdiff compares the schema between two PostgreSQL 9 databases and generates alter statements to be manually run against the second database to make them match. The provided pgdiff.sh script helps automate the process.

pgdiff is transparent in what it does, so it never modifies a database directly. You alone are responsible for verifying the generated SQL before running it against your database. Go ahead and see what SQL gets generated.

pgdiff is written to be easy to expand and improve the accuracy of the diff.

download

osx   linux   windows

usage

pgdiff [options] <schemaType>

(where options and <schemaType> are listed below)

I have found that there is an ideal order for running the different schema types. This order should minimize the problems you encounter. For example, you will always want to add new tables before you add new columns. This is the order that has worked for me, however "your mileage may vary".

In addition, some types can have dependencies which are not in the right order. A classic case is views which depend on other views. The missing view SQL is generated in alphabetical order so if a view create fails due to a missing view, just run the views SQL file over again. The pgdiff.sh script will prompt you about running it again.

Schema type ordering:

  1. FUNCTION
  2. ROLE
  3. SEQUENCE
  4. TABLE
  5. COLUMN
  6. VIEW
  7. OWNER
  8. INDEX
  9. FOREIGN_KEY
  10. GRANT_RELATIONSHIP
  11. GRANT_ATTRIBUTE
  12. TRIGGER

example

I have found it helpful to take --schema-only dumps of the databases in question, load them into a local postgres, then do my sql generation and testing there before running the SQL against a more official database. Your local postgres instance will need the correct users/roles populated because db dumps do not copy that information.

pgdiff -U dbuser -H localhost -D refDB  -O "sslmode=disable" \
       -u dbuser -h localhost -d compDB -o "sslmode=disable" \
       TABLE 

options

options explanation
-V, --version prints the version of pgdiff being used
-?, --help displays helpful usage information
-U, --user1 first postgres user
-u, --user2 second postgres user
-W, --password1 first db password
-w, --password2 second db password
-H, --host1 first db host. default is localhost
-h, --host2 second db host. default is localhost
-P, --port1 first db port number. default is 5432
-p, --port2 second db port number. default is 5432
-D, --dbname1 first db name
-d, --dbname2 second db name
-O, --option1 first db options. example: sslmode=disable
-o, --option2 second db options. example: sslmode=disable

getting started on linux and osx

linux and osx binaries are packaged with an extra, optional bash script and pgrun program that helps speed the diffing process.

  1. download the tgz file for your OS
  2. untar it: tar -xzvf pgdiff.tgz
  3. cd to the new pgdiff directory
  4. edit the db connection defaults in pgdiff.sh
  5. ...or manually run pgdiff for each schema type listed in the usage section above
  6. review the SQL output for each schema type and, if you want to make them match, run it against db2 (Function SQL requires the use of pgrun instead of psql)

getting started on windows

  1. download pgdiff.exe from the bin-win directory on github
  2. edit the db connection defaults in pgdiff.sh or...
  3. manually run pgdiff for each schema type listed in the usage section above
  4. review the SQL output and, if you want to make them match, run it against db2

version history

  1. 0.9.0 - Implemented ROLE, SEQUENCE, TABLE, COLUMN, INDEX, FOREIGN_KEY, OWNER, GRANT_RELATIONSHIP, GRANT_ATTRIBUTE
  2. 0.9.1 - Added VIEW, FUNCTION, and TRIGGER (Thank you, Shawn Carroll AKA SparkeyG)
  3. 0.9.2 - Fixed bug when using the non-default port

todo

  1. fix SQL for adding an array column
  2. create windows version of pgdiff.sh (or even better: re-write it all in Go)
  3. allow editing of individual SQL lines after failure (this would probably be done in the script pgdiff.sh)
  4. store failed SQL statements in an error file for later fixing and rerunning?

pgdiff's People

Contributors

joncrlsn avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.