Re: Add Pipelining support in psql
Anthonin Bonnefoy <anthonin.bonnefoy@datadoghq.com>
Attachments
- v05-0001-Add-pipelining-support-in-psql.patch (application/octet-stream) patch v5-0001
Thanks for the review! On Thu, Dec 12, 2024 at 12:53 AM Jelte Fennema-Nio <postgres@jeltef.nl> wrote: > I think that new prompt is super useful, so useful in fact that I'd > suggest linking to it from the \startpipeline docs. Good point, I've added a paragraph with the link to the %P prompt. > I do think that > the wording in the docs could be a bit more precise: > 1. The columns are not necessarily queries, they are messages or > commands. i.e. \parse and \bind_named both count as 1, even though > they form one query together. Yeah, I wasn't super happy with the num_queries and wording. I've renamed the prompt columns to piped_syncs, piped_commands and pending_results and added more precision on what counts as a command. > 2. messages not followed by \sync and \flushrequest, could very well > already "be sent to the server" (if the client buffer got full, or in > case of manual \flush). The main thing that \sync and \flushrequest do > is make sure that the server actually sends its own result back, even > if its buffer is not full yet. I had the wrong assumptions on what was happening. I've changed the definition of pending_results to: "pending_results is the number of commands that were followed by either a \flushrequest or a \syncpipeline, forcing the server to send the results that can be retrieved with \getresults." > The main feedback I have after playing around with this version is > that I'd like to have a \getresult (without the s), to only get a > single result. So that you can get results one by one, possibly > interleaved with some other queries again. \getresults was easier to implement since it was more or less the current behaviour :). I didn't want to add a new meta-command just for that (I feel like I'm already adding a lot of them) so I've added a num_results parameter to \getresults. You should be able to use \getresults 1 to get a single result. A sync response count as a result. > One thing I'm wondering is how useful the num_syncs count is in the > pipeline prompt, since you never really wait for a sync. With the addition of the num_results parameter for \getresults, knowing the number of syncs becomes more useful when results are consumed one by one. > Regarding the usefulness of \flush. I agree it's not as useful as I > thought, because indeed \getresults already flushes everything. But > it's not completely useless either. The main way I was able to use it > interactively in a somewhat interesting way was to send it after a > long running query, and then while that's processing type up the next > query after it. I feel there's a large overlap between \flush and \flushrequest. On the other hand, if people want to test the behaviour of pushing data with and without a flush request message, then \flush can be useful.
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
psql: Fix assertion failures with pipeline mode
- 3631612eae9c 18.0 landed
-
psql: Rework TAP routine psql_fails_like() to define WAL sender context
- 0ff95e0a5be1 18.0 landed
-
psql: Split extended query protocol meta-commands in --help=commands
- 78231baaf967 18.0 landed
-
psql: Improve descriptions of \\flush[request] in --help
- 5743d122fcf3 18.0 landed
-
psql: Fix incorrect status code returned by \getresults
- 5ee7bd944ee8 18.0 landed
-
psql: Allow queries terminated by semicolons while in pipeline mode
- 2cce0fe440fb 18.0 landed
-
psql: Add \sendpipeline to send query buffers while in a pipeline
- 17caf6644546 18.0 landed
-
psql: Fix memory leak with \gx used within a pipeline
- 54d23601b978 18.0 landed
-
psql: Add pipeline status to prompt and some state variables
- 3ce357584e79 18.0 landed
-
Add more tests for utility commands in pipelines
- a4e986ef5a46 18.0 landed
-
psql: Add support for pipelines
- 41625ab8ea3d 18.0 landed
-
Add braces for if block with large comment in psql's common.c
- 40af897eb777 18.0 landed