On 2018-05-26 13:45:06 -0700, Andres Freund wrote: > On 2018-05-25 15:05:31 -0700, Andres Freund wrote: > > On 2018-05-25 17:47:37 -0400, Tom Lane wrote: > > > For nailed indexes, we allow updating of some additional fields, and I > > > guess what has to happen here is that we teach the code to update some > > > additional fields for nailed tables too. > > > > Yea, it seems like we could just get a new version of the pg_class tuple > > if in the right state, and memcpy() it into place. Not sure if there's > > any other issues... > > That part isn't too hard. I've a patch that appears to address the > issue, and isn't *too* ugly. > > We don't really have a way to force .init file removal / update for > shared relations however. Otherwise we'll just continue to read old data > from .init files at startup. And there'll commonly not be any > outstanding invalidation. Thus it appears to me that we need to extend > RelcacheInitFileInval to also support the shared file. That's WAL > logged, but it looks like we can just add flag like > XACT_COMPLETION_UPDATE_RELCACHE_FILE without breaking the WAL format. > > Does anybody see a way to not have to remove the .init file?
Just to be clear: We already remove the non-shared relcache init file when a non-shared table in it is changed . Which I presume is the reason this issue hasn't bitten us in a much bigger way. While the lack of proper invalidations means that already running sessions will see the wrong values and make wrong decisions, the fact that the non-shared file will regularly be removed has reduced the impact quite a bit. Greetings, Andres Freund