Re: [BUGS] psql history and "-- lines" - Mailing list pgsql-bugs

From Дилян Палаузов
Subject Re: [BUGS] psql history and "-- lines"
Date
Msg-id af1bad5f-56c6-485d-22ba-5bb282d8c137@aegee.org
Whole thread Raw
In response to Re: [BUGS] psql history and "-- lines"  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: [BUGS] psql history and "-- lines"  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
Hello,

I expect that psql and the shell, e.g. bash, behave in the same way in 
regards to history logs and until-the-current-line comments.

/* such comments * are out of scope */ SELECT 'here';

In bash, when I start typing a line, that I want to execute later, I put 
# in the beginning of the line, and later I go with C-p to that line.

Another possibility to mark the line as comment is with the 
insert-comment (M-#) readline command/binding, which prepends # the line 
and generates <RET>.  In psql M-# puts also # at the beginning of the 
line, but this shall be altered to a "--" prefix instead.  (To be 
precise, it inserts the character associated with comment-begin).  Fix:

diff --git a/src/bin/psql/input.c b/src/bin/psql/input.c
--- a/src/bin/psql/input.c
+++ b/src/bin/psql/input.c
@@ -356,6 +356,7 @@ initializeInput(int flags)                /* these two things must be done in this order: */
       initialize_readline();                rl_initialize();
 
+               rl_variable_bind("comment-begin", "--");
                useHistory = true;                using_history();


Both bash and psql append to .bash_history / .psql_history, only when 
invoked in interactive mode:

echo 'echo "X"'| bash # does not alter .bash_history
echo 'echo "X"'| bash -i # appends to .bash_history
echo "SELECT '1';" | psql # does not amend to .psql_history
psql << Z # does not append to .psql_history> SELECT '1';> Z

psql -f whatever.sql  # does not add to .psql_history
psql -c "SELECT '1';"  # likewise
psql  # does add '\i whatever.sql' to .psql_history, not the file content
db=> \i whatever.sql
db=> \q

Concerning the example from system_views.sql, where eight comment lines 
precede "CREATE OR REPLACE FUNCTION pg_start_backup": I do not want to 
type eight lines of comments in an interactive shell.  In the case, 
where the comments are yanked from another source, I still want to have 
each comment line as separate history entry, as this is consistent with 
how comments are logged in bash and I am used to.

Probably /* such things */ can be used to enforce logging with the 
subsequent command in contrast to "--".

Regards  Дилян

On 05/06/2017 03:25 AM, Tom Lane wrote:
> "David G. Johnston" <david.g.johnston@gmail.com> writes:
>> On Fri, May 5, 2017 at 1:52 PM, Дилян Палаузов <dpa-postgres@aegee.org>
>> wrote:
>>> Could you plexe alter psql, so that it logs two lines in the history for
>>> the mentioned case?
>
>> It probably should only behave as you suggest in --single-line mode...
>
> I'm not exactly convinced that the proposed change would be an
> improvement.  Consider code along the lines of (actual example
> from system_views.sql):
>
> --
> -- Redeclare built-in functions that need default values attached to their
> -- arguments.  It's impractical to set those up directly in pg_proc.h because
> -- of the complexity and platform-dependency of the expression tree
> -- representation.  (Note that internal functions still have to have entries
> -- in pg_proc.h; we are merely causing their proargnames and proargdefaults
> -- to get filled in.)
> --
>
> CREATE OR REPLACE FUNCTION
>   pg_start_backup(label text, fast boolean DEFAULT false, exclusive boolean DEFAULT true)
>   RETURNS pg_lsn STRICT VOLATILE LANGUAGE internal AS 'pg_start_backup'
>   PARALLEL RESTRICTED;
>
> Would you really want each of those -- lines to be their own history
> entry?
>
> Another angle to think about is /* ... */ comments, which you really
> can't break into separate lines without creating a syntactically-invalid
> mess.  That type of comment also creates the possibility of input like
>
> /* foo
>  * bar */ select ...
>
> There isn't any very nice way to separate this comment from the SQL query
> for history purposes.
>
> In my own usage, I think having leading comments being treated as
> part of the SQL command is a good thing --- they're sort of a unit,
> in most cases.
>
>             regards, tom lane
>


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

pgsql-bugs by date:

Previous
From: Noah Misch
Date:
Subject: Re: [BUGS] Concurrent ALTER SEQUENCE RESTART Regression
Next
From: Дилян Палаузов
Date:
Subject: Re: [BUGS] Postgresql and Clang Static Analyzer