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 is > just performing inplace update of index tuple, marking it as valid and > invalidating cache. But as far as this transaction is not assigned XID, no > 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 row.
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