On Tue, Apr 25, 2017 at 7:45 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Abbas Butt <abbas.butt@enterprisedb.com> writes: > What is happening for me is that PG_RE_THROW takes me to PG_TRY in the same > function and then PG_TRY jumps to PG_CATCH where PG_RE_THROW again jumps to > PG_TRY in the same function resulting in an infinite loop. The query > therefore never returns. It is supposed to throw the error and quit.
Apparently PG_exception_stack isn't getting restored properly, but it's sure hard to see why. I'm suspicious that you have something silly like mismatched braces in the vicinity of the TRY/CATCH structure.
I rechecked, braces are matching.
FWIW, doing things like disconnecting remote sessions might be better handled in transaction-cleanup logic, anyway.
I see that postgres_fdw is using a similar login in pgfdw_xact_callback.
Let me try and use the same technique.
What covers you for that if the query aborts while control is not within your PG_TRY block?
All the code that requires a connection to the foreign server is with in the PG_TRY block, it is therefore not required any where else to close connection before reporting any error.