pgmigrate2

Database schema migration tool for people who do not afraid SQL
Download

pgmigrate2 Ranking & Summary

Advertisement

  • Rating:
  • License:
  • The Apache License 2.0
  • Price:
  • FREE
  • Publisher Name:
  • Sergey Kirillov
  • Publisher web site:
  • http://pypi.python.org/pypi/losetup/

pgmigrate2 Tags


pgmigrate2 Description

pgmigrate2 is a Python tool that helps you to evolve your database together with your application.The fundamental unit of PGmigrate is a single SQL snippet called patch.Sample database patch cat 000049_Added_index_on_CategorySlug.sql--- id: 89ccfca6-6851-11e1-99d8-a088b4e3b168--- author: serg--- memo: Added index on CategorySlug--- date: 2012-03-07 14:32CREATE UNIQUE INDEX catalog_category_slug_shop_id_slug ON catalog_category_slug USING btree (shop_id, slug);As you can see patch is a valid SQL file, which even can be executed directly. It also has nice, human readable file name, and some metadata.QuickstartInitialize database pgmigrate2 init postgresql://user@password/testdbThis will create table __applied_patches__ in testdb. This table is used to track which patches are already applied.Create a patch repo, and a first patch mkdir patchrepo pgmigrate2 newpatch patchrepo... edit patch in your text editor...Wrote 'patchrepo/000001_creating_table_x.sql'This will create empty patch and open it in your text editor. Enter patch SQL, and optional memo, describing what is the function of this patch.PGmigrate will create a file like patchrepo/000001_creating_table_x.sql where 000001 is a patch serial number, and creating_table_x is a slugified patch memo. PGmigrate will fill rest of patch metadata by itself.Check what needs to be applied to pgmigrate2 check patchrepo/ postgresql://user@password/testdbNeed to apply: creating table xCheck takes all patches in patch repo, and print a list of patches which are need to be applied to testd.Apply patches pgmigrate2 migrate patchrepo/ postgresql://user@password/testdbNeed to apply 1 patches:Applying 'creating table x'Migrate takes all patches from patch repo, and sequentially applies those of them, whose id are not present in __applied_patches__ tables of testdb.EmbeddingHere is example how we use PGmigrate in our project:### Database migration commands@finaloption.command(config_opts)def dbmigrate(config): from shopium.core.config import read_config config = read_config(config) from pgmigrate2 import api return api.migrate('migrations', config.db_uri)@finaloption.command(config_opts)def dbnewpatch(config): from shopium.core.config import read_config config = read_config(config) from pgmigrate2 import api import subprocess path = api.newpatch('migrations') if path: subprocess.check_call('hg add %s' % path, shell=True) # add just created patch to Mercurial@finaloption.command(config_opts)def dbcheckstatus(config): from shopium.core.config import read_config config = read_config(config) from pgmigrate2 import api api.check_status('migrations', config.db_uri)Product's homepage


pgmigrate2 Related Software