目录
Ksql是KingbaseES基于终端的前端。提供交互式查询,通过文件输入或者命令行输入,得到查询结果。此外,Ksql还提供一些元命令和多种类似shell 的特性来为编写脚本和自动化多种任务提供便利。
Ksql命令行使用了一个两层模型,其中包括:
客户端(用户命令行接口)
数据库(KingbaseES数据库)
Ksql 客户端
命令行用户界面基于字符终端实现。
KingbaseES数据库
KingbaseES数据库使用基于消息的协议在Ksql客户端和后端之间通信,协议支持TCP/IP和Unix套接字。
Ksql是KingbaseES数据库的一个组件,在安装KingbaseES数据库时,默认会安装Ksql。
在运行Ksql之前还需要做什么呢?
安装KingbaseES数据库或Ksql客户端;
获取目标数据库的名称、主机名和服务器的端口号以及用户名;
确保连接的数据库已启动;
Ksql是一个常规KingbaseES客户端应用。为了连接到数据库,你需要知道你的目标数据库的名称、主机名和该服务器的端口号,以及用于连接数据库的用户名。可以通过命令行选项告知Ksql这些参数,分别是-d
、-h
、-p
以及-U
。如果发现一个参数不属于任何选项,它将被解释为数据库名称(如果已经给出数据库名称,就解释为用户名)。这些选项并非都是必须的,它们都有可用的默认值。如果省略主机名,Ksql将连接到本地主机上的服务器,或通过TCP/IP连接到主机上的localhost
。默认端口号则在编译时决定。由于数据库服务器使用相同的默认值,大多数情况下你将不必指定端口。默认的用户名和数据库名与操作系统用户名相同。
当默认值不是很符合实际时,可以把环境变量KINGBASE_DATABASE
、KINGBASE_HOST
、KINGBASE_PORT
以及KINGBASE_USER
设置为适当的值。用一个~/.kbpass
文件来避免定期输入密码也很方便。
另一种指定连接参数的方法是用一个``conninfo``* 字符串或者一个URI,它可以被用来替代数据库名。这种机制可以让我们对连接具有很广的控制权。例如:
$ ksql "service=myservice sslmode=require" $ ksql kingbase://dbmaster:5433/mydb?sslmode=require
如果由于任何原因(例如权限不足、服务器没有在目标主机上运行等)导致连接无法建立,Ksql将返回一个错误并且终止。
如果标准输入和标准输出都是一个终端,那么Ksql会把客户端编码设置成“auto”,这会使Ksql从区域设置(Linux系统上的 LC_CTYPE
环境变量)中检测合适的客户端编码。如果这样不起作用,可以使用环境变量KINGBASE_CLIENTENCODING
覆盖客户端编码。
在Linux或者Windows终端输入Ksql命令:
$ ksql -p 54320 -d test ksql (V8.0) Type "help" for help.
在正常操作时,Ksql会提供一个提示符,该提示符是Ksql当前连接到的数据库名称后面跟上字符串=#
。例如:
$ ksql testdb ksql (V8.0) Type "help" for help. testdb=#
在提示符下,用户可以键入SQL命令。正常情况下,当碰到一个表示命令终结的分号时,输入的行会被发送给服务器。一行的结束并不表示命令的完结。因此,为了清晰,可以把命令散布在多个行上。如果命令被发送并且执行而不产生错误,该命令的结果将会显示在屏幕上。例如:
test=# select a, b from t1; a | b ---+--- 1 | 2 3 | 4 (2 rows)
如果不受信任的用户能够访问没有采用 安全使用模式 的数据库,通过从search_path
删除公共可写的模式来开始会话。可以在连接字符串加入options=-csearch_path=
或者在其他SQL命令之前发出SELECT sys_catalog.set_config('search_path', '', false)
。这种考虑并非专门针对Ksql,它适用于每一种执行任意SQL命令的接口。
只要执行命令,Ksql还会测试 LISTEN 和 NOTIFY 产生的异步通知。
C 风格的注释块会被传给服务器处理并且移除,Ksql会自己移除掉 SQL 标准的注释。
如果需要退出Ksql命令行,输入 \q 即可,Ksql正常完成,它会向 shell 返回 0。如果它自身发生一个致命错误(例如内存用完、找不到文件),它会返回 1。如果到服务器的连接出问题并且事务不是交互式的,它会返回 2。如果在脚本中发生错误,它会返回 3 并且变量ON_ERROR_STOP
会被设置。