I wrote: > It also seems quite odd that it doesn't fail every time; surely it's > not conditional whether we'll try to insert a new pg_class tuple or not? > We need to understand that, too.
Oh! One gets you ten it "works" as long as the pg_class update is a HOT update, so that we don't actually end up touching the indexes. This explains why the crash is less likely to happen in a database where one's done some work (and, probably, created some dead space in pg_class). On the other hand, it doesn't quite fit the observation that a VACUUM FULL masked the problem ... wouldn't that have ended up with densely packed pg_class? Maybe not, if it rebuilt everything else after pg_class... regards, tom lane