大家好,我是 JiekeXu,江湖人称“强哥”,荣获 Oracle ACE Pro 称号,墨天轮 MVP,墨天轮年度“墨力之星”,拥有 Oracle OCP/OCM 认证,MySQL 5.7/8.0 OCP 认证以及 PCA、PCTA、OBCA、OGCA、KCP 等众多国产数据库认证证书,今天和大家一起来看看 PostgreSQL psql 25 个必备命令,欢迎点击最上方蓝字“JiekeXu DBA之路”关注我的微信公众号,然后点击右上方三个点“设为星标”置顶,更多干货文章才能第一时间推送,谢谢!
1. 连接到数据库
如果端口是默认的 5432,直接使用 psql 连接到数据库,如果是其他端口,则需要 -p 指定端口号。
psql -h hostname -p port -U username -d database_name
例如:
psql -h localhost -p 5432 -U myuser -d mydatabase
psql -h 192.168.75.11 -p 54321 -U postgres
psql -h 192.168.75.11 -p 54321 -U postgres -d postgres
1). 帮忙命令
连接到数据库以后,首先使用 \help 命令查看帮助信息。或者使用 \h 也可以,另外 \? 也可以查看帮助信息。
jiekexu=# \help
Available help:
ABORT CHECKPOINT CREATE USER DROP TRIGGER
ALTER AGGREGATE CLOSE CREATE USER MAPPING DROP TYPE
ALTER COLLATION CLUSTER CREATE VIEW DROP USER
ALTER CONVERSION COMMENT DEALLOCATE DROP USER MAPPING
ALTER DATABASE COMMIT DECLARE DROP VIEW
ALTER DEFAULT PRIVILEGES COMMIT PREPARED DELETE END
ALTER DOMAIN COPY DISCARD EXECUTE
ALTER EVENT TRIGGER CREATE ACCESS METHOD DO EXPLAIN
jiekexu-# \?
General
\copyright show PostgreSQL usage and distribution terms
\crosstabview [COLUMNS] execute query and display results in crosstab
\errverbose show most recent error message at maximum verbosity
\g [(OPTIONS)] [FILE] execute query (and send results to file or |pipe);
\g with no arguments is equivalent to a semicolon
\gdesc describe result of query, without executing it
\gexec execute query, then execute each value in its result
\gset [PREFIX] execute query and store results in psql variables
\gx [(OPTIONS)] [FILE] as \g, but forces expanded output mode
\q quit psql
\watch [SEC] execute query every SEC seconds
Help
\? [commands] show help on backslash commands
\? options show help on psql command-line options
\? variables show help on special variables
\h [NAME] help on syntax of SQL commands, * for all commands
2). 退出 psql
连接到数据库以后,执行相关的管理命令后,最后我们需要退出客户端,\q,exit,quit 等均可退出客户端。
\q
postgres=# quit
[root@jiekexu1 ~]# psql -h 192.168.75.11 -U postgres -p 54321
postgres=# exit
[root@jiekexu1 ~]#
2. 列出所有数据库
jiekexu-# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
jiekexu | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
test | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(5rows)
3. 切换数据库
\c database_name
4. 列出当前数据库的所有表
如果“\d”命令后什么都不带, 将列出当前数据库中的所有表。“\d”命令后面的表名或索引名中也可以使用通配符,如“*”或“?”等, 使用“\d+”命令可以显示比“\d”命令的执行结果更详细的信息,会显示所有与表的列关联的注释, 以及表中出现的 OID。
\d
\d+
如果只想显示匹配的表, 可以使用“\dt”命令。
如果只想显示索引, 可以使用“\di”命令。
如果只想显示序列, 可以使用“\ds”命令。
如果只想显示视图, 可以使用“\dv”命令。
如果想显示函数, 可以使用“\df”命令。
5. 查看表结构
\d table_name
6.执行SQL文件
\i filename.sql
也可以在 psql 命令行中加上 “-f <filename>” 来执行 SQL 脚本文件,如:psql -f filename.sql.
7. 列出所有的表空间
\db
8. 列出所有schema模式
\dn
9. 列出所有角色或用户
\du
\dg
--不区分用户和角色
10. 列出所有索引
\di
11. 列出所有序列
\ds
12. 列出所有函数
\df
13. 列出所有视图
列出当前数据库中的所有视图。
\dv
14. 显示详细的错误报告
\set VERBOSITY verbose
15. 列出表的权限分配
\dp
\z
16. 显示SQL执行时间
\timing
17. 行列转换
\x
这个命令有点像 MySQL 中的 \G。
18. 查看 SQL 命令历史记录
\s [filename]
如果指定了文件名,则会将历史记录保存到该文件中。使用上下方向键把以前使用过的命令或 SQL 语句调出来, 连续单击两次 Tab 键表示把命令补全或给出输入提示。
19. 输出信息
\echo XXX
jiekexu=# \echo JiekeXu
JiekeXu
20. 重置命令行提示符
\prompt 命令在 psql 中用于提示用户输入,并将输入的值存储在一个变量中。这个命令非常有用,特别是在需要动态获取用户输入的情况下。另外,还有 PROMPT1、PROMPT2、PROMPT3 环境变量可以设置。
\prompt [text] name
jiekexu=# select * from test;
id
----
1
2
3
4
5
6
(6 rows)
jiekexu=# \prompt '请输入表名: ' table_name
请输入表名: test
jiekexu=# select * from :table_name;
id
----
1
2
3
4
5
6
(6 rows)
jiekexu=#
jiekexu=# \set PROMPT1 '%/(ConnAs[%n]:PID[%p])%R# '
jiekexu(ConnAs[postgres]:PID[42987])=#
postgres=# \set PROMPT1 '%/(ConnAs[%n]:PID[%p] %`date +"%Y-%m-%d/%H:%M:%S"`)%R# '
postgres(ConnAs[postgres]:PID[41386] 2024-12-09/11:48:43)=#
postgres=# \set PROMPT1 '%/<%:SERVER_VERSION_NAME:>(ConnAs[%n]:PID[%p] %`date +"%Y-%m-%d/%H:%M:%S"`)%R# '
postgres<13.12>(ConnAs[postgres]:PID[41386] 2024-12-09/11:49:23)=#
postgres=# \set PROMPT1 '%/<%:SERVER_VERSION_NAME:>(ConnAs[%n]:PID[%p] %`date +"%Y-%m-%d/%H:%M:%S"` %`echo $PGDATA`)%R# '
PROMPT1 和 PROMPT2 的默认设置值一样,默认值都为 %/%R%#,这三个字符的解释如下:
%/: 当前的数据库名称。
%R: PROMPT1通常为=,如果会话断开,则显示!;PROMPT2中-表示命令等待更多输入,*表示未完成的注释。
%#: 如果是超级用户则显示#,其他用户显示>。
21. 查看当前连接信息
\conninfo
jiekexu=# \conninfo
You are connected to database "jiekexu" as user "postgres" on host "192.168.75.11" at port "54321".
22. 设置自动提交
psql 默认是自动提交,可关闭自动提交功能,但要注意是大写的 AUTOCOMMIT。
\set AUTOCOMMIT off/on
23. 指定客户端字符集
\encoding gbk;
\encoding utf8;
24. 输出到文件
\o xxxx.txt
jiekexu=# \o test.txt
jiekexu=# select * from jieke;
jiekexu=# \q
[root@jiekexu1 ~]# ll test.txt
-rw-r--r-- 1 root root 68 Dec 9 11:41 test.txt
[root@jiekexu1 ~]# more test.txt
id | name
----+----------
1 | zhangsan
2 | lisi
(2 rows)
25. 使用外部编辑器编辑当前的查询缓冲区
编辑命令“\e”可以用于编辑文件, 也可用于编辑系统中已存在的函数或视图定义,输入“\e”命令后会调用一个编辑器, 在Linux下通常是Vi, 当“\e”命令不带任何参数时则是生成一个临时文件, 前面执行的最后一条命令会出现在临时文件中, 当编辑完成后退出编辑器并回到psql中时会立即执行该命令 。
如下所示,这里 \e 我输入了 “select * from jieke;” 保存退出后,立马执行了此 SQL 命令。
jiekexu=# \e
id | name
----+----------
1 | zhangsan
2 | lisi
(2 rows)
jiekexu=# select * from jieke;
id | name
----+----------
1 | zhangsan
2 | lisi
(2 rows)
jiekexu=# \ef
CREATE FUNCTION ( )
RETURNS
LANGUAGE
-- common options: IMMUTABLE STABLE STRICT SECURITY DEFINER
AS $function$
$function$
可以用“\ef”命令编辑一个函数的定义,如果“\ef”后面不跟任何参数,则会出现一个编辑函数的模板。如果“\ef”后面跟一个函数名,则函数定义的内容会出现在 Vi 编辑器中,当编辑完成后按“wq:”保存并退出,再输入“;”就会执行所创建函数的 SQL 语句。同样输入“\ev”且后面不跟任何参数时,在Vi中会出现一个创建视图的模板 。然后用户就可以在 Vi 中编辑这个创建视图的 SQL 语句,编辑完成后,保存并退出,再输入分号“;”,就会执行所创建视图的 SQL 语句。
“\ef”和“\ev”命令可以用于查看函数或视图的定义,当然用户需要注意,退出 Vi 后,要在psql中输入“\reset”来清除 psql 的命令缓冲区,防止误执行创建函数和视图的 SQL 语句。
最后,如果你想知道这些以“\”开头的命令执行的实际 SQL 语句,可以在启动 psql 的命令行中加上“-E”参数, 就可以把 psql 中各种以“\”开头的命令执行的实际 SQL 语句打印出来,如果在已运行的 psql 中显示了某个命令实际执行的 SQL 语句后又想关闭此功能,该怎么办?这时可以使用 “\set ECHO_HIDDEN on|off”命令。
最后总结一下最最常用的十个命令:
\l 列出有哪些数据库
\conninfo 列出当前会话连接信息,包括数据库名,用户名,端口号以及 socket 等信息。
\c dbname 切换到指定的数据库下。
\du 和 \dg 功能一样,列出当前用户和角色信息。
\db 列出当前数据库集簇有哪些表空间。
\dn 列出当前数据库集簇有哪些数据库模式(schema)。
\dt 列出当前数据库集簇中所有的表信息。
\d TableName 列出此表的列信息,类似于 Oracle 中的 desc 命令。
\di+ 列出索引的详细信息。
\di IndexName 列出此索引的信息。
这些命令可以帮助你在 psql
中高效地进行数据库管理和操作。如果你有特定的需求或需要更复杂的操作示例,欢迎一起交流!
全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~
欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
—————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
—————————————————————
分享几个数据库备份脚本
一文搞懂 Oracle 统计信息
我的 Oracle ACE 心路历程
MOP 系列|MOP 三种主流数据库索引简介
Oracle 主流版本不同架构下的静默安装指南
关机重启导致 ASM 磁盘丢失数据库无法启动
Oracle SQL 性能分析(SPA)原理与实战演练
Oracle 11g 升级到 19c 需要关注的几个问题
Windows 10 环境下 MySQL 8.0.33 安装指南
SQL 大全(四)|数据库迁移升级时常用 SQL 语句
OGG|使用 OGG19c 迁移 Oracle11g 到 19C(第二版)
Oracle 大数据量导出工具——sqluldr2 的安装与使用
Oracle ACE 视角下的国产数据库现状与选型及应对策略
从国产数据库调研报告中你都能了解哪些信息及我的总结建议
使用数据泵利用 rowid 分片导出导入 lob 大表及最佳实践
在归档模式下直接 rm dbf 数据文件并重启数据库还有救吗?
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107——————————————————————————