On Thu, Oct 20, 2016 at 5:25 PM, Oleksandr Shulgin <oleksandr.shul...@zalando.de> wrote: > On Thu, Oct 20, 2016 at 12:28 PM, Oleksandr Shulgin > <oleksandr.shul...@zalando.de> wrote: >> >> >> Since this is already an improvement, I'm attaching a patch. >> >> If on the other hand, someone is pasting into psql's terminal a block of >> commands enclosed in BEGIN/COMMIT, the same bug is triggered: BEGIN doesn't >> have effect and the rest of commands run outside of transaction. >> >> Is it possible at all to protect against the latter case? How? > > > One idea I was just suggested is to make interactive psql sessions buffer in > all available input, before it's going to block. This way it doesn't matter > if the multiple statements are appearing on one line or are being pasted. > > Feasible?
psql seems to be reading one line (or upto EOF) at a time. If it finds a ';' in the fetched input, it sends the query to the server and fetches the result. That's when it will notice a server crash. The next time it will try to fetch the line, I doubt if psql has any way to tell, whether the block of commands was pasted all at a time or entered one at a time.y It's same thing for psql and really I guess it's the same thing for any interactive program. I guess, all the pasted result is not in psql's buffers if it spans multiple lines and has ';' in-between. So, I don't think, it's feasible to protect against that one. -- Best Wishes, Ashutosh Bapat EnterpriseDB Corporation The Postgres Database Company -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers