暂无图片
暂无图片
13
暂无图片
暂无图片
3
暂无图片

简化数据库管理:PostgreSQL psql 25 个必备命令

724

大家好,我是 JiekeXu,江湖人称“强哥”,青学会 MOP 技术社区主席,荣获 Oracle ACE Pro 称号,墨天轮 MVP,墨天轮年度“墨力之星”,拥有 Oracle OCP/OCM 认证,MySQL 5.7/8.0 OCP 认证以及 PCA、PCTA、OBCA、OGCA、KCP 等众多国产数据库认证证书,今天和大家一起来看看 PostgreSQL psql 25 个必备命令,欢迎关注我的微信公众号“JiekeXu DBA之路”,然后点击右上方三个点“设为星标”置顶,更多干货文章才能第一时间推送,谢谢!

facebook_pro_light_1920 × 1080  副本.png

引言

PostgreSQL 是一个强大的开源关系型数据库管理系统。psql 是其默认的命令行客户端工具,提供了丰富的功能来管理和操作数据库。本文将介绍一些常用的 psql 命令,帮助你更高效地使用 PostgreSQL。

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 也可以,另外 ? 也可以查看帮助信息。

postgres=# \help Available help: ABORT CHECKPOINT CREATE USER DROP TRIGGER ALTER AGGREGATE CLOSE CREATE USER MAPPING DROP TYPE postgres=# \? 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
复制

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. 列出所有数据库

\l 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 | (5 rows)
复制

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 ” 来执行 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=# postgres=# \set PROMPT1 '%/(ConnAs[%n]:PID[%p])%R# ' postgres(ConnAs[postgres]:PID[40514])=# 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” 命令。

图片.png

最后总结一下最最常用的十个命令:

\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
——————————————————————————
facebook_pro_light_1920 × 1080  副本.png

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

文章被以下合辑收录

评论

暂无图片
10天前
评论
暂无图片 0
\l 列出有哪些数据库 \conninfo 列出当前会话连接信息,包括数据库名,用户名,端口号以及 socket 等信息。 \c dbname 切换到指定的数据库下。 \du 和 \dg 功能一样,列出当前用户和角色信息。 \db 列出当前数据库集簇有哪些表空间。 \dn 列出当前数据库集簇有哪些数据库模式(schema)。 \dt 列出当前数据库集簇中所有的表信息。 \d TableName 列出此表的列信息,类似于 Oracle 中的 desc 命令。 \di+ 列出索引的详细信息。 \di IndexName 列出此索引的信息。
10天前
暂无图片 点赞
评论
星星之火
暂无图片
3月前
评论
暂无图片 0
好东西必须收藏这些命令可以帮助你在 psql 中高效地进行数据库管理和操作
3月前
暂无图片 点赞
评论
小草
暂无图片
3月前
评论
暂无图片 1
简化数据库管理:PostgreSQL psql 25 个必备命令
3月前
暂无图片 1
评论
TA的专栏
JiekeXu DBA之路
收录226篇内容
JiekeXu_MySQL 学习笔记
收录41篇内容
目录
  • 引言
  • 1. 连接到数据库
  • 2. 列出所有数据库
  • 3. 切换数据库
  • 4. 列出当前数据库的所有表
  • 5. 查看表结构
  • 6. 执行SQL文件
  • 7. 列出所有的表空间
  • 8. 列出所有schema模式
  • 9. 列出所有角色或用户
  • 10. 列出所有索引
  • 11. 列出所有序列
  • 12. 列出所有函数
  • 13. 列出所有视图
  • 14. 显示详细的错误报告
  • 15. 列出表的权限分配
  • 16. 显示SQL执行时间
  • 17. 行列转换
  • 18. 查看 SQL 命令历史记录
  • 19. 输出信息
  • 20. 重置命令行提示符
  • 21. 查看当前连接信息
  • 22. 设置自动提交
  • 23. 指定客户端字符集
  • 24. 输出到文件
  • 25. 使用外部编辑器编辑当前的查询缓冲区