Re: pg_upgrade fails for non-postgres user

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема Re: pg_upgrade fails for non-postgres user
Дата
Msg-id 201102011810.p11IAZH10910@momjian.us
обсуждение исходный текст
Ответ на Re: pg_upgrade fails for non-postgres user  (Magnus Hagander <magnus@hagander.net>)
Список pgsql-hackers
Magnus Hagander wrote:
> On Tue, Feb 1, 2011 at 02:25, Bruce Momjian <bruce@momjian.us> wrote:
> > Magnus Hagander wrote:
> >> I just tried doing pg_upgrade on a database when logged in as user
> >> "mha" rather than "postgres" on my system. And it failed. Even though
> >> the db was initialized with superuser "mha". The reason for this was
> >> that pg_upgrade tried to connect to the database "mha" (hardcoded to
> >> be the db username), and that certainly didn't exist.
> >>
> >> When that was fixed, I realized the psql command to create the
> >> datanbases connect to database "template1" only to immediately switch
> >> to database "postgres", which also seems rather pointless.
> >>
> >> Attach patch makes it connect to the "postgres" database instead of
> >> $USER, and then also changes the psql command to actually use it.
> >>
> >> I know way too little about pg_upgrade to tell if this is fully safe,
> >> but it does fix the problem in my installation.
> >
> > I have found that this problem only affects PG 9.1 and is not part of
> > released PG 9.0 because we don't restore pg_authid in 9.0 (we don't need
> > to because we have no pg_largeobject_metadata table in PG 8.4).
> 
> Ah, that explains why we haven't seen reports on this before.

Yes.  I wisely did not backpatch this:
http://archives.postgresql.org/pgsql-hackers/2011-01/msg00531.php

If I had, we might not have found the bug until we released a minor
version, and then it might have taken months for another minor release
to fix it, which would have cause pg_upgrade users months of problems.

> > I have applied a modified version of your patch to always retore into
> > the 'postgres' database rather than the OS user. ?I thought we created
> > an os-user-named database, but it seems that database is always called
> > 'postgres' but is owned by the OS user. ?That seems kind of
> > inconsistent, but no matter.
> 
> The whole reason for the postgres database is to provide a
> *predictable* name for people and tools to connect to, and possibly
> store things in. template1 works reasonably well for "connect to", but
> not for "store in" - because it gets duplicated out to all new
> databases after that.

OK, that makes sense.  pg_upgrade _mostly_ just issues queries, both in
the new and old cluster, and because the old cluster might not have a
'postgres' database (deleted), it seems best to do connections to
template1 unless I need to create something.

> Which is also why it's a good reason to have it the default fo
> r"connect to" either - because people will create object there by
> mistake, and then get it duplicated out to all new databases.

OK.

--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + It's impossible for everything to be true. +


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: Re: log_hostname and pg_stat_activity
Следующее
От: Dimitri Fontaine
Дата:
Сообщение: ALTER EXTENSION UPGRADE, v3