Re: pg_upgrade < 9.3 -> >=9.3 misses a step around multixacts

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема Re: pg_upgrade < 9.3 -> >=9.3 misses a step around multixacts
Дата
Msg-id 20140702155634.GD7340@eldon.alvh.no-ip.org
обсуждение исходный текст
Ответ на Re: pg_upgrade < 9.3 -> >=9.3 misses a step around multixacts  (Bruce Momjian <bruce@momjian.us>)
Список pgsql-bugs
Bruce Momjian wrote:
> On Fri, Jun 27, 2014 at 05:05:21PM -0400, Alvaro Herrera wrote:

> > > Do they need to remove the members/0000 file too?
> >
> > No, the members file shouldn't be removed; if they have used multixacts
> > at all since upgrading, the members/0000 file contains the members of
> > the first bunch of multis.  Removing it would remove valid data.  (Also
> > I still think that removing the members/0000 file that initdb creates is
> > a mistake.)
>
> We never remove offset or members files with user data;  we are only
> discussing the removal of empty files created by initdb.  Can you
> explain why we would remove the offsets file but retain the members file
> created by initdb when we are _not_ preserving files from the old
> cluster?  We are certainly setting the offset and member value from the
> old cluster:
>
>         exec_prog(UTILITY_LOG_FILE, NULL, true,
>                   "\"%s/pg_resetxlog\" -m %u,%u \"%s\"",
>                   new_cluster.bindir,
>                   old_cluster.controldata.chkpnt_nxtmulti + 1,
>                   old_cluster.controldata.chkpnt_nxtmulti,
>                   new_cluster.pgdata);
>
> How are we not creating a gap in members files by setting the members
> value?  Why will that not cause problems?

We're not setting the offset and member value here; we're setting the
"nextMulti" and "oldestMulti" values.  Both affect the offsets counter,
not the members counter.  The members counter is kept at zero, so the
next multi to be allocated will create members starting from the first
members position in page zero.  initdb of the new cluster created the
first members page, which corresponds to the first members value that
will be used.

Note pg_resetxlog --help says:

  -m MXID,MXID     set next and oldest multitransaction ID

I think you're confusing the fact that we pass two values here (next and
oldest, both apply to offset counters) with offsets vs. members.

To affect the members counter you would use this other pg_resetxlog switch:
  -O OFFSET        set next multitransaction offset
which, AFAICS, we only use when upgrading from a 9.3+ cluster to a newer
9.3+ cluster (and we also copy the files from old cluster to the new
one).


--
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

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

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: pg_upgrade < 9.3 -> >=9.3 misses a step around multixacts
Следующее
От: John R Pierce
Дата:
Сообщение: Re: