From 69cf1d5429d48d030d71d5dd4931084d422413cb Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Tue, 29 Jun 2021 14:37:39 -0400 Subject: Add PQsendFlushRequest to libpq MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This new libpq function allows the application to send an 'H' message, which instructs the server to flush its outgoing buffer. This hasn't been needed so far because the Sync message already requests a buffer; and I failed to realize that this was needed in pipeline mode because PQpipelineSync also causes the buffer to be flushed. However, sometimes it is useful to request a flush without establishing a synchronization point. Backpatch to 14, where pipeline mode was introduced in libpq. Reported-by: Boris Kolpackov Author: Álvaro Herrera Discussion: https://postgr.es/m/202106252350.t76x73nt643j@alvherre.pgsql --- doc/src/sgml/libpq.sgml | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) (limited to 'doc/src') diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 641970f2a61..59e3e678f9e 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -5102,10 +5102,13 @@ int PQflush(PGconn *conn); The server executes statements, and returns results, in the order the client sends them. The server will begin executing the commands in the pipeline immediately, not waiting for the end of the pipeline. + Note that results are buffered on the server side; the server flushes + that buffer when a synchronization point is established with + PQpipelineSync, or when + PQsendFlushRequest is called. If any statement encounters an error, the server aborts the current transaction and does not execute any subsequent command in the queue - until the next synchronization point established by - PQpipelineSync; + until the next synchronization point; a PGRES_PIPELINE_ABORTED result is produced for each such command. (This remains true even if the commands in the pipeline would rollback @@ -5399,6 +5402,32 @@ int PQpipelineSync(PGconn *conn); + + + PQsendFlushRequestPQsendFlushRequest + + + + Sends a request for the server to flush its output buffer. + +int PQsendFlushRequest(PGconn *conn); + + + + + Returns 1 for success. Returns 0 on any failure. + + + The server flushes its output buffer automatically as a result of + PQpipelineSync being called, or + on any request when not in pipeline mode; this function is useful + to cause the server to flush its output buffer in pipeline mode + without establishing a synchronization point. + Note that the request is not itself flushed to the server automatically; + use PQflush if necessary. + + + -- cgit v1.2.3