暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

推荐Postgresql中一些好用的psql命令(1)

827

推荐Postgresql中一些好用的psql命令(1)

psql客户端工具应该是dba非常频繁使用的的工具。我想把自己觉得有助于提升工作效率的psql的命令整理一下,这些命令可以让你更好的使用postgresql。如果你是一个小白,那么这篇文章一定会让你有所收益。下面我们直接进入主题介绍一些比较好用的命令。

格式化输出

\x可以设置PG的扩展显示模式,其实就是可以把查询的结果行转换为列的形式展示,而不是一直向右扩展显示很大的列列表

扩展后的显示示例如下:

testdb=# \x auto
testdb=# select * from tenk1 limit 1;
-[ RECORD 1 ]-------
unique1     | 8800
unique2     | 0
two         | 0
four        | 0
ten         | 0
twenty      | 0
hundred     | 0
thousand    | 800
twothousand | 800
fivethous   | 3800
tenthous    | 8800
odd         | 0
even        | 1
stringu1    | MAAAAA
stringu2    | AAAAAA
string4     | AAAAxx

在这里扩展模式设置为auto时,可以自动检测列的数据是否可以在一行中展示所有的数据,如果显示不全,则会自动转换为扩展显示模式。

testdb=# select * from tenk1 limit 1;
 unique1 | unique2 | two | four | ten | twenty | hundred | thousand | twothousand | fivethous | tenthous
 | odd | even | stringu1 | stringu2 | string4 
---------+---------+-----+------+-----+--------+---------+----------+-------------+-----------+---------
-+-----+------+----------+----------+---------
    8800 |       0 |   0 |    0 |   0 |      0 |       0 |      800 |         800 |      3800 |     8800
 |   0 |    1 | MAAAAA   | AAAAAA   | AAAAxx
(1 row)

在这里设置auto模式,然后再执行sql,在当前会话中格式自动转换了。

testdb=# \x auto
Expanded display is used automatically.
testdb=# select * from tenk1 limit 1;
-[ RECORD 1 ]-------
unique1     | 8800
unique2     | 0
two         | 0
four        | 0
ten         | 0
twenty      | 0
hundred     | 0
thousand    | 800
twothousand | 800
fivethous   | 3800
tenthous    | 8800
odd         | 0
even        | 1
stringu1    | MAAAAA
stringu2    | AAAAAA
string4     | AAAAxx
--一行可以显示所有列的数据
testdb=# select * from t1;
 id | name  | address 
----+-------+---------
  1 | wang1 | beijing
  2 | wang2 | beijing
  4 | wang4 | beijing
  3 | wang3 | beijing
(4 rows)

另外如果单独执行\x时,第一次执行自动开启扩展模式,再次执行时关闭扩展模式,默认设置为on。

testdb=# \x
Expanded display is off.
testdb=# \x
Expanded display is on.

显示sql的查询时间

显示sql语句的查询执行时间

testdb=# \timing on
Timing is on.
testdb=# select * from t1;
 id | name  | address 
----+-------+---------
  1 | wang1 | beijing
  2 | wang2 | beijing
  4 | wang4 | beijing
  3 | wang3 | beijing
(4 rows)

Time: 1.508 ms
testdb=# \timing off
Timing is off.

该命令也可以不设置默认值,只执行\timing,第一次执行自动开启显示执行时间,再次执行时关闭显示执行时间。

自定义空值显示的内容

--插入null数据和空字符串
testdb=# insert into t1 values (5,'zhaosi',null);
INSERT 0 1
testdb=# insert into t1 values (6,'lisan','');
INSERT 0 1

默认情况null和空字符串时,展示的都是空

testdb=# select * from t1;
 id |  name  | address 
----+--------+---------

  1 | wang1  | beijing
  2 | wang2  | beijing
  4 | wang4  | beijing
  3 | wang3  | beijing
  5 | zhaosi | 
  6 | zhaosi | 
(5 rows)

设置null值显示的为(null)

testdb=# testdb=# \pset null '(null)'
Null display is "(null)".
testdb=# select * from t1;
 id |  name  | address 
----+--------+---------
  1 | wang1  | beijing
  2 | wang2  | beijing
  4 | wang4  | beijing
  3 | wang3  | beijing
  5 | zhaosi | (null)
  6 | lisan  | 
(6 rows)

可以看到在这个时候,我们就可以很容易的区分null和空字符串。另外也可以用于区分默认权限和空权限的显示,这个可以参考另外一篇文章PostgreSQL17中psql优化默认权限和空权限的显示

psql历史

可以用于存储psql的执行历史记录

\set HISTFILE ~/.psql_history-:DBNAME

查看文件是否创建及其中的内容

[postgres@wang ~]$ ls -lla .psql*
-rw------- 1 postgres postgres 16264 Sep 23 22:51 .psql_history
--查看文件中记录的命令及sql
testdb=# \pset null '(null)'
select * from t1;
select * from t1;
\! ~
\set HISTFILE ~/.psql_history-:DBNAME
\d
select * from t1;
\! ls -ll ~
\! ls -ll ~.
\q

该命令可以设置文件中存放的最大命令数。

\set HISTSIZE 2000

执行shell命令

经常需要在不退出psql的情况下,需要执行shell命令

testdb=# \! pwd
/home/postgres
testdb=# \! ls -ll
total 4
-rw-rw-r-- 1 postgres postgres 1941 Jun 11 14:54 penGauss#2024

总结

本节先介绍5个psql的命令,还是比较常用,希望对大家使用psql的客户端有一定的帮助。
– / END / –

可以通过下面的方式联系我

  • 微信公众号:@墨竹札记
  • 墨天轮:@墨竹
  • 微信:wshf395062788
  • PGFans:@墨竹

如果这篇文章为你带来了灵感或启发,就请帮忙点赞收藏转发;如果文章中不严谨或者错漏之处,请及时评论指正。非常感谢!

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

评论