Hi all, I want to support canceling for a plpython query which may be a busy loop.
I found some discussions on pgsql-hackers 2 years ago. Below is the link. https://www.postgresql.org/message-id/cafywgj3+xg7ecl2nu-mxx6p+o6c895pm3myz-b+9n9dffeh...@mail.gmail.com Mario wrote a patch to fix this problem at that time *https://github.com/CartoDB/postgres/commit/d587d8a6e4f035cc45e1d84fc46aa7c3ab0344c3 <https://github.com/CartoDB/postgres/commit/d587d8a6e4f035cc45e1d84fc46aa7c3ab0344c3>* <https://github.com/CartoDB/postgres/commit/d587d8a6e4f035cc45e1d84fc46aa7c3ab0344c3> The main logic is to register a new signal handler for SIGINT/SIGTERM and link the old signal handler in the chain. static void PLy_python_interruption_handler() { PyErr_SetString(PyExc_RuntimeError, "test except"); return NULL; } static void PLy_handle_interrupt(int sig) { // custom interruption int added = Py_AddPendingCall(PLy_python_interruption_handler, NULL); if (coreIntHandler) { (*coreIntHandler)(sig); } } Does anyone have some comments on this patch? As for me, I think handler function should call PyErr_SetInterrupt() instead of PyErr_SetString(PyExc_RuntimeError, "test except"); -- Thanks Hubert Zhang