Re: [HACKERS][BUG] Cache invalidation for queries that contains constof temporary composite type

Поиск
Список
Период
Сортировка
От Maksim Milyutin
Тема Re: [HACKERS][BUG] Cache invalidation for queries that contains constof temporary composite type
Дата
Msg-id 8875ac8d-b754-3826-ed72-9af3d540664e@gmail.com
обсуждение исходный текст
Ответ на Re: [HACKERS][BUG] Cache invalidation for queries that contains constof temporary composite type  (Maksim Milyutin <milyutinma@gmail.com>)
Ответы Re: [HACKERS][BUG] Cache invalidation for queries that contains constof temporary composite type  (Alexander Korotkov <a.korotkov@postgrespro.ru>)
Список 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 at each 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

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Maksim Milyutin
Дата:
Сообщение: Re: [HACKERS] Add support for tuple routing to foreign partitions
Следующее
От: Robert Haas
Дата:
Сообщение: Re: [HACKERS] Parallel Append implementation