1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-28 23:42:10 +03:00

libpq-be-fe-helpers.h: wrap new cancel APIs

Commit 61461a300c introduced new functions to libpq for cancelling
queries.  This commit introduces a helper function that backend-side
libraries and extensions can use to invoke those.  This function takes a
timeout and can itself be interrupted while it is waiting for a cancel
request to be sent and processed, instead of being blocked.

This replaces the usage of the old functions in postgres_fdw and dblink.

Finally, it also adds some test coverage for the cancel support in
postgres_fdw.

Author: Jelte Fennema-Nio <postgres@jeltef.nl>
Discussion: https://postgr.es/m/CAGECzQT_VgOWWENUqvUV9xQmbaCyXjtRRAYO8W07oqashk_N+g@mail.gmail.com
This commit is contained in:
Alvaro Herrera
2024-03-28 11:31:03 +01:00
parent 427005742b
commit 2466d6654f
5 changed files with 140 additions and 39 deletions

View File

@ -1347,25 +1347,16 @@ Datum
dblink_cancel_query(PG_FUNCTION_ARGS)
{
PGconn *conn;
PGcancelConn *cancelConn;
char *msg;
TimestampTz endtime;
dblink_init();
conn = dblink_get_named_conn(text_to_cstring(PG_GETARG_TEXT_PP(0)));
cancelConn = PQcancelCreate(conn);
PG_TRY();
{
if (!PQcancelBlocking(cancelConn))
msg = pchomp(PQcancelErrorMessage(cancelConn));
else
msg = "OK";
}
PG_FINALLY();
{
PQcancelFinish(cancelConn);
}
PG_END_TRY();
endtime = TimestampTzPlusMilliseconds(GetCurrentTimestamp(),
30000);
msg = libpqsrv_cancel(conn, endtime);
if (msg == NULL)
msg = "OK";
PG_RETURN_TEXT_P(cstring_to_text(msg));
}