金仓数据库ksql的元命令可控制输出格式:x开启竖排展开模式,xauto根据终端宽度自动切换,timing显示执行耗时,psetborder调整边框样式,o将结果写入文件。这些命令会话级生效,无需每条SQL单独设置,方便用户灵活控制查询输出。
MySQL 查询宽表时,字段一多输出容易折行,列与值的对应关系难以快速识别。MySQL 的常见做法是在 SQL 末尾添加 G,将每行字段竖列展示。KingbaseES 的 ksql 则采用不同的处理方式——通过几个元命令控制整个会话的输出行为,无需在每条 SQL 末尾单独加指令。
本文以 KingbaseES V009R001C010 环境为例,在 app_db 库的 app_schema.t_meta_demo 表上演示。使用 app_user 连接后,先执行 set search_path to app_schema, public,后续查询即可省略 schema 前缀。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
关闭分页器,直接查询全表:
复制代码pset pager offselect * from t_meta_demo;

t_meta_demo 包含 id、order_no、user_name、status、amount、created_at 六个字段。当终端宽度不足时,每行折成多行,字段名与值的对应关系变得模糊。这正是 \x 要解决的问题。
先打开展开模式,再执行查询:
复制代码\xselect * from t_meta_demo limit 2;
再次执行 \x 关闭展开,对比两次输出:
复制代码\xselect * from t_meta_demo limit 2;

\x 开启后,ksql 提示 Expanded display is on,输出从横排表格变为竖列展示,每个字段单独一行,格式为 字段名 | 值。再次执行 \x 提示 Expanded display is off,恢复横排。
MySQL 中竖排显示使用 select ... \G,写在 SQL 末尾,仅对当前语句生效。\x 是会话级开关,开启后所有查询均采用竖排格式,无需每条 SQL 后加指令。当需要连续查询多张宽表时,\x 比 \G 更为高效。
手动切换 \x 略显繁琐。\x auto 模式下 ksql 会自动判断:
复制代码\x auto
ksql 返回 Expanded display is used automatically。
查询单行结果:
复制代码select * from t_meta_demo where order_no = 'ORD-20240601-001';
再查询多行:
复制代码select * from t_meta_demo;

单行查询时,ksql 自动采用竖排展开;多行查询时,ksql 判断终端宽度足够,直接输出横排表格。
\x auto 的判断依据是当前终端宽度,而非字段数量。同一张表,终端窗口变窄时 ksql 更倾向于展开,调宽后相同查询可能恢复横排。MySQL 中没有此模式,\G 始终需要手动写在 SQL 末尾。
关闭展开模式,开启计时:
复制代码\x off
\timing
执行几条查询观察耗时:
复制代码select count(*) from t_meta_demo;select * from t_meta_demo where status = 'paid';select user_name, sum(amount) from t_meta_demo group by user_name;

\timing 开启后提示 Timing is on,每条 SQL 执行完都会自动附带一行 Time: x.xxx ms。
MySQL 中查看执行耗时通常需要 show profiles 或借助客户端工具。ksql 中 \timing 开启后自动附加在每个结果后面,操作更简洁。
但需注意,\timing 提供的是客户端侧的壁钟时间,包含网络往返和客户端处理,仅适合粗粒度判断查询快慢。若要精确分析 SQL 是否走索引、各执行节点耗时分布,应使用 EXPLAIN (ANALYZE, BUFFERS),不应将 \timing 当作性能分析工具。
关闭计时,演示三种边框样式:
复制代码\timing off
默认边框(border 1):
复制代码\pset border 1
select order_no, user_name, status, amount from t_meta_demo limit 3;
无边框(border 0):
复制代码\pset border 0
select order_no, user_name, status, amount from t_meta_demo limit 3;
双线边框(border 2):
复制代码\pset border 2
select order_no, user_name, status, amount from t_meta_demo limit 3;

三种样式的主要差别:
border 1:列之间用 | 分隔,标题行下有 +---+---+ 形式的分隔线,为默认样式。border 0:去掉所有分隔符,列之间仅用空格,标题与数据之间用短横线对齐。border 2:整个结果集外加一圈完整边框,顶部、底部、标题与数据之间均有分隔线。\pset border 仅改变显示格式,不影响数据,切换后即时生效。MySQL 客户端输出边框样式固定,而 ksql 可灵活调整。border 0 在将终端输出粘贴到文档时最为实用,无需手动清除格线。演示结束后恢复默认:
复制代码\pset border 1
在交互会话中将查询结果重定向到文件,无需退出使用 shell 重定向:
复制代码\pset border 1
\o /tmp/ksql-output.txtselect order_no, user_name, status, amount from t_meta_demo;\o

\o /tmp/ksql-output.txt 开启后,ksql 不再将查询结果输出到终端——select 执行后提示符直接返回,没有表格显示,结果均写入文件。\o 不带参数则关闭重定向,恢复终端输出。在另一个终端通过 cat /tmp/ksql-output.txt 可看到全部五行数据,与直接在终端查询的结果一致。
有一个容易踩的坑:关闭重定向必须使用 \o 且不带任何参数。若忘记关闭,后续所有查询输出(包括元命令提示)都会继续写入文件,终端中看不到任何内容,容易误以为命令未执行。MySQL 中在交互会话内导出结果通常需要借助外部工具,而 ksql 的 \o 可直接在会话内切换,使用完毕后务必记得关闭。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述