m6米乐安卓版下载-米乐app官网下载
暂无图片
8
暂无图片
暂无图片
暂无图片

psql元命令之简单爱 -m6米乐安卓版下载

原创 多米爸比 2023-11-08
1082

本文整理psql用到的一些元命令及搭配的工具,可提高日常的工作效率。

  • 快速编辑sql并执行
  • 定制客户端提示符
  • 使用边框美化查询结果
  • 独立存储每个db的历史sql
  • 输出不同的查询格式
  • 持续监控运行中的语句
  • 获取结果集的元数据
  • 动态执行查询语句
  • 条件表达式精简代码
  • 高效搭配tmux分屏工具
  • 定位错误源码位置

快速编辑sql并执行

元命令\e自动打开上次的查询进行编辑,编辑完成之后立刻执行

image.png

上面使用\e直接在上一个sql语句里进行编辑修改,然后wq保存退出编辑模式之后,自动执行新sql语句。

定制psql客户端提示符

psql的客户端提示符变量,我们可以定制prompt1(等待新命令时的提示符)和prompt2(命令未输入完成时的提示符),例如.psqlrc文件可以进行下面的设置:

\set prompt1 '%`date  %h:%m:%s` (%n@%m:%>)%/%r%#%x'
\set prompt2 '%w'

image.png

prompt1变量可以定制操作系统的命令,例如显示时间。prompt2变量使用%w可以生成与语句对齐的空格,select语句的第二行和第三行可读性更强,对于复杂语句可以更加方便进行复制粘贴。

使用边框美化查询结果

在.psqlrc文件增加下面的设置,可以对查询结果设置边框,美化输出。

\pset border 2
\pset linestyle unicode

image.png

左边是默认不带边框的输出,右边则是增加了上面两行设置的边框输出。

另外如果字段值比较长,可以在psql里面使用如下pset命令

\pset format wrapped
\pset columns 0

或者psql选项里加这两个设置

$ psql --pset=format=wrapped --pset=columns=0

企业微信截图_fa3847fc9b204e4397450a92589fe7a8.png

独立存储每个db的历史sql

在.psqlrc文件里可以设置histfile变量,利用内置的dbname对不同的database使用不同的histfile文件进行历史sql记录。

\set histfile ~/.psql_history_:dbname

进行上面设置后,不同的database下的操作语句会记录到不同的文件。注意在psql里使用元命令\c进行的切库操作不会生效。

输出不同的查询格式

文本紧凑模式

$ psql -qta  -c command

文本紧凑模式,使用多字符分隔符@@

$ psql -qta -f '@@'  -c  command

html格式

$ psql -qth  -c command

csv格式,逗号分隔

$ psql -qt --csv  -c command

持续监控运行中的语句

一些比较费时的后台操作进度报告视图,例如pg_stat_progress_copy,可以使用\watch元命令每隔几秒进行观察输出。

select datname,relid::regclass as table, command,type, bytes_processed,tuples_processed from pg_stat_progress_copy \watch 1

例如下面监控索引进度:
abc.gif

从16版本开始,\watch还支持运行指定的次数,语法如下:

\watch [[i=]sec] [c=n] execute query every sec seconds, up to n times

下面是运行7次,每隔2秒运行一次。

\watch i=2 c=7

获取结果集的元数据

sql server数据库可以使用set fmtonly on获取结果集的元数据信息,在pg里可以使用元命令\gdesc来获取。

postgres=# select relname,reloptions from pg_class \gdesc
   column   |  type  
------------ --------
 relname    | name
 reloptions | text[]
(2 rows)

动态执行查询语句

当我们使用查询去拼接sql,再拷贝生成的语句去执行时,可以使用元命令\gexec直接执行查询结果。

postgres=# select 'drop user if exists testuser; create user testuser password '|| quote_literal(repeat('a',1024))||';' \gexec
create role

例如上面的操作拼接了两条sql,然后直接执行。

条件表达式精简代码

使用元命令\if \else条件表达式可以让业务逻辑变得更清晰,参考如下:

$ psql  <

高效搭配tmux分屏工具

psql可以搭配tmux工具使用,可以方便的进行多窗口及分屏,如下图:

image.png

还可以结合vim进行在线编辑,下图中使用tmux拆分了三个窗口:

  • 顶部的窗口使用psql,并使用元命令\o设置输出缓存区,\i输入文件内容。
  • 中间左边窗口使用vim编辑输入文件psql.sql,作为主工作窗口
  • 右边psql.out作为输出缓存区

然后我们在vim使用命令:e即可刷新输出缓存区

image.png

定位错误源码位置

当语句执行错误,想进一步通过源码进行调试时,使用\errverbose元命令可以显示详细的源码位置和函数。
image.png

最后修改时间:2024-01-20 09:36:09
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【米乐app官网下载的版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论

网站地图