Best way of upgrading postgresql in production?

Bill Moran wmoran at
Thu May 29 13:15:30 UTC 2008

In response to Gunther Mayer <gunther.mayer at>:
> I've been grappling with this and read all sorts of email threads and 
> blog posts but I still have no good solution to the following problem: I 
> want to upgrade a postgresql installation on FreeBSD 6.3 from 8.2 to 8.3 
> as we'd like to take advantage of its new features and performance 
> enhancements. Yet none of the ports system offers no clean _and_ quick 
> way of performing such an upgrade as the Makefiles of the respective 
> ports choke as soon as they detect an existing older -server or -client.
> Yet all I want to do is in a script which fires automatically at 5am via 
> cron (of course I'll get up to check just in case but I've done this 
> many times before):
>    1. Do all backup tasks (build packages for all installed postgresql
>       8.2 stuff for possible rollback, full database dump, configs etc.)
>       and take down all processes that write to the db
>    2. Shut down the database
>    3. Uninstall all postgresql 8.2 ports (client, server and client libs
>       we depend on)
>    4. Install all postgresql 8.3 ports
>    5. Fire up the new db, restore the complete database dump
>    6. Restore the configs (pg_hba.conf, postgresql.conf etc.) and
>       restart the database
>    7. Start up all "db write" services again
> Ideally that process shouldn't take longer than 5 minutes but step 
> number 4 is currently a big stumbling block as
>     * Building from ports will take a while
>     * I can't find any binary packages for 8.3 (would need i386 for
>       testing and amd64 for live) anywhere as far as I can see
>       ( has nothing, nor do the mirrors)
>     * building binary packages myself is impossible on the same machines
>       as pkg_create can only do that with installed packages, "make
>       package" et. all choke when they realise you already have
>       82-{client,server} installed and I don't see any other way of
>       creating a package without installing one
> How can I get out of this catch-22 /without /resorting to complicated 
> jail setups or even worse, manual compilations with different prefixes 
> and other nasties? There must be a way to get a package somehow...

Jail setups are not complicated.  You could also make the packages on
another system.  How about doing a make package on the server that you've
tested your application against 8.3 on?  You _have_ done that, right?

What makes you think that jail setups are so complicated.  I set up new
jails almost every week.  I get the impression that you have some reason
for avoiding the obvious solution, and I suspect it revolves around some
incorrect impression that jails are "complicated".

Bill Moran

More information about the freebsd-questions mailing list