[pgpool-hackers: 3761] Re: Using volatile property instead of black_function_list
Hou, Zhijie
houzj.fnst at cn.fujitsu.com
Sun Aug 2 11:53:35 JST 2020
Hi Ishii san
> > I think it works.
> >
> > And I hava some comments on the previous patch which use FORMATTED flag.
> >
> > Currently in function pool_search_relcache, first we use the
> function(table) name to match the right cache.
> >
> > if (strcasecmp(relcache->cache[i].dbname, dbname) == 0 &&
> > strcasecmp(relcache->cache[i].relname, table)
> == 0)
> >
> > if cache does not exists, we use "relcache->sql" to check the system
> catalog.
> >
> > snprintf(query, sizeof(query), relcache->sql, table);
> >
> > In function is_immutable_function, we change the "relcache->sql" every
> time we call is_immutable_function.
> > (when relcache has not been inited, we change local variables "query",
> > but "relcache->sql" will be indirectly modified with the local
> > variables "query" in pool_create_relcache)
> >
> > if(!relcache)
> > {
> > snprintf(query, sizeof(query),
> IS_STABLE_FUNCTION_QUERY,
> > "=", (char *) lsecond(names),
> (char *) linitial(names));
> > }
> > else
> > {
> > snprintf(relcache->sql, sizeof(relcache->sql),
> IS_STABLE_FUNCTION_QUERY,
> > "=", (char *) lsecond(names),
> (char *) linitial(names));
> >
> > }
> >
> > So ,I think it did use the correct sql, and the result is correct, what
> do you think?
>
> Yes, as far as is_immutable_function concerns, it should work. But now
> we want to check not only pg_proc.provolatile = 'i' case but
> pg_proc.provolatile = 'v' case. To make the code smaller and simpler, I
> want to unify pg_proc.provolatile = 'i' case and pg_proc.provolatile = 'v'
> case. If we want to stick with your method, we need to have two distinct
> relation cache: one is for pg_proc.provolatile = 'i case, and the other
> is for pg_proc.provolatile = 'v' case, which I want to avoid (actually we
> need three because function_volatile_property() in my patch allows to
> accept three types of volatile property).
>
> > If both methods work, may be we'd better use the shorter cache key?
>
> I agree that shorter cache key is better, but I guess the difference is
> atually subtle and I don't think it worth the more complex and longer code.
>
> If we concern the performance of the relation cache, probably we'd better
> to think about using a hash table, rather than a plain array which is
> currently used.
Thanks for your explanation, I understand the point.
You are right, this patch is actually better.
For the relation cache, May be we can add a todo?
Best regards,
houzj
More information about the pgpool-hackers
mailing list