Re: Create database bug in 8.1.3 ? -> solved

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Douglas McNaught <doug(at)mcnaught(dot)org>
Cc: "Milen Kulev" <makulev(at)gmx(dot)net>, "'William ZHANG'" <uniware(at)zedware(dot)org>, pgsql-general(at)postgresql(dot)org
Subject: Re: Create database bug in 8.1.3 ? -> solved
Date: 2006-04-09 15:56:08
Message-ID: 9044.1144598168@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Douglas McNaught <doug(at)mcnaught(dot)org> writes:
> "Milen Kulev" <makulev(at)gmx(dot)net> writes:
>> I can not understand why pg_dump, pg_dumpall have hard-coded "template0" ?

> The reason is this: any extra stuff that your database inherited from
> template1 (or whatever template you used) will be dumped out as part
> of your database. There is no way to for pg_dump to tell what parts
> came from template1 and what parts were added afterward, so it bases
> its dump on template0, which is a minimal database. If you based your
> restored database on template1, you would get collisions as the
> restore tried to add objects that were already there from template1.

Not only that. If you changed template1 after creating your database
from it, then a dump and restore of your database would be wrong if it
used template1: it would produce a database that did not match what was
dumped, but rather included those subsequent changes in template1.
(Which might in fact be what you'd wish for, but it's not pg_dump's
charter.) template0 is not only minimal but stable, so basing the
restore relative to it is more likely to produce a matching database
than using template1.

regards, tom lane

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Simon Riggs 2006-04-09 16:00:14 Re: Load testing across 2 machines
Previous Message Merlin Moncure 2006-04-09 15:12:43 Re: how to document database