Thread: psql command line client behaviour
I was told about behaviour of psql command line client that seems as bug to me. When I am connected to server (cmdline client, interactive mode) and server is restarted next query fails and client try to reconnect to server. Problem arise when I send more queries (not speaking that this may not be a good habit) at once - on first one client detects that connection is lost and try to reconnect and then rest of queries are executed (but not the first one). This can have bad consequences (e.g. if first query is BEGIN;): sample (postgresql 8.3.15): (test@[local:/var/opt/testdb/pg_sockets]:20000) 10:55:34 [testdb] #> select 10; select 20; ?column? ---------- 10 (1 row) Time: 0.142 ms ?column? ---------- 20 (1 row) Time: 0.039 ms (test@[local:/var/opt/testdb/pg_sockets]:20000) 10:55:42 [testdb] #> select 10; select 20; FATAL: terminating connection due to administrator command server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Succeeded. ?column? ---------- 20 (1 row) Time: 0.193 ms I would suggest to not execute any query or all of them after reconnect. Jiri
Jiri Sadek <jiri.sadek@gmail.com> writes: > I was told about behaviour of psql command line client that seems as bug > to me. When I am connected to server (cmdline client, interactive mode) > and server is restarted next query fails and client try to reconnect to > server. Problem arise when I send more queries (not speaking that this > may not be a good habit) at once - on first one client detects that > connection is lost and try to reconnect and then rest of queries are > executed (but not the first one). The reason it does that is that ON_ERROR_STOP isn't set. If you don't want execution of a multi-command string to continue after an error, you should set that variable. It's not obvious to me that loss of connection should be treated differently here from other reasons for a command failure. Example: $ psql psql (9.1beta1) Type "help" for help. regression=# select 1/0; select 2; ERROR: division by zero ?column? ---------- 2 (1 row) regression=# \set ON_ERROR_STOP 1 regression=# select 1/0; select 2; ERROR: division by zero regression=# regards, tom lane