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:
@ -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));
|
||||
}
|
||||
|
Reference in New Issue
Block a user