Re: checking rd_rules in RelationBuildDesc
On Fri, Nov 25, 2022 at 8:17 AM Tom Lane wrote: > Ted Yu writes: > > I wonder if we should check relation->rd_rules after the call > > to RelationBuildRuleLock(). > > That patch is both pointless and wrong. There is some > value in updating relhasrules in the catalog, so that future > relcache loads don't uselessly call RelationBuildRuleLock; > but we certainly can't try to do so right there. That being > the case, making the relcache be out of sync with what's on > disk cannot have any good consequences. The most likely > effect is that it would block later logic from fixing things > correctly. There is logic in VACUUM to clean out obsolete > relhasrules flags (see vac_update_relstats), but I suspect > that would no longer work properly if we did this. > > regards, tom lane > Hi, Thanks for evaluating the patch. The change was originating from what we have in RelationCacheInitializePhase3(): if (relation->rd_rel->relhasrules && relation->rd_rules == NULL) { RelationBuildRuleLock(relation); if (relation->rd_rules == NULL) relation->rd_rel->relhasrules = false; FYI
Re: checking rd_rules in RelationBuildDesc
Ted Yu writes: > I wonder if we should check relation->rd_rules after the call > to RelationBuildRuleLock(). That patch is both pointless and wrong. There is some value in updating relhasrules in the catalog, so that future relcache loads don't uselessly call RelationBuildRuleLock; but we certainly can't try to do so right there. That being the case, making the relcache be out of sync with what's on disk cannot have any good consequences. The most likely effect is that it would block later logic from fixing things correctly. There is logic in VACUUM to clean out obsolete relhasrules flags (see vac_update_relstats), but I suspect that would no longer work properly if we did this. regards, tom lane
checking rd_rules in RelationBuildDesc
Hi, (In light of commit 7b2ccc5e03bf16d1e1bbabca25298108c839ec52) In RelationBuildDesc(), we have: if (relation->rd_rel->relhasrules) RelationBuildRuleLock(relation); I wonder if we should check relation->rd_rules after the call to RelationBuildRuleLock(). Your comment is appreciated. build-desc-check-rules.patch Description: Binary data