On 27 February 2016 at 00:33, Simon Riggs <si...@2ndquadrant.com> wrote:
> On 27 February 2016 at 00:29, Andres Freund <and...@anarazel.de> wrote:
>> On 2016-02-26 18:05:55 +0300, Konstantin Knizhnik wrote:
>> > The reason of the problem is that invalidation messages are not
>> delivered to
>> > replica after the end of concurrent create index.
>> > Invalidation messages are included in xlog as part of transaction commit
>> > record.
>> > Concurrent index create is split into three transaction, last of which
>> > just performing inplace update of index tuple, marking it as valid and
>> > invalidating cache. But as far as this transaction is not assigned XID,
>> > transaction record is created in WAL and send to replicas. As a result,
>> > replica doesn't receive this invalidation messages.
>> Ugh, that's a fairly ugly bug.
> Looking now.
If the above is true, then the proposed fix wouldn't work either.
No point in sending a cache invalidation message on the standby if you
haven't also written WAL, since the catalog re-read would just see the old
heap_inplace_update() does write WAL, which blows away the starting premise.
So I'm not seeing this as an extant bug in an open source version of
PostgreSQL, in my current understanding.
Simon Riggs http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services