Обсуждение: A tiny improvement of psql
Hello hackers!
I am an Oracle/PostgreSQL DBA, I am not a PG hacker. During my daily job, I find a pain that should be fixed.
As you know, we can use the UP arrow key to get the previous command to avoid extra typing. This is a wonderful feature to save the lives of every DBA. However, if I type the commands like this sequence: A, B, B, B, B, B, B, as you can see, B is the last command I execute.
But if I try to get command A, I have to press the UP key 7 times. I think the best way is: when you press the UP key, plsql should show the command that is different from the previous command, so the recall sequence should be B -> A, not B -> B -> ... -> A. Then I only press the UP key 2 times to get command A.
I think this should change little code in psql, but it will make all DBA's lives much easier. This is a strong requirement from the real DBA. Hope to get some feedback on this.
Another requirement is: could we use / to repeat executing the last command in plsql just like sqlplus in Oracle?
I will try to learn how to fix it sooner or later, but if some proficient hacker focuses on this, it can be fixed quickly, I guess.
Thoughts?
Regards,
Kevin
Kevin Wang <kevinpgcloud@gmail.com> writes: > As you know, we can use the UP arrow key to get the previous command to > avoid extra typing. This is a wonderful feature to save the lives of every > DBA. However, if I type the commands like this sequence: A, B, B, B, B, B, > B, as you can see, B is the last command I execute. > But if I try to get command A, I have to press the UP key 7 times. I think > the best way is: when you press the UP key, plsql should show the command > that is different from the previous command, so the recall sequence should > be B -> A, not B -> B -> ... -> A. Then I only press the UP key 2 times to > get command A. This is driven by libreadline, not anything we control. I have seen the behavior you describe in some other programs, so I wonder whether it's configurable. > Another requirement is: could we use / to repeat executing the last command > in plsql just like sqlplus in Oracle? I'm pretty certain you can configure this for yourself with readline. regards, tom lane
On 12/26/23 17:36, Tom Lane wrote: > Kevin Wang <kevinpgcloud@gmail.com> writes: >> As you know, we can use the UP arrow key to get the previous command to >> avoid extra typing. This is a wonderful feature to save the lives of every >> DBA. However, if I type the commands like this sequence: A, B, B, B, B, B, >> B, as you can see, B is the last command I execute. > >> But if I try to get command A, I have to press the UP key 7 times. I think >> the best way is: when you press the UP key, plsql should show the command >> that is different from the previous command, so the recall sequence should >> be B -> A, not B -> B -> ... -> A. Then I only press the UP key 2 times to >> get command A. > > This is driven by libreadline, not anything we control. I have > seen the behavior you describe in some other programs, so I wonder > whether it's configurable. It is kind of something we control. Per the psql docs, setting HISTCONTROL=ignoredups will do the trick. https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-VARIABLES-HISTCONTROL -- Vik Fearing
On Tue, 26 Dec 2023 at 22:45, Vik Fearing <vik@postgresfriends.org> wrote: > It is kind of something we control. Per the psql docs, setting > > HISTCONTROL=ignoredups > > will do the trick. Yeah, the easiest "fix" (that I know of) for a user is to set HISTCONTROL in ~/.psqlrc to ignoredups using: \set HISTCONTROL ignoredups But honestly, I think that should probably be made the default. I can't really think of a reason who would actually want the current default of "none". And while we're at it maybe there are some other defaults in psql that are worth changing. The main ones from my psqlrc that seem like good defaults for pretty much everyone: \x auto \pset linestyle unicode And maybe fixing the major pitfall I always run into with psql: Having ON_ERROR_STOP default to on when a script is passed in using -f/--file
On repeating the execution of last command in psql, we can always use below command to send current query buffer to server.
\g
\gx (with expanded output mode, that always come handy.)
On Tue, Dec 26, 2023 at 9:56 PM Kevin Wang <kevinpgcloud@gmail.com> wrote:
Hello hackers!I am an Oracle/PostgreSQL DBA, I am not a PG hacker. During my daily job, I find a pain that should be fixed.As you know, we can use the UP arrow key to get the previous command to avoid extra typing. This is a wonderful feature to save the lives of every DBA. However, if I type the commands like this sequence: A, B, B, B, B, B, B, as you can see, B is the last command I execute.But if I try to get command A, I have to press the UP key 7 times. I think the best way is: when you press the UP key, plsql should show the command that is different from the previous command, so the recall sequence should be B -> A, not B -> B -> ... -> A. Then I only press the UP key 2 times to get command A.I think this should change little code in psql, but it will make all DBA's lives much easier. This is a strong requirement from the real DBA. Hope to get some feedback on this.Another requirement is: could we use / to repeat executing the last command in plsql just like sqlplus in Oracle?I will try to learn how to fix it sooner or later, but if some proficient hacker focuses on this, it can be fixed quickly, I guess.Thoughts?Regards,Kevin
On Tue, Dec 26, 2023 at 11:26 AM Kevin Wang <kevinpgcloud@gmail.com> wrote:
Hello hackers!I am an Oracle/PostgreSQL DBA, I am not a PG hacker. During my daily job, I find a pain that should be fixed.As you know, we can use the UP arrow key to get the previous command to avoid extra typing. This is a wonderful feature to save the lives of every DBA. However, if I type the commands like this sequence: A, B, B, B, B, B, B, as you can see, B is the last command I execute.But if I try to get command A, I have to press the UP key 7 times. I think the best way is: when you press the UP key, plsql should show the command that is different from the previous command, so the recall sequence should be B -> A, not B -> B -> ... -> A. Then I only press the UP key 2 times to get command A.I think this should change little code in psql, but it will make all DBA's lives much easier. This is a strong requirement from the real DBA. Hope to get some feedback on this.
Kevin,
with readline, I use ctrl-r (incremental search backwards).
but if you are willing to modify your .inputrc you can enable the "windows cmd F5/F8 keys... Search Fwd/Bwd".
where you type B<F8>
inputrc:
# Map F8 (back) F5(forward) search like CMD
"\e[19~": history-search-backward
"\e[15~": history-search-forward
where you type B<F8>
inputrc:
# Map F8 (back) F5(forward) search like CMD
"\e[19~": history-search-backward
"\e[15~": history-search-forward
There are commented out lines tying them to Page Up/Page Down... But 30 yrs in a CMD prompt...
The upside is that this works in bash and other programs as well...
HTH
Kirk Out!