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