Re: Why does SPI_connect change the memory context?
От | Tom Lane |
---|---|
Тема | Re: Why does SPI_connect change the memory context? |
Дата | |
Msg-id | 41589.1559168709@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Why does SPI_connect change the memory context? (Jeff Davis <pgsql@j-davis.com>) |
Список | pgsql-hackers |
Jeff Davis <pgsql@j-davis.com> writes: > SPI_connect() changes the memory context to a newly-created one, and > then SPI_finish() restores it. That seems a bit dangerous because the > caller might not be expecting it. Is there a reason it doesn't just > change to the new memory context as-needed? Because the expectation is that palloc inside the SPI procedure will allocate in a procedure-specific context. If the caller isn't expecting that, they haven't read the documentation, specifically https://www.postgresql.org/docs/devel/spi-memory.html which says <para> <function>SPI_connect</function> creates a new memory context and makes it current. <function>SPI_finish</function> restores the previous current memory context and destroys the context created by <function>SPI_connect</function>. These actions ensure that transient memory allocations made inside your C function are reclaimed at C function exit, avoiding memory leakage. </para> regards, tom lane
В списке pgsql-hackers по дате отправления: