memory leak in ALTER TABLE

Поиск
Список
Период
Сортировка
От Neil Conway
Тема memory leak in ALTER TABLE
Дата
Msg-id 1107924993.1286.93.camel@localhost.localdomain
обсуждение исходный текст
Ответы Re: memory leak in ALTER TABLE  (Neil Conway <neilc@samurai.com>)
Список pgsql-patches
ALTER TABLE ADD COLUMN exhibits a significant memory leak when adding a
column with a default expression. In that situation, we need to rewrite
the heap relation. To evaluate the new default expression, we use
ExecEvalExpr(); however, this can allocate memory in the current memory
context, and ATRewriteTable() does not switch out of the active portal's
heap memory context. The end result is a rather large memory leak (on
the order of gigabytes for a reasonably sized table). To repro, just
create a large table (a few hundred megabytes), and add a serial column
to it.

This patch changes ATRewriteTable() to switch to the per-tuple memory
context before beginning the per-tuple loop. It also removes an explicit
heap_freetuple() in the loop, since that is no longer needed.

In an unrelated change, I noticed the code was scanning through the
attributes of the new tuple descriptor for each tuple of the old table.
I changed this to use precomputation.

Barring any objections, I will apply this to HEAD and REL8_0_STABLE
tomorrow.

-Neil


Вложения

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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: WIP: pl/pgsql cleanup
Следующее
От: Nicolai Tufar
Дата:
Сообщение: Repleacement for src/port/snprintf.c