In theory, there is a possibility to use coloured prompts in psql
. I decided (not the first time :) that I need them, so I thought I would give them a try. So I have in my .psqlrc
the following:
\set prompt_colour '%[%033[1;33m%]'
\set reset_colour '%[%033[0m%]'
\set PROMPT1 :prompt_colour'%n@%/%R%#%':reset_colour
This is very nice, I have a fancy yellow prompt. Everything is good until I don't start walking back in the command history and hit a long enough command (in my experiments, 37 is OK, 38 is too long and multiline commands of any length do the same) - when I do, the Home button does not go back to the end of the row, it stops (in this case) 11 characters to the right. If now I try to edit the command, it gets edited in the wrong positions.
I try to depict this:
# SELECT 123456789012345678 FROM a_table;
[here is an error, of course, but it doesn't count]
# SELECT 123456789012345678 FROM a_table;
[ cursor is ^ here after pressing Home ]
[ hitting Enter gives the error ]
ERROR: syntax error at or near "ELECT"
LINE 1: ELECT 123456789012345678 FROM a_table;
(From the documentation it looks like this version should also work but here the control characters aren't parsed, so I have no coloured prompt by the two expressions echoed:
\set PROMPT1 "%:prompt_colour:%n@%/%R%#%:reset_colour:"
but this results in
%[%033[1;33m%]postgres@postgres=#%[%033[0m%]
)
So does anybody has any idea how to do this properly?
Somehow I managed to omit the versions so here they are:
- ubuntu 12.10
- psql 9.1.9 (as far as I know, it is installed from a standard ubuntu package)
- both libreadline5 and 6 are installed, also libedit2
My findings:
Following Peter's advice, I tried modifying the pg_wrapper
script to link against libreadline.so.6
- in itself it works but the error is still there. The same with libreadline.so.5
(which is the default one, I think). With libeditline.so.0
the situation is much worse.