From: | Maksim Milyutin <milyutinma(at)gmail(dot)com> |
---|---|
To: | PostgreSQL mailing lists <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: [BUG] Cache invalidation for queries that contains const of temporary composite type |
Date: | 2017-10-02 12:43:45 |
Message-ID: | 8875ac8d-b754-3826-ed72-9af3d540664e@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 26.09.2017 23:25, Maksim Milyutin wrote:
> 25.09.17 20:50, Maksim Milyutin wrote:
>
>> I have found out the problem when try to sequentially call the
>> function that casts constant to composite type of temporary table
>> that is deleted ateach transaction termination (i.e. at each function
>> call completion).
>>
>>
>> For example, we have the following function 'test':
>>
>> CREATE OR REPLACE FUNCTION test()
>> RETURNS void
>> LANGUAGE plpgsql
>> AS $function$
>> begin
>> create temp table tbl (id int) on commit drop;
>> perform json_populate_record(null::tbl, '{ "id": 11 }'::json) as tt;
>> end;
>> $function$
>>
>>
>> Оn the second and subsequent calls we'll observe the following error:
>>
>> ERROR: cache lookup failed for type 16392
>>
>>
>> I investigated the problem and realized that result type of function
>> *json_populate_record* (/funcresulttype/ field of /FuncExpr/ struct)
>> as well as type of the first null argument (/consttype/ field of
>> /Const/ struct) refer to the invalid composite type related with
>> temporary table'tbl'. Namely they take a value of oid gotten from the
>> first 'tbl' initialization. The plan of query *'perform
>> json_populate_record(null::tbl, '{ "id": 11 }'::json) as tt'*is
>> cached and is not invalidated at each function call. This is
>> because** the statement of this query doesn't have any dependency
>> from the 'tbl' relation (/relationOids/ list of /CachedPlanSource/
>> struct).
>>
>>
>> Attached patch resolves this problem by adding dependency from
>> relation upon detection Const expression of composite type of that
>> relation
>
> Updated patchset contains more transparent definition of composite
> type for constant node and regression test for described above buggy case.
Is there any interest on the problem in this thread?
--
Regards,
Maksim Milyutin
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2017-10-02 12:51:35 | Re: Parallel Append implementation |
Previous Message | Maksim Milyutin | 2017-10-02 12:37:17 | Re: Add support for tuple routing to foreign partitions |