[toc]
上接: ORACLE、MySQL、PostgreSQL 客户端 sqlplus,mysql,psql 常用命令对比(一) ,在对比了客户端的安装以及连接数据库区别。现在连接上数据库之后就是进一步的操作了,然而连上数据库之后首先看到的就是提示符,那本篇就从定制提示符开始吧。本来之前都是通过一种方式来配置提示符,没想到提示符的配置也比较复杂,mysql 竟然可以通过3种方式来实现。那这篇文章就讲一下三种数据库的提示符相关的知识。
默认提示符
默认情况下 sqlplus、mysql、psql 的提示符都很简单,如下:
sqlplus 默认提示符为:
SQL>
mysql 默认提示符为:
mysql>
psql 默认提示:
[dbname]=#
默认的数据库是
postgres
即
postgres=#
既然要定制提示符,那我们就得知道提示符的配置在哪里,下面是三种数据库的提示符的配置。
提示符配置
sqlplus 提示符配置
sqlplus 提示符配置可以通过配置文件或者通过命令直接修改
配置文件有两种:
一个是全局配置文件(Site Profile) :
$ORACLE_HOME/sqlplus/admin/glogin.sql
,从任意位置登录sqlplus 都生效
一个是用户配置文件(User Profile):
ORACLE_PATH
环境变量下的
login.sql
,Note:SQL*Plus will no longer search for login.sql in the current directory. 通过查询
官方手册
发现在11g的版本是当前目录下查找
login.sql
,12c之后是依赖
ORACLE_PATH
环境变量。但是我在11204版本的时候测试也是依赖
ORACLE_PATH
环境变量的。
参考Configuring SQL*Plus 手册 [^1]
可以看到 ORACLE 官方写 SQL*Plus User’s Guide and Reference 洋洋洒洒竟然有300多页。
sqlplus 除了修改配置文件之外,也可以通过
SET SQLPROMPT
命令直接指定当前的提示符。
1 |
SQL> SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER _DATE> " |
mysql 提示符配置
同样 mysql 除了通过参数文件设置 提示符之外,也可以直接通过
prompt set \u@\d \r:\m:\s>
直接设置,他跟参数文件的配置有一点区别,配置文件是
key = value
的形式,比如:
prompt = "\u@mysqldb \R:\m:\s [\d]> "
但是通过命令行设置是
prompt set \u@\d \r:\m:\s>
。
mysql 除了通过配置参数文件、命令行直接修改之外也可以通过 mysql
--prompt
来指定,类似如下:
1 |
mysql --prompt="\u@iasmmysql currentdb is [\d]> " |
实际上在写这篇文章的时候,我只知道是通过参数文件来进行配置的,但是为了这篇文章,我又重新查看了官方手册,发现是可以通过3 种方式实现的:
You can set the prompt in several ways:
Use an environment variable.
You can set the
MYSQL_PS1
environment variable to a prompt string. For example:
1 |
export MYSQL_PS1="(\u@\h) [\d]> " |
Use a command-line option.
You can set the
--prompt
option on the command line to
mysql
. For example:
1 |
$> mysql --prompt="(\u@\h) [\d]> " |
Use an option file.
You can set the
prompt
option in the
[mysql]
group of any MySQL option file, such as
/etc/my.cnf
or the
.my.cnf
file in your home directory. For example:
1 |
[mysql] |
参考 mysql Client Commands 官方手册 [^2]
其中 mysql 的提示符竟然可以通过 OS 的
MYSQL_PS1
变量来设置。
psql 提示符配置
psql 提示符配置文件:
~/.psqlrc
也就是当前用户的家目录下
.psqlrc
文件。
定制提示符
定制 sqlplus 提示符
ORACLE 的 sqlplus 提示符是由
SQLPROMPT
控制的,通过
show SQLPROMPT
可以查看当前的默认配置,
1 |
SQL> show SQLPROMPT |
可以看到目前的提示符就是
SQL>
,可以通过
define
可以查看当前的提示符的系统变量。
1 |
SQL> define |
也就是上面的
_DATE
、
_CONNECT_IDENTIFIER
等信息是可以直接拿来使用的,可以直接写到配置文件中,首先那我们先看下默认的配置文件的模样。使用cat 命令进行查看。
cat $ORACLE_HOME/sqlplus/admin/glogin.sql
可以看到这里都是注释,描述的用途和用法,也就是这里的内容会自动运行。
比如最简单的配置:
SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER _DATE> "
_DATE
:当前时间、
_CONNECT_IDENTIFIER
连接标识、
_USER
:用户名
可以在 sqlplus 直接 通过 set SQLPROMPT 设置对当前session生效,也可以修改配置文件永久生效。
1 |
SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER _DATE> " |
美化后的效果如下:
1 |
SYS@ora19cl 2024-01-19 22:02:13> |
可以能当前时间太长,可以去掉,就使用
SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER> "
美化效果如下:
1 |
SQL> SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER> " |
其中配置文件和通过命令直接设置的语法是一致的。都是
set SQLPROMPT
以上是通过拼接系统自带的变量来进行定制,实际上 还支持通过 sql 语句进行拼接。
以下定制提示符是转自:OracleBlog – 笑看数据库江湖的那些事儿……的 12c的sqlplus提示符 ,就是根据sql 语句查询出当前的数据库是PDB还是PDB等信息。
1 |
define_editor=vi |
效果如下:
1 |
sys@ORCL1[CDB](172.20.22.127)> |
1 |
sys@PDBMES[PDB](172.20.22.127)> |
可以显示用户,登录的PDB/CDB 数据库,并且增加了 CDB/PDB的标识,并且还显示当前的ip信息。可以说是非常完善了。
定制 mysql 提示符
prompt
命令用于重新配置默认的
mysql>
提示符,可用于定义提示符的字符串可以包含以下特殊序列。
下面表格引用自 mysql Client Commands 官方手册 [2] 。
Print an asterisk (
*
) if the current session is inside a transaction block (from MySQL 8.0.28)
A tab character
Your full
*
user_name
*@*
host_name
*
account name
Your user name
The server version
The current day of the week in three-letter format (Mon, Tue, …)
The current year, four digits
The current year, two digits
A space
A space (a space follows the backslash)
Single quote
Double quote
A literal
\
backslash character
\*
x
*
x
, for any “*
x
*” not listed above
虽然 mysql 的提示符支持30个选项,其实真正需要的就那么几个比如,用户、数据库、时间、主机等。
用户区分
/U
和
/u
,其中
/U
:完整的用户名@hostname形式。
1 |
mes@iasmmysql currentdb is [mesdb] mes@localhost > |
1 |
prompt = "\u@mysqldb \R:\m:\s [\d]> " |
mysql 通过配置文件和命令行设置是有区别的,上面有写,这个需要注意。
这里单独看一下
export MYSQL_PS1="(\u@\h) [\d]> "
,这是操作系统一个变量,可以用来配置mysql 客户端的提示符,这个跟 OS 的 PS1 类似。
定制 psql 提示符
psql 是通过配置
.psqlrc
文件(linux平台)来定制 psql 提示符。
.psqlrc文件
cd
vi .psqlrc
对配置文件进行编辑,有3个变量
PROMPT1
,
PROMPT2
和
PROMPT3
进行控制。
PROMPT1
是 psql 请求一个新命令时的使用的正常提示符。
PROMPT2
是在一个命令输入期待更多输入时(因为查询没有用一个分号结束或者引号没有关闭)显示的提示符。
PROMPT3
在你运行一个
SQL COPY
命令和等待你在终端上键入记录时使用。
常用的选项有下面几个,来自官方手册 [^3]
1 |
\set PROMPT1 '%`date +%H:%M:%S` (%n@%M:%>)%/%R%#%x' |
psql 与众不同的一点是可以设置颜色
1 |
\set PROMPT1 '%M:%[%033[1;31m%]%>%[%033[0m%] %n@%[%033[1;33m%]%/%[%033[0m%]%R%#%x ' |
效果如下图所示:
其中端口号设置红色,数据库的名称设置为黄色,PROMPT2 未完成的查询有红色的
-
代替了原来的
=
。
三种数据库的提示符都可以通过在当前session 进行设置,其中 :
sqlplus 是
SET SQLPROMPT
;
mysql 是:
prompt set \u@\d \r:\m:\s>
;
psql 是:
\set PROMPT1 '%
date +%H:%M:%S
(%n@%M:%>)%/%R%#%x'
。
注意⚠️: sqlplus 是
SET SQLPROMPT
,mysql 是
prompt set
,关键词一个是
SQLPROMPT
一个是
prompt
,其中 sqlplus 是
set
在前,mysql 是
set
在后,而psql 呢,又不一样,他set的时候需要前面有一个
\
然后 set
PROMPT1
/
PROMPT3/
PROMPT3`,有3个关键词。
提示符的格式基本上是:用户、库名、时间、连接方式等的拼接,oracle 的sqlplus 提示又比较复杂支持通过sql语句进行拼接。
plsql 是支持设置不同的颜色,目前没有发现 sqlplus 和mysql 支持定制颜色。
参考资料
[1]:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqpug/configuring-SQL-Plus.html
“configuring-SQL-Plus”
[2]:
https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-PROMPTING
“psql PROMPTING “
[3]:
https://dev.mysql.com/doc/refman/8.0/en/mysql-commands.html
“mysql-commands “