Re: psql - add SHOW_ALL_RESULTS option
Peter Eisentraut <peter.eisentraut@enterprisedb.com>
From: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
To: Fabien COELHO <coelho@cri.ensmp.fr>
Cc: "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>
Date: 2021-12-27T12:44:29Z
Lists: pgsql-hackers
On 23.12.21 12:40, Fabien COELHO wrote: >> In [0], it was reported that certain replication commands result in >> infinite loops because of faulty error handling. This still happens. >> I wrote a test for it, attached here. (I threw in a few more basic >> tests, just to have some more coverage that was lacking, and to have a >> file to put the new test in.) > > Hmmm… For some unclear reason on errors on a PGRES_COPY_* state > PQgetResult keeps on returning an empty result. PQexec manually ignores > it, so I did the same with a comment, but for me the real bug is somehow > in PQgetResult behavior… > >> In [1], it was reported that server crashes produce duplicate error >> messages. This also still happens. I didn't write a test for it, >> maybe you have an idea. (Obviously, we could check whether the error >> message is literally there twice in the output, but that doesn't seem >> very general.) But it's easy to test manually: just have psql >> connect, shut down the server, then run a query. > > This is also a feature/bug of libpq which happens to be hidden by > PQexec: when one command crashes PQgetResult actually returns *2* > results. First one with the FATAL message, second one when libpq figures > out that the connection was lost with the second message appended to the > first. PQexec just happen to silently ignore the first result. I added a > manual reset of the error message when first shown so that it is not > shown twice. It is unclear to me whether the reset should be somewhere > in libpq instead. I added a voluntary crash at the end of the psql test. I agree that these two behaviors in libpq are dubious, especially the second one. I want to spend some time analyzing this more and see if fixes in libpq might be appropriate.
Commits
-
psql: Show all query results by default
- 7844c9918a43 15.0 landed
- 3a5130672296 14.0 landed
-
psql: Refactor ProcessResult()
- 5519d5affdfa 15.0 landed
-
psql: Refactor SendQuery()
- 8910a25fef3d 15.0 landed
-
psql: Add test for psql behavior on server crash
- 8cd7627c7b19 15.0 landed
-
psql: Additional tests
- 9028cce426ba 15.0 landed
-
Improve some psql test code
- fbee60f6a4ff 15.0 landed
-
psql: Fix some scan-build warnings
- 390edeeb570c 15.0 landed
-
psql: Add test for handling of replication commands
- 67c069848a99 15.0 landed
-
psql: More tests
- c0280bc3edeb 15.0 landed
-
psql: Add various tests
- 14d755b00037 15.0 landed
-
psql: Add test for query canceling
- 5b3f471ff23a 15.0 landed
-
Revert "psql: Show all query results by default"
- fae65629cec8 14.0 landed
-
Extend a test case a little
- b3a9e9897ec7 14.0 landed