Re: [BUG] Cache invalidation for queries that contains const of temporary composite type

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

In response to

Responses

Browse pgsql-hackers by date

  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