On Fri, Feb 21, 2025 at 11:33:41AM +0900, Michael Paquier wrote: > So let's take one step here, I have applied the main patch.
commit 41625ab wrote: > * \syncpipeline queues a synchronisation request, without flushing the > commands to the server, equivalent of PQsendPipelineSync(). libpq has both PQpipelineSync() and PQsendPipelineSync(), so I find it odd that the psql command for PQsendPipelineSync() is \syncpipeline. I would have expected the word "send" somewhere in its name. That said, maybe having PQpipelineSync() was a mistake, since I think it's just PQsendPipelineSync() + PQflush(). In that light, it's reasonable not to spread the extra "send" word into psql. \syncpipeline is fine with me, but it's worth others taking a second look. > + pg_log_error("\\getresults: invalid number of > requested results"); > + return PSQL_CMD_SKIP_LINE; This should be PSQL_CMD_ERROR. That matters under ON_ERROR_STOP=1. > --- a/src/bin/psql/help.c > +++ b/src/bin/psql/help.c > @@ -167,15 +167,22 @@ slashUsage(unsigned short int pager) > HELP0(" \\close STMT_NAME close an existing prepared > statement\n"); > HELP0(" \\copyright show PostgreSQL usage and distribution > terms\n"); > HELP0(" \\crosstabview [COLUMNS] execute query and display result in > crosstab\n"); > + HELP0(" \\endpipeline exit pipeline mode\n"); > HELP0(" \\errverbose show most recent error message at > maximum verbosity\n"); > + HELP0(" \\flush push unsent data to the server\n"); > + HELP0(" \\flushrequest send a flushrequest command\n"); protocol.sgml calls it a "Flush command". > HELP0(" \\g [(OPTIONS)] [FILE] execute query (and send result to file > or |pipe);\n" > " \\g with no arguments is equivalent > to a semicolon\n"); > HELP0(" \\gdesc describe result of query, without > executing it\n"); > + HELP0(" \\getresults [NUM_RES] read NUM_RES pending results. All > pending results are\n" > + " read if no argument is provided\n"); > HELP0(" \\gexec execute query, then execute each value > in its result\n"); > HELP0(" \\gset [PREFIX] execute query and store result in psql > variables\n"); > HELP0(" \\gx [(OPTIONS)] [FILE] as \\g, but forces expanded output > mode\n"); > HELP0(" \\parse STMT_NAME create a prepared statement\n"); > HELP0(" \\q quit psql\n"); > + HELP0(" \\startpipeline enter pipeline mode\n"); > + HELP0(" \\syncpipeline add a synchronisation point to an > ongoing pipeline\n"); v17 "\?" has a 14-line "General" section: General \bind [PARAM]... set query parameters \copyright show PostgreSQL usage and distribution terms \crosstabview [COLUMNS] execute query and display result in crosstab \errverbose show most recent error message at maximum verbosity \g [(OPTIONS)] [FILE] execute query (and send result to file or |pipe); \g with no arguments is equivalent to a semicolon \gdesc describe result of query, without executing it \gexec execute query, then execute each value in its result \gset [PREFIX] execute query and store result in psql variables \gx [(OPTIONS)] [FILE] as \g, but forces expanded output mode \q quit psql \watch [[i=]SEC] [c=N] [m=MIN] execute query every SEC seconds, up to N times, stop if less than MIN rows are returned v18 has raised that to 26 lines via $SUBJECT and other additions. I think a new "Extended Query Protocol" section should house \bind and all the v18 additions. Beginners should ignore the new section. The section may as well appear last. What do you think?