do only critical work during single-user vacuum?

Started by John Naylorover 4 years ago97 messageshackers
Jump to latest
#1John Naylor
john.naylor@enterprisedb.com

When a user must shut down and restart in single-user mode to run
vacuum on an entire database, that does a lot of work that's
unnecessary for getting the system online again, even without
index_cleanup. We had a recent case where a single-user vacuum took
around 3 days to complete.

Now that we have a concept of a fail-safe vacuum, maybe it would be
beneficial to skip a vacuum in single-user mode if the fail-safe
criteria were not met at the beginning of vacuuming a relation. This
is not without risk, of course, but it should be much faster than
today and once up and running the admin would have a chance to get a
handle on things. Thoughts?

--
John Naylor
EDB: http://www.enterprisedb.com

#2Nathan Bossart
nathandbossart@gmail.com
In reply to: John Naylor (#1)
Re: do only critical work during single-user vacuum?

On 12/9/21, 11:34 AM, "John Naylor" <john.naylor@enterprisedb.com> wrote:

When a user must shut down and restart in single-user mode to run
vacuum on an entire database, that does a lot of work that's
unnecessary for getting the system online again, even without
index_cleanup. We had a recent case where a single-user vacuum took
around 3 days to complete.

Now that we have a concept of a fail-safe vacuum, maybe it would be
beneficial to skip a vacuum in single-user mode if the fail-safe
criteria were not met at the beginning of vacuuming a relation. This
is not without risk, of course, but it should be much faster than
today and once up and running the admin would have a chance to get a
handle on things. Thoughts?

Would the --min-xid-age and --no-index-cleanup vacuumdb options help
with this?

Nathan

In reply to: John Naylor (#1)
Re: do only critical work during single-user vacuum?

On Thu, Dec 9, 2021 at 11:28 AM John Naylor
<john.naylor@enterprisedb.com> wrote:

Now that we have a concept of a fail-safe vacuum, maybe it would be
beneficial to skip a vacuum in single-user mode if the fail-safe
criteria were not met at the beginning of vacuuming a relation.

Obviously the main goal of the failsafe is to not get into this
situation in the first place. But it's still very reasonable to ask
"what happens when the failsafe even fails at that?". This was
something that we considered directly when working on the feature.

There is a precheck that takes place before any other work, which
ensures that we won't even start off any of the nonessential tasks the
failsafe skips (e.g., index vacuuming). The precheck works like any
other check -- it checks if relfrozenxid is dangerously old. (We won't
even bother trying to launch parallel workers when this precheck
triggers, which is another reason to have it that Mashahiko pointed
out during development.)

Presumably there is no need to specifically check if we're running in
single user mode when considering if we need to trigger the failsafe
-- which, as you say, we won't do. It shouldn't matter, because
anybody running single-user mode just to VACUUM must already be unable
to allocate new XIDs outside of single user mode. That condition alone
will trigger the failsafe.

That said, it would be very easy to add a check for single user mode.
It didn't happen because we weren't aware of any specific need for it.
Perhaps there is an argument for it.

--
Peter Geoghegan

In reply to: Peter Geoghegan (#3)
Re: do only critical work during single-user vacuum?

On Thu, Dec 9, 2021 at 1:04 PM Peter Geoghegan <pg@bowt.ie> wrote:

On Thu, Dec 9, 2021 at 11:28 AM John Naylor
<john.naylor@enterprisedb.com> wrote:

Now that we have a concept of a fail-safe vacuum, maybe it would be
beneficial to skip a vacuum in single-user mode if the fail-safe
criteria were not met at the beginning of vacuuming a relation.

Obviously the main goal of the failsafe is to not get into this
situation in the first place. But it's still very reasonable to ask
"what happens when the failsafe even fails at that?". This was
something that we considered directly when working on the feature.

Oh, I think I misunderstood. Your concern is for the case where the
DBA runs a simple "VACUUM" in single-user mode; you want to skip over
tables that don't really need to advance relfrozenxid, automatically.

I can see an argument for something like that, but I think that it
should be a variant of VACUUM. Or maybe it could be addressed with a
better user interface; single-user mode should prompt the user about
what exact VACUUM command they ought to run to get things going.

--
Peter Geoghegan

#5Andres Freund
andres@anarazel.de
In reply to: John Naylor (#1)
Re: do only critical work during single-user vacuum?

Hi,

On 2021-12-09 15:28:18 -0400, John Naylor wrote:

When a user must shut down and restart in single-user mode to run
vacuum on an entire database, that does a lot of work that's
unnecessary for getting the system online again, even without
index_cleanup. We had a recent case where a single-user vacuum took
around 3 days to complete.

Now that we have a concept of a fail-safe vacuum, maybe it would be
beneficial to skip a vacuum in single-user mode if the fail-safe
criteria were not met at the beginning of vacuuming a relation. This
is not without risk, of course, but it should be much faster than
today and once up and running the admin would have a chance to get a
handle on things. Thoughts?

What if the user tried to reclaim space by vacuuming (via truncation)? Or is
working around some corruption or such? I think this is too much magic.

That said, having a VACUUM "selector" that selects the oldest tables could be
quite useful. And address this usecase both for single-user and normal
operation.

Another thing that might be worth doing is to update relfrozenxid earlier. We
definitely should update it before doing truncation (that can be quite
expensive). But we probably should do it even before the final
lazy_cleanup_all_indexes() pass - often that'll be the only pass, and there's
really no reason to delay relfrozenxid advancement till after that.

Greetings,

Andres Freund

#6John Naylor
john.naylor@enterprisedb.com
In reply to: Peter Geoghegan (#4)
Re: do only critical work during single-user vacuum?

On Thu, Dec 9, 2021 at 5:13 PM Peter Geoghegan <pg@bowt.ie> wrote:

Oh, I think I misunderstood. Your concern is for the case where the
DBA runs a simple "VACUUM" in single-user mode; you want to skip over
tables that don't really need to advance relfrozenxid, automatically.

Right.

I can see an argument for something like that, but I think that it
should be a variant of VACUUM. Or maybe it could be addressed with a
better user interface;

On Thu, Dec 9, 2021 at 6:08 PM Andres Freund <andres@anarazel.de> wrote:

What if the user tried to reclaim space by vacuuming (via truncation)? Or is
working around some corruption or such? I think this is too much magic.

That said, having a VACUUM "selector" that selects the oldest tables could be
quite useful. And address this usecase both for single-user and normal
operation.

All good points.

[Peter again]

single-user mode should prompt the user about
what exact VACUUM command they ought to run to get things going.

The current message is particularly bad in its vagueness because some
users immediately reach for VACUUM FULL, which quite logically seems
like the most complete thing to do.

--
John Naylor
EDB: http://www.enterprisedb.com

In reply to: John Naylor (#6)
Re: do only critical work during single-user vacuum?

On Thu, Dec 9, 2021 at 3:53 PM John Naylor <john.naylor@enterprisedb.com> wrote:

single-user mode should prompt the user about
what exact VACUUM command they ought to run to get things going.

The current message is particularly bad in its vagueness because some
users immediately reach for VACUUM FULL, which quite logically seems
like the most complete thing to do.

You mean the GetNewTransactionId() error, about single-user mode? Why
do we need to use single-user mode at all? I'm pretty sure that the
reason is "as an escape hatch", but I wonder what that really means.

***Thinks***

I suppose that it might be a good idea to make sure that autovacuum
cannot run, because in general autovacuum might need to allocate an
XID (for autoanalyze), and locking all that down in exactly the right
way might not be a very good use of our time.

But even still, why not have some variant of single-user mode just for
this task? Something that's easy to use when the DBA is rudely
awakened at 4am -- something a little bit like a big red button that
fixes the exact problem of XID exhaustion, in a reasonably targeted
way? I don't think that this needs to involve the VACUUM command
itself.

The current recommendation to do a whole-database VACUUM doesn't take
a position on how old the oldest datfrozenxid has to be in order to
become safe again, preferring to "make a conservative recommendation"
-- which is what a database-level VACUUM really is. But that doesn't
seem helpful at all. In fact, it's not even conservative. We could
easily come up with a reasonable definition of "datfrozenxid that's
sufficiently new to make it safe to come back online and allocate XIDs
again". Perhaps something based on the current
autovacuum_freeze_max_age (and autovacuum_multixact_freeze_max_age)
settings, with sanity checks.

We could then apply this criteria in new code that implements this
"big red button" (maybe this is a new option for the postgres
executable, a little like --single?). Something that's reasonably
targeted, and dead simple to use.

--
Peter Geoghegan

#8Nathan Bossart
nathandbossart@gmail.com
In reply to: Peter Geoghegan (#7)
Re: do only critical work during single-user vacuum?

On 12/9/21, 12:33 PM, "Bossart, Nathan" <bossartn@amazon.com> wrote:

On 12/9/21, 11:34 AM, "John Naylor" <john.naylor@enterprisedb.com> wrote:

Now that we have a concept of a fail-safe vacuum, maybe it would be
beneficial to skip a vacuum in single-user mode if the fail-safe
criteria were not met at the beginning of vacuuming a relation. This
is not without risk, of course, but it should be much faster than
today and once up and running the admin would have a chance to get a
handle on things. Thoughts?

Would the --min-xid-age and --no-index-cleanup vacuumdb options help
with this?

Sorry, I'm not sure what I was thinking. Of coure you cannot use
vacuumdb in single-user mode. But I think something like
--min-xid-age in VACUUM is what you are looking for.

Nathan

#9Nathan Bossart
nathandbossart@gmail.com
In reply to: Peter Geoghegan (#7)
Re: do only critical work during single-user vacuum?

On 12/9/21, 4:36 PM, "Peter Geoghegan" <pg@bowt.ie> wrote:

We could then apply this criteria in new code that implements this
"big red button" (maybe this is a new option for the postgres
executable, a little like --single?). Something that's reasonably
targeted, and dead simple to use.

+1

Nathan

#10Nathan Bossart
nathandbossart@gmail.com
In reply to: Nathan Bossart (#9)
Re: do only critical work during single-user vacuum?

On 12/9/21, 5:06 PM, "Bossart, Nathan" <bossartn@amazon.com> wrote:

On 12/9/21, 4:36 PM, "Peter Geoghegan" <pg@bowt.ie> wrote:

We could then apply this criteria in new code that implements this
"big red button" (maybe this is a new option for the postgres
executable, a little like --single?). Something that's reasonably
targeted, and dead simple to use.

+1

As Andres noted, such a feature might be useful during normal
operation, too. Perhaps the vacuumdb --min-xid-age stuff should be
moved to a new VACUUM option.

Nathan

In reply to: Nathan Bossart (#10)
Re: do only critical work during single-user vacuum?

On Thu, Dec 9, 2021 at 5:12 PM Bossart, Nathan <bossartn@amazon.com> wrote:

As Andres noted, such a feature might be useful during normal
operation, too. Perhaps the vacuumdb --min-xid-age stuff should be
moved to a new VACUUM option.

I was thinking of something like pg_import_system_collations() for
this: a function that's built-in, and can be called in single user
mode, that nevertheless doesn't make any assumptions about how it may
be called. Nothing stops a superuser from calling
pg_import_system_collations() themselves, outside of initdb. That
isn't particularly common, but it works in the way you'd expect it to
work. It's easy to test.

I imagine that this new function (to handle maintenance tasks in the
event of a wraparound emergency) would output information about its
progress. For example, it would make an up-front decision about which
tables needed to be vacuumed in order for the current DB's
datfrozenxid to be sufficiently new, before it started anything (with
handling for edge-cases with many tables, perhaps). It might also show
the size of each table, and show another line for each table that has
been processed so far, as a rudimentary progress indicator.

We could still have a separate option for the postgres executable,
just to invoke single-user mode and call this function. It would
mostly just be window dressing, of course, but that still seems
useful.

--
Peter Geoghegan

#12Andres Freund
andres@anarazel.de
In reply to: Peter Geoghegan (#7)
Re: do only critical work during single-user vacuum?

Hi,

On 2021-12-09 16:34:53 -0800, Peter Geoghegan wrote:

But even still, why not have some variant of single-user mode just for
this task?

Something that's easy to use when the DBA is rudely
awakened at 4am -- something a little bit like a big red button that
fixes the exact problem of XID exhaustion, in a reasonably targeted
way? I don't think that this needs to involve the VACUUM command
itself.

I think we should move *away* from single user mode, rather than the
opposite. It's a substantial code burden and it's hard to use.

I don't think single user mode is a good fit for this anyway - it's inherently
focussed on connecting to a single database. But wraparound issues often
involve more than one database (often just because of shared catalogs).

Also, requiring a restart will often exascerbate the problem - the cache will
be cold, there's no walwriter, etc, making the vacuum slower. Making vacuum
not consume an xid seems like a lot more promising - and quite doable. Then
there's no need to restart at all.

Greetings,

Andres Freund

In reply to: Andres Freund (#12)
Re: do only critical work during single-user vacuum?

On Thu, Dec 9, 2021 at 5:56 PM Andres Freund <andres@anarazel.de> wrote:

I think we should move *away* from single user mode, rather than the
opposite. It's a substantial code burden and it's hard to use.

I wouldn't say that this is moving closer to single user mode.

I don't think single user mode is a good fit for this anyway - it's inherently
focussed on connecting to a single database. But wraparound issues often
involve more than one database (often just because of shared catalogs).

I don't disagree with any of that. My suggestions were based on the
assumption that it might be unrealistic to expect somebody to spend a
huge amount of time on this, given that (in a certain sense) it's
never really supposed to be used. Even a very simple approach would be
a big improvement.

Also, requiring a restart will often exascerbate the problem - the cache will
be cold, there's no walwriter, etc, making the vacuum slower. Making vacuum
not consume an xid seems like a lot more promising - and quite doable. Then
there's no need to restart at all.

I didn't give too much consideration to what it would take to keep the
system partially online, without introducing excessive complexity.
Maybe it wouldn't be that hard to teach the system to stop allocating
XIDs, while still allowing autovacuum workers to continue to get the
system functioning again. With the av workers taking a particular
emphasis on doing whatever work is required for the system to be able
to allocate XIDs again -- but not too much more (not until things are
back to normal). Now the plan is starting to get ambitious relative to
how often it'll be seen by users, though.

--
Peter Geoghegan

#14Nathan Bossart
nathandbossart@gmail.com
In reply to: Peter Geoghegan (#11)
Re: do only critical work during single-user vacuum?

On 12/9/21, 5:27 PM, "Peter Geoghegan" <pg@bowt.ie> wrote:

I imagine that this new function (to handle maintenance tasks in the
event of a wraparound emergency) would output information about its
progress. For example, it would make an up-front decision about which
tables needed to be vacuumed in order for the current DB's
datfrozenxid to be sufficiently new, before it started anything (with
handling for edge-cases with many tables, perhaps). It might also show
the size of each table, and show another line for each table that has
been processed so far, as a rudimentary progress indicator.

I like the idea of having a built-in function that does the bare
minimum to resolve wraparound emergencies, and I think providing some
sort of simple progress indicator (even if rudimentary) would be very
useful. I imagine the decision logic could be pretty simple. If
we're only interested in getting the cluster out of a wraparound
emergency, we can probably just look for all tables with an age over
~2B.

Nathan

In reply to: Nathan Bossart (#14)
Re: do only critical work during single-user vacuum?

On Thu, Dec 9, 2021 at 8:41 PM Bossart, Nathan <bossartn@amazon.com> wrote:

I like the idea of having a built-in function that does the bare
minimum to resolve wraparound emergencies, and I think providing some
sort of simple progress indicator (even if rudimentary) would be very
useful.

If John doesn't have time to work on this during the Postgres 15
cycle, and if nobody else picks it up, then we should at least do the
bare minimum here: force the use of the failsafe in single user mode
(regardless of the age of relfrozenxid/relminmxid, which in general
might not be that old in tables where VACUUM might need to do a lot of
work). Attached quick and dirty patch shows what this would take. If
nothing else, it seems natural to define running any VACUUM in single
user mode as an emergency.

This is really the least we could do -- it's much better than nothing,
but still really lazy^M^M^M^M conservative. I haven't revised the
assumption that the user should do a top-level "VACUUM" in databases
that can no longer allocate XIDs due to wraparound, despite the fact
that we could do far better with moderate effort. Although it might
make sense to commit something like the attached as part of a more
worked out solution (assuming it didn't fully remove single user mode
from the equation, which would be better still).

--
Peter Geoghegan

Attachments:

v1-0001-Always-trigger-failsafe-in-single-user-mode.patchapplication/octet-stream; name=v1-0001-Always-trigger-failsafe-in-single-user-mode.patchDownload+13-6
#16Andres Freund
andres@anarazel.de
In reply to: Peter Geoghegan (#15)
Re: do only critical work during single-user vacuum?

Hi,

On 2021-12-20 17:17:26 -0800, Peter Geoghegan wrote:

On Thu, Dec 9, 2021 at 8:41 PM Bossart, Nathan <bossartn@amazon.com> wrote:

I like the idea of having a built-in function that does the bare
minimum to resolve wraparound emergencies, and I think providing some
sort of simple progress indicator (even if rudimentary) would be very
useful.

If John doesn't have time to work on this during the Postgres 15
cycle, and if nobody else picks it up, then we should at least do the
bare minimum here: force the use of the failsafe in single user mode
(regardless of the age of relfrozenxid/relminmxid, which in general
might not be that old in tables where VACUUM might need to do a lot of
work). Attached quick and dirty patch shows what this would take. If
nothing else, it seems natural to define running any VACUUM in single
user mode as an emergency.

As I said before I think this is a bad idea. I'm fine with adding a vacuum
parameter forcing failsafe mode. And perhaps a hint to suggest it in single
user mode. But forcing it is a bad idea - single user isn't just used for
emergencies (c.f. initdb, which this patch would regress) and not every
emergency making single user mode useful is related to wraparound.

Greetings,

Andres Freund

#17Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Andres Freund (#16)
Re: do only critical work during single-user vacuum?

On Tue, Dec 21, 2021 at 12:46 PM Andres Freund <andres@anarazel.de> wrote:

Hi,

On 2021-12-20 17:17:26 -0800, Peter Geoghegan wrote:

On Thu, Dec 9, 2021 at 8:41 PM Bossart, Nathan <bossartn@amazon.com> wrote:

I like the idea of having a built-in function that does the bare
minimum to resolve wraparound emergencies, and I think providing some
sort of simple progress indicator (even if rudimentary) would be very
useful.

If John doesn't have time to work on this during the Postgres 15
cycle, and if nobody else picks it up, then we should at least do the
bare minimum here: force the use of the failsafe in single user mode
(regardless of the age of relfrozenxid/relminmxid, which in general
might not be that old in tables where VACUUM might need to do a lot of
work). Attached quick and dirty patch shows what this would take. If
nothing else, it seems natural to define running any VACUUM in single
user mode as an emergency.

As I said before I think this is a bad idea. I'm fine with adding a vacuum
parameter forcing failsafe mode. And perhaps a hint to suggest it in single
user mode. But forcing it is a bad idea - single user isn't just used for
emergencies (c.f. initdb, which this patch would regress) and not every
emergency making single user mode useful is related to wraparound.

+1

BTW a vacuum automatically enters failsafe mode under the situation
where the user has to run a vacuum in the single-user mode, right?

Regards,

--
Masahiko Sawada
EDB: https://www.enterprisedb.com/

In reply to: Masahiko Sawada (#17)
Re: do only critical work during single-user vacuum?

On Mon, Dec 20, 2021 at 8:40 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

BTW a vacuum automatically enters failsafe mode under the situation
where the user has to run a vacuum in the single-user mode, right?

Only for the table that had the problem. Maybe there are no other
tables that a database level "VACUUM" will need to spend much time on,
or maybe there are, and they will make it take much much longer (it
all depends).

The goal of the patch is to make sure that when we're in single user
mode, we'll consistently trigger the failsafe, for every VACUUM
against every table -- not just the table (or tables) whose
relfrozenxid is very old. That's still naive, but much less naive than
simply telling users to VACUUM the whole database in single user mode
while vacuuming indexes, etc.

--
Peter Geoghegan

#19Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Peter Geoghegan (#18)
Re: do only critical work during single-user vacuum?

On Tue, Dec 21, 2021 at 1:53 PM Peter Geoghegan <pg@bowt.ie> wrote:

On Mon, Dec 20, 2021 at 8:40 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

BTW a vacuum automatically enters failsafe mode under the situation
where the user has to run a vacuum in the single-user mode, right?

Only for the table that had the problem. Maybe there are no other
tables that a database level "VACUUM" will need to spend much time on,
or maybe there are, and they will make it take much much longer (it
all depends).

The goal of the patch is to make sure that when we're in single user
mode, we'll consistently trigger the failsafe, for every VACUUM
against every table -- not just the table (or tables) whose
relfrozenxid is very old. That's still naive, but much less naive than
simply telling users to VACUUM the whole database in single user mode
while vacuuming indexes, etc.

I understand the patch, thank you for the explanation!

I remember Simon proposed a VACUUM command option[1]https://commitfest.postgresql.org/32/2908/, called
FAST_FREEZE, to turn off index cleanup and heap truncation. Now that
we have failsafe mechanism probably we can have a VACUUM command
option to turn on failsafe mode instead.

Regards,

[1]: https://commitfest.postgresql.org/32/2908/

--
Masahiko Sawada
EDB: https://www.enterprisedb.com/

#20John Naylor
john.naylor@enterprisedb.com
In reply to: Masahiko Sawada (#19)
Re: do only critical work during single-user vacuum?

On Tue, Dec 21, 2021 at 3:56 AM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Tue, Dec 21, 2021 at 1:53 PM Peter Geoghegan <pg@bowt.ie> wrote:

On Mon, Dec 20, 2021 at 8:40 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

BTW a vacuum automatically enters failsafe mode under the situation
where the user has to run a vacuum in the single-user mode, right?

Only for the table that had the problem. Maybe there are no other
tables that a database level "VACUUM" will need to spend much time on,
or maybe there are, and they will make it take much much longer (it
all depends).

The goal of the patch is to make sure that when we're in single user
mode, we'll consistently trigger the failsafe, for every VACUUM
against every table -- not just the table (or tables) whose
relfrozenxid is very old. That's still naive, but much less naive than
simply telling users to VACUUM the whole database in single user mode
while vacuuming indexes, etc.

I understand the patch, thank you for the explanation!

I remember Simon proposed a VACUUM command option[1], called
FAST_FREEZE, to turn off index cleanup and heap truncation. Now that
we have failsafe mechanism probably we can have a VACUUM command
option to turn on failsafe mode instead.

I've been thinking a bit more about this, and I see two desirable
goals of anti-wraparound vacuum in single-user mode:

1. Get out of single-user mode as quickly as possible.

2. Minimize the catch-up work we have to do once we're out.

Currently, a naive vacuum does as much work as possible and leaves a
bunch of WAL streaming and archiving work for later, so that much is
easy to improve upon and we don't have to be terribly sophisticated.
Keeping in mind Andres' point that we don't want to force possibly
unwanted behavior just because we're in single-user mode, it makes
sense to have some kind of option that has the above two goals.
Instead of a boolean, it seems like the new option should specify some
age below which VACUUM will skip the table entirely, and above which
will enter fail-safe mode. As mentioned earlier, the shutdown hint
could spell out the exact command. With this design, it would specify
the fail-safe default, or something else, to use with the option. That
seems doable for v15 -- any thoughts on that approach?

In standard operation, the above goals could be restated as "advance
xmin as quickly as possible" and "generate as little future
'work/debt' as possible, whether dirty pages or WAL". There are some
more sophisticated things we can do in this regard, but something like
the above could also be useful in normal operation. In fact, that
"normal" could be just after we restarted after doing the bare-minimum
in single-user mode, and want to continue freezing and keep things
under control.

--
John Naylor
EDB: http://www.enterprisedb.com

#21John Naylor
john.naylor@enterprisedb.com
In reply to: John Naylor (#20)
In reply to: John Naylor (#21)
#23John Naylor
john.naylor@enterprisedb.com
In reply to: Peter Geoghegan (#22)
#24Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Peter Geoghegan (#22)
#25John Naylor
john.naylor@enterprisedb.com
In reply to: Masahiko Sawada (#24)
In reply to: Masahiko Sawada (#24)
#27John Naylor
john.naylor@enterprisedb.com
In reply to: Peter Geoghegan (#22)
In reply to: John Naylor (#27)
#29Justin Pryzby
pryzby@telsasoft.com
In reply to: John Naylor (#27)
#30Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Peter Geoghegan (#28)
#31John Naylor
john.naylor@enterprisedb.com
In reply to: Peter Geoghegan (#28)
#32John Naylor
john.naylor@enterprisedb.com
In reply to: Justin Pryzby (#29)
#33John Naylor
john.naylor@enterprisedb.com
In reply to: Masahiko Sawada (#30)
#34Nathan Bossart
nathandbossart@gmail.com
In reply to: John Naylor (#33)
#35John Naylor
john.naylor@enterprisedb.com
In reply to: Nathan Bossart (#34)
#36Nathan Bossart
nathandbossart@gmail.com
In reply to: John Naylor (#35)
#37John Naylor
john.naylor@enterprisedb.com
In reply to: Nathan Bossart (#36)
#38Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Nathan Bossart (#36)
#39John Naylor
john.naylor@enterprisedb.com
In reply to: Masahiko Sawada (#38)
#40Nathan Bossart
nathandbossart@gmail.com
In reply to: Masahiko Sawada (#38)
#41Nathan Bossart
nathandbossart@gmail.com
In reply to: John Naylor (#39)
#42Michael Paquier
michael@paquier.xyz
In reply to: Nathan Bossart (#41)
#43Masahiko Sawada
sawada.mshk@gmail.com
In reply to: John Naylor (#39)
#44John Naylor
john.naylor@enterprisedb.com
In reply to: Masahiko Sawada (#43)
#45Nathan Bossart
nathandbossart@gmail.com
In reply to: John Naylor (#44)
#46Justin Pryzby
pryzby@telsasoft.com
In reply to: John Naylor (#44)
#47John Naylor
john.naylor@enterprisedb.com
In reply to: Justin Pryzby (#46)
#48Masahiko Sawada
sawada.mshk@gmail.com
In reply to: John Naylor (#47)
#49John Naylor
john.naylor@enterprisedb.com
In reply to: Masahiko Sawada (#48)
#50John Naylor
john.naylor@enterprisedb.com
In reply to: John Naylor (#49)
#51Justin Pryzby
pryzby@telsasoft.com
In reply to: John Naylor (#47)
#52Robert Haas
robertmhaas@gmail.com
In reply to: Andres Freund (#12)
#53John Naylor
john.naylor@enterprisedb.com
In reply to: Robert Haas (#52)
#54Robert Haas
robertmhaas@gmail.com
In reply to: John Naylor (#53)
#55John Naylor
john.naylor@enterprisedb.com
In reply to: Robert Haas (#54)
#56Andres Freund
andres@anarazel.de
In reply to: Robert Haas (#54)
#57Robert Haas
robertmhaas@gmail.com
In reply to: John Naylor (#55)
#58Andres Freund
andres@anarazel.de
In reply to: John Naylor (#55)
#59Robert Haas
robertmhaas@gmail.com
In reply to: Andres Freund (#56)
#60John Naylor
john.naylor@enterprisedb.com
In reply to: Andres Freund (#58)
#61Robert Haas
robertmhaas@gmail.com
In reply to: John Naylor (#60)
#62Andres Freund
andres@anarazel.de
In reply to: Robert Haas (#59)
#63Robert Haas
robertmhaas@gmail.com
In reply to: Andres Freund (#62)
#64Andres Freund
andres@anarazel.de
In reply to: Robert Haas (#63)
#65Justin Pryzby
pryzby@telsasoft.com
In reply to: Andres Freund (#64)
#66John Naylor
john.naylor@enterprisedb.com
In reply to: Robert Haas (#61)
#67John Naylor
john.naylor@enterprisedb.com
In reply to: Andres Freund (#56)
In reply to: John Naylor (#67)
#69John Naylor
john.naylor@enterprisedb.com
In reply to: Peter Geoghegan (#68)
#70Robert Haas
robertmhaas@gmail.com
In reply to: John Naylor (#69)
In reply to: John Naylor (#69)
In reply to: Peter Geoghegan (#71)
#73John Naylor
john.naylor@enterprisedb.com
In reply to: Peter Geoghegan (#72)
In reply to: John Naylor (#73)
#75Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Peter Geoghegan (#71)
In reply to: Masahiko Sawada (#75)
#77Robert Haas
robertmhaas@gmail.com
In reply to: Peter Geoghegan (#76)
In reply to: Robert Haas (#77)
#79Andres Freund
andres@anarazel.de
In reply to: Peter Geoghegan (#78)
In reply to: Andres Freund (#79)
In reply to: Peter Geoghegan (#80)
#82Robert Haas
robertmhaas@gmail.com
In reply to: Peter Geoghegan (#80)
#83Robert Haas
robertmhaas@gmail.com
In reply to: Peter Geoghegan (#81)
In reply to: Robert Haas (#82)
#85Robert Haas
robertmhaas@gmail.com
In reply to: Peter Geoghegan (#84)
In reply to: Robert Haas (#85)
#87Robert Haas
robertmhaas@gmail.com
In reply to: Peter Geoghegan (#86)
In reply to: Robert Haas (#87)
#89Robert Haas
robertmhaas@gmail.com
In reply to: Peter Geoghegan (#88)
#90Noah Misch
noah@leadboat.com
In reply to: John Naylor (#73)
#91Andres Freund
andres@anarazel.de
In reply to: Noah Misch (#90)
#92Noah Misch
noah@leadboat.com
In reply to: Andres Freund (#91)
In reply to: Andres Freund (#91)
In reply to: John Naylor (#73)
#95John Naylor
john.naylor@enterprisedb.com
In reply to: Peter Geoghegan (#94)
#96Justin Pryzby
pryzby@telsasoft.com
In reply to: Robert Haas (#52)
In reply to: Justin Pryzby (#96)