GBase 8c
运维管理
文章

GBase 8c gsql 提示符功能

GBase社区管理员
发表于2024-02-04 17:04:3020次浏览0个评论

通过提示符变量设置gsql的提示符,这些变量是由字符和特殊的转义字符所组成。

表1 提示符变量

变量描述示例
PROMPT1

gsql请求一个新命令时使用的正常提示符。

PROMPT1的默认值为:%/%R%#

使用变量PROMPT1切换提示符:

提示符变为[local]:

gbase=# \set PROMPT1 %M

[local:/home/gbase/gbase_db/tmp]

提示符变为name:

gbase=# \set PROMPT1 name

name

提示符变为=:

gbase=# \set PROMPT1 %R

=

PROMPT2

在一个命令输入期待更多输入时(例如,查询没有用一个分号结束或者引号不完整)显示的提示符。

使用变量PROMPT2显示提示符:

gbase=# \set PROMPT2 TEST

gbase=# select * from public.area TEST;

area_id |area_name

---------+------------------------

1 | Europe

2 | Americas

4 | Middle East and Africa

3 | Asia

(4 rows)

PROMPT3

当执行COPY命令,并期望在终端输入数据时(例如,COPY FROM STDIN),显示提示符。

使用变量PROMPT3显示COPY提示符:

gbase=# \set PROMPT3 '>>>>'

gbase=# copy public.area from STDIN;

Enter data to be copied followed by a newline.

End with a backslash and a period on a line by itself.

>>>>

提示符变量的值是按实际字符显示的。但是,当设置提示符的命令中出现“%”时,变量的值根据“%”后的字符,替换为已定义的内容,已定义的提示符请参见表2。

表2 已定义的替换

符号符号说明
%M主机的全名(包含域名),若连接是通过Unix域套接字进行的,则全名为[local],若Unix域套接字不是编译的缺省位置,就是[local:/dir/name]。
%m主机名删去第一个点后面的部分。若通过Unix域套接字连接,则为[local]。
%>主机正在侦听的端口号。
%n数据库会话的用户名。
%/当前数据库名称。
%~类似%/,如果数据库是缺省数据库时输出的是波浪线~。
%#如果会话用户是数据库系统管理员,使用#,否则用>。
%R
  • 对于PROMPT1通常是“=”,如果是单行模式则是“^”,如果会话与数据库断开(如果\connect失败可能发生)则是“!”。

  • 对于PROMPT2该序列被“ -”、“ *”、单引号、双引号或“$”(取决于gsql是否等待更多的输入:查询没有终止、正在一个 /* ... */ 注释里、正在引号或者美元符扩展里)代替。

%x

事务状态:

  • 如果不在事务块里,则是一个空字符串。

  • 如果在事务块里,则是“*”。

  • 如果在一个失败的事务块里则是“!”。

  • 如果无法判断事务状态时为“?”(比如没有连接)。

%digits指定字节值的字符将被替换到该位置。
%:namegsql变量“name”的值。
%comma ndcommand的输出,类似于使用“^”替换。
%[ . . . %]

提示可以包含终端控制字符,这些字符可以改变颜色、背景、提示文本的风格、终端窗口的标题。例如,

gbase=# \set PROMPT1 '%[%033[1;33;40m%]%n@%/%R

%[%033[0m%]%#'

这个句式的结果是在VT100兼容的可显示彩色的终端上的一个宽体(1;)黑底黄字(33;40)。

评论已关闭