我该如何在PostgreSQL命令行工具psql中定制提示符(最好是在每个用户启动脚本中)?
特别地,我想要能够在包含指示命令是否为多行的字符的情况下更改它(例如=
、-
、'
等)。
我正在运行Ubuntu 10.04(Lucid),PostgreSQL 8.4.4。
我该如何在PostgreSQL命令行工具psql中定制提示符(最好是在每个用户启动脚本中)?
特别地,我想要能够在包含指示命令是否为多行的字符的情况下更改它(例如=
、-
、'
等)。
我正在运行Ubuntu 10.04(Lucid),PostgreSQL 8.4.4。
你肯定可以自定义提示符。
根据文档:
psql发出的提示信息可以 按照你的喜好进行定制。 三个变量
PROMPT1
,PROMPT2
, 和PROMPT3
包含字符串和特殊 转义序列,用于描述提示符的外观。 Prompt 1 是发出新命令时 正常的提示信息。Prompt 2 是在需要输入更多信息时发出, 因为命令没有以分号结尾或引号没有关闭。 Prompt 3 是在运行SQL COPY
命令时发出的, 预期您在终端上输入行值。
如果想要按用户设置提示符,可以将 \set
命令添加到用户的 .psqlrc
文件中。
所以,你的 $HOME/.psqlrc
文件将是这样的:
\set PROMPT1 '(%n@%M:%>) %`date +%H:%M:%S` [%/] \n%x%# '
如果您无法设置$HOME/.psqlrc
文件(例如,进入一个您无法控制的容器),您还可以在命令行上自定义提示符。
$ PROMPT1="PROMPT1='%[%033[1;31;40m%]%/%R%[%033[0m%]%# '"
$ psql -v $PROMPT1
如果您通过 kubectl 连接到容器,可以执行以下操作:
POD=$(getPodThatHasPostgresCli)
PSQL_PATH="./pgsql/bin/"
PROMPT1="PROMPT1='%[%033[1;31;40m%]%/%R%[%033[0m%]%# '"
CMD="export PGPASSWORD='$PGPASS'; $PSQL_PATH/psql -v $PROMPT1 $PGURL -U $PGUSER $*"
if ! kubectl exec -it "$POD" -- /bin/bash -c "$CMD"
then
echo "failed to connect to psql in pod"
exit 1;
fi