Hi Stephen!

Thanks for today's IRC discussion, I'll try to summarize and create a
mini-spec:

------ snip -------
 1. Add and ship /etc/postgresql/pg_upgradecluster.d/. Scripts in that
 directory will be called with the following arguments:

 <old version> <cluster name> <new version> <phase> 

 <phase> is 'init' right after creating a virgin cluster of
 <newversion>, and 'finish' after all the data from the old version
 cluster has been dumped/reloaded into the new one.

 Packages like postgis and the admin can drop whichever scripts they
 like into this directory.

 2. Change pg_upgradecluster to not restore objects which are already
 present in the new cluster.

  - after initializing the new cluster and calling pg_upgradecluster.d
    scripts with phase init, record already existing objects and
    databases:
 
     pg_dump -Fc --schema-only $db | pg_restore -l > /tmpdir/ignore-$db

  - determine set of objects that need to be restored from the old
    cluster:

     pg_dump -Fc --schema-only $db | pg_restore -l | sortmagic | > 
/tmpdir/restore-$db

    sortmagic is some perl code snippet which ignores all objects that
    occur in ignore-$db.

  - add -L /tmpdir/restore-$db argument to pg_restore call

------ snip -------

Things to discuss:

 - Does that per-cluster .d hook directory accomodate the needs of
   PostGIS? Would a per-database hook be better?

 - Is the ignore scheme sketched above enough, or do we need
   additional 'no dump' blacklists?

Thanks for reviewing,

Martin

-- 
Martin Pitt        http://www.piware.de
Ubuntu Developer   http://www.ubuntu.com
Debian Developer   http://www.debian.org

In a world without walls and fences, who needs Windows and Gates?

Attachment: signature.asc
Description: Digital signature

Reply via email to