Re: We need to rethink relation cache entry rebuild
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-hackers@postgreSQL.org
Date: 2010-01-10T23:57:44Z
Lists: pgsql-hackers
Attachments
- relcache-rebuild-fix.patch (text/x-patch) patch
I wrote: > Basically I think we have to fix this by ensuring that an error escape > can't occur while a relcache entry is in a partially rebuilt state. Attached is a draft patch for this. In addition to fixing the stated problem, it also takes care of a thinko that I found along the way: RelationClearRelation assumes that any rd_indexprs or rd_indpred trees can be freed by deleting the rd_indexcxt context, as the comments in rel.h imply. But actually the code that loads those fields was putting the trees directly into CacheMemoryContext, meaning that a cache flush on an index that has expressions or a predicate would result in a session-lifespan memory leak. I think this is not too complicated to back-patch --- if anything the logic is simpler than before. Comments? regards, tom lane