Re: memory leak in trigger handling (since PG12)

Поиск
Список
Период
Сортировка
От Andres Freund
Тема Re: memory leak in trigger handling (since PG12)
Дата
Msg-id 20230524195436.5ylu7j2yxdxoyhp5@awork3.anarazel.de
обсуждение исходный текст
Ответ на memory leak in trigger handling (since PG12)  (Tomas Vondra <tomas.vondra@enterprisedb.com>)
Список pgsql-hackers
Hi,

On 2023-05-23 18:23:00 +0200, Tomas Vondra wrote:
> While looking for other places allocating stuff in ExecutorState (for
> the UPDATE case) and leaving it there, I found two more cases:

For a bit I thought there was a similar problem in ExecWithCheckOptions() -
but we error out immediately afterwards, so there's no danger of accumulating
memory.


I find it quite depressing that we have at least four copies of:

    /*
     * If the tuple has been routed, it's been converted to the partition's
     * rowtype, which might differ from the root table's.  We must convert it
     * back to the root table's rowtype so that val_desc in the error message
     * matches the input tuple.
     */
    if (resultRelInfo->ri_RootResultRelInfo)
    {
        ResultRelInfo *rootrel = resultRelInfo->ri_RootResultRelInfo;
        TupleDesc    old_tupdesc;
        AttrMap    *map;

        root_relid = RelationGetRelid(rootrel->ri_RelationDesc);
        tupdesc = RelationGetDescr(rootrel->ri_RelationDesc);

        old_tupdesc = RelationGetDescr(resultRelInfo->ri_RelationDesc);
        /* a reverse map */
        map = build_attrmap_by_name_if_req(old_tupdesc, tupdesc, false);

        /*
         * Partition-specific slot's tupdesc can't be changed, so allocate a
         * new one.
         */
        if (map != NULL)
            slot = execute_attr_map_slot(map, slot,
                                         MakeTupleTableSlot(tupdesc, &TTSOpsVirtual));
        modifiedCols = bms_union(ExecGetInsertedCols(rootrel, estate),
                                 ExecGetUpdatedCols(rootrel, estate));
    }


Once in ExecPartitionCheckEmitError(), *twice* in ExecConstraints(),
ExecWithCheckOptions(). Some of the partitioning stuff has been added in a
really myopic way.

Greetings,

Andres Freund



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

Предыдущее
От: Tomas Vondra
Дата:
Сообщение: Re: memory leak in trigger handling (since PG12)
Следующее
От: Tomas Vondra
Дата:
Сообщение: Re: memory leak in trigger handling (since PG12)