直接使用gsql 连接DB时,gsql 是没有命令自动补齐和历史命令记录功能的,这里的历史命令记录简单的说,就是不能使用上下键来查看之前的SQL,所以使用起来有些不方便:
[dave@www.cndba.cn ~]$ gsql -d postgres -p 15500
gsql ((openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:07:56 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
openGauss=# /q
幸好gsql 提供了该功能的开关:-r
。 开启在客户端操作中可以进行编辑的模式。在使用gsql 连接DB时,加上改选项,即可实现gsql的命令自动补齐和历史命令记录。
命令帮助对-r的解释是指定时,使用libedit:
[dave@www.cndba.cn ~]$ gsql --help
gsql is the openGauss interactive terminal.
Usage:
gsql [OPTION]... [DBNAME [USERNAME]]
……
-r if this parameter is set,use libedit
……
1 自动补齐功能
编写SQL时,按TAB 键,例如,crea 后键入 Tab,gsql 会将其补齐为 create。
openGauss=# select * from pg_se
pg_seclabel pg_seclabels pg_session_iostat pg_session_wlmstat pg_set pg_settings
openGauss=#
说明:
1.支持数据库SQL关键字如select、create、table等。
2.支持表名、视图名等自定义标识符的补齐。
3.元命令选项’S’、’+’不支持自动补齐。
4.对表进行补齐时,只有前缀是“pg_”才会补齐系统表。
5.不支持建表时字段类型的补齐。
6.select后不支持任何补齐。
7.不支持常量与宏的自动补齐。
8.select * from a,b… 不支持第二个开始表的自动补齐, insert into t1 (col1, col2, …) 不支持第二个列的自动补齐。
9.不支持create tablespace语句with以及with后参数的自动补齐。
10.创建索引不支持local、global的自动补齐,修改索引不支持rebuild自动补齐。
11.set语句仅支持自动补全USER和SUPERUSER级别的参数。
12.不支持if exists的自动补齐。
13.不支持表名.列名的自动补齐,如alter sequenceowned by tableName.colName,owned by。
14.不支持自定义操作符自动补齐。使用复制粘贴这种方式输入命令,如果粘贴的命令里面有TAB键有可能会使输入命令的格式错乱,无法正常执行。
2历史SQL 记录功能
其实历史命令记录有2个层面,我们这里讲的是gsql的内部变量。
2.1 系统层面的历史命令(外部变量)
官网的建议是为了避免指令历史记录安全隐患,关闭各主机系统层面的history指令。
方法是在/etc/profile文件中指定HISTSIZE=0。
注意该参数在系统中默认值为1000:
[dave@www.cndba.cn ~]$ echo $HISTSIZE
1000
[dave@www.cndba.cn ~]$
2.2 gsql 客户端中的历史命令(内部变量)
客户端操作历史记录条数默认设置为32条,最多支持记录500条。当客户端交互式输入包含中文字符时,只支持UTF-8 的编码环境。 可以通过set HISTSIZE 来修改。
出于安全考虑,将包含PASSWORD、IDENTIFIED敏感词的记录识别为敏感信息,不会记录到历史信息中,即不能通过上下翻回显。
关于set在gsql 的命令中有说明:
[dave@www.cndba.cn ~]$ gsql -d postgres -p 15500 -r
gsql ((openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:07:56 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
openGauss=# /?
……
Variables
/prompt [TEXT] NAME prompt user to set internal variable
/set [NAME [VALUE]] set internal variable, or list all if no parameters
/unset NAME unset (delete) internal variable
……
/set 不加参数,表示显示当前所有的内部变量:
openGauss=# /set
AUTOCOMMIT = 'on'
PROMPT1 = '%o%R%# '
PROMPT2 = '%o%R%# '
PROMPT3 = '>> '
VERBOSITY = 'default'
VERSION = '(openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:07:56 commit 0 last mr on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit'
DBNAME = 'postgres'
USER = 'omm'
HOST = '/data/openGauss/tmp'
PORT = '15500'
ENCODING = 'UTF8'
openGauss=#
openGauss=# /set HISTSIZE 600
warning:"HISTSIZE" is set to 500,because its value can not be greater than 500
openGauss=# /set HISTSIZE 500
openGauss=# /set
AUTOCOMMIT = 'on'
PROMPT1 = '%o%R%# '
PROMPT2 = '%o%R%# '
PROMPT3 = '>> '
VERBOSITY = 'default'
VERSION = '(openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:07:56 commit 0 last mr on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit'
DBNAME = 'postgres'
USER = 'omm'
HOST = '/data/openGauss/tmp'
PORT = '15500'
ENCODING = 'UTF8'
HISTSIZE = '500'
openGauss=#
如果将记录历史的条数设置为 50,/set HISTSIZE 0,则不记录历史命令。
版权声明:本文为博主原创文章,未经博主允许不得转载。