Denys Rtveliashvili <[email protected]> writes:
> My function neeeds to call a third-party library which would create a state
> and then that state should be kept for the duration of the current query. The
> library can deallocate that state in a correct way.
> I understand that fn_extra is normally used for this and usually the state is
> created in a memory context which is deallocated at the end of the query. So
> normally it is not an issue. However, I cannot make that library use
> PostgreSQL utilities for memory management.
> I am afraid that for long-running sessions it may cause serious memory leaks
> if they do not deallocate state correctly and in a timely manner.
> Is there a mechanism for adding a finalizer hook which would be called and
> passed that pointer after the query is complete? Or perhaps there is another
> mechanism? I looked in the documentation and in the source but I do not see
> it mentioned.
In HEAD, you could use a memory context reset callback for this purpose.
I don't believe there's any fully satisfactory solution in the released
branches; the closest you could get is an ExprContext callback, which
has the fatal-for-this-purpose defect that it's only called on successful
query completion, not if an error occurs.
regards, tom lane
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers