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 по дате отправления: