推荐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 / –
可以通过下面的方式联系我
如果这篇文章为你带来了灵感或启发,就请帮忙点赞、收藏、转发;如果文章中不严谨或者错漏之处,请及时评论指正。非常感谢!
最后修改时间:2025-02-06 10:48:42
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




