[pgpool-general: 7109] Re: Query cache invalidation for functions?
Tatsuo Ishii
ishii at sraoss.co.jp
Sat Jun 27 14:24:38 JST 2020
>> Currently there's no such functionality in Pgpool-II. It's a technical
>> challenge for Pgpool-II because there's no way for Pgpool-II to know
>> what table(s) are modified inside the function.
>
>
> Yes, I figured that was a serious challenge.
>
>
>> To implement such
>> functionality, Pgpool-II needs to know:
>>
>> 1) whether the SELECT modifies tables or not.
>>
>> 2) if #1 is yes, what table(s) will be modified in the SELECT
>>
>> For this purpose we need to invent a new parameter to provide the
>> information above. Suggestions, or even better, patches are welcome.
>>
>
> I was thinking in terms of an explicit function in PgPool-II to invalidate
> cache on chosen tables.
>
> For example if I call a function *SELECT func_that_updates_table_a();*,
> could I then call a function something like *SELECT
> pgpool_cache_invalidate('table_a');* and have the cache for that table
> explicitly invalidated? Or would it be possible to put that sort of
> function call inside a function, so the function might do something like
> (pseudocode):
>
> *BEGIN*
>
>
>
>
>
>
>
> *INSERT INTO table_a VALUES('value1','value2');UPDATE table_b SET
> value_a='something' WHERE value_b='something';PERFORM
> pgpool_cache_invalidate('table_a');PERFORM
> pgpool_cache_invalidate('table_b');*
>
>
> *END;*
>
> Does something like this seem worth investigating?
I think it is possible to do that if we implement the cache
invalidation feature in PCP command. Invoking PCP command is already
possible by using pgpool_adm extensions.
https://www.pgpool.net/docs/latest/en/html/pgpool-adm.html
pgpool_adm calls C function interface, which is similar to libpq, for
pcp commands.
So what we need are:
1) implement new PCP command to invalidate query cache by specifying table, something like:
pcp_invalidate_query_cache [other standard options such as PCP port number] table_name
2) implement new pgpool_adm function something like:
pgpool_adm_pcp_invalidate_query_cache([other pgpool_adm standard parameters], 'table_name');
What do you think?
Best regards,
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese:http://www.sraoss.co.jp
More information about the pgpool-general
mailing list