如何自定义PostgreSQL/psql提示符?

11

我该如何在PostgreSQL命令行工具psql中定制提示符(最好是在每个用户启动脚本中)?

特别地,我想要能够在包含指示命令是否为多行的字符的情况下更改它(例如=-'等)。

我正在运行Ubuntu 10.04(Lucid),PostgreSQL 8.4.4。

2个回答

22

你肯定可以自定义提示符。

根据文档:

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%# '

谢谢!看起来我提到的多行指示字符是“%R”。 - Ian Mackinnon

2

如果您无法设置$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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接