• Tom Lane's avatar
    Prevent "\g filename" from affecting subsequent commands after an error. · 101d6ae7
    Tom Lane authored
    In the previous coding, psql's state variable saying that output should
    go to a file was only reset after successful completion of a query
    returning tuples.  Thus for example,
    
    regression=# select 1/0
    regression-# \g somefile
    ERROR:  division by zero
    regression=# select 1/2;
    regression=#
    
    ... huh, I wonder where that output went.  Even more oddly, the state
    was not reset even if it's the file that's causing the failure:
    
    regression=# select 1/2 \g /foo
    /foo: Permission denied
    regression=# select 1/2;
    /foo: Permission denied
    regression=# select 1/2;
    /foo: Permission denied
    
    This seems to me not to satisfy the principle of least surprise.
    \g is certainly not documented in a way that suggests its effects are
    at all persistent.
    
    To fix, adjust the code so that the flag is reset at exit from SendQuery
    no matter what happened.
    
    Noted while reviewing the \gset patch, which had comparable issues.
    Arguably this is a bug fix, but I'll refrain from back-patching for now.
    101d6ae7
common.c 37 KB