title: "Psql工具详细使用介绍"
date: 2021-02-01T21:01:34+08:00
draft: true
tags: ['psql','postgresql']
author: "dadigang"
author_cn: "大地缸"
personal: "http://www.real007.cn"
关于作者
psql 工具详细使用介绍
psql 介绍
psql 是 PostgreSQL 中的一个命令行交互式客户端工具,
它允许你交互地键入 SQL 命令,然后把它们发送给 PostgreSQL 服务器,再显示 SQL 或命令的结果。
输入的内容允许来自一个文件,此外它还提供了一些元命令和多种类似 shell 的特性来实现书写脚本,以及对大量任务的自动化工作。
特性:方便快捷、没有图形化工具使用上的一些限制
psql 的简单使用
直接输入 psql 进入到命令行下:
image
安装数据库时,会自动创建一个与当前操作系统用户同名的数据库超级用户,在当前系统下,登录数据库时执行的是操作系统认证,所以不需要用户名和密码,当然也可以通过修改 pg_hba.conf 文件来要求输入密码。
下面介绍一下常用的 psql 连接数据库的方法,命名格式如下:
psql -h <hostname or ip> -p <端口> [数据库名称] [用户名称]
image这些连接参数也可以用环境变量指定,比如:
export PGDATABASE=testdb
export PGHOST=127.0.0.1
export PGPORT=5432
export PGUSER=postgres
然后直接允许 psql 即可。
psql 的常用命令
psql 的命令都是以斜杠 "\" 开头的。
\\l 查看所有数据库
\\d [ pattern ] 该命令将显示每个匹配关系(表、视图、索引、序列)的信息,可以加上 + 查看更多的信息,如 \\d+
1、不加任何参数表示查看当前数据库的所有表。
2、\\d tablename 后面跟一个表名,表示显示这个表的结构定义
3、\\d indexname 也可以显示索引的信息,如 \\d 索引名称
4、\\d \* 后面也可以跟通配符如 "\*" 或 "?",\\d x\*
5、\\d+ 将显示比 \\d 更详细的信息,还会显示任何与表关系的注释,以及表中出现的 OID
6、\\dt 只显示匹配的表
\\di 只显示索引
\\ds 只显示序列
\\dv 只显示视图
\\df 只显示函数
7、\\timing on或off 显示 SQL 已执行的时间,默认情况下是 off
image
8、\\dn 列出所有的 schema
9、 \\du 或 \\dg 列出所有的数据库用户和角色
10、 \\db 显示所有的表空间,表空间其实是一个目录,放在这个表空间的表,就是把表的数据文件发到这个表空间下。
11、\\dp 或 \\z 显示表的权限分配情况
12、\\encoding 指定客户端的字符编码,如 \\encoding UTF8;
13、\\pset 设置输出的格式,\\pset border 0 : 表示输出内容无边框。 border 1 :表示边框只在内部。border 2 :内外都有边框
14、\\x 把表中的每一行的每列数据都拆分为单行展示,与 MySQL 中的 "\\G" 的功能类似。
image
15、\\echo 用于输出一行信息,通常用于在 .sql 文件中输出一些提示信息。
16、\\password 设置密码
17、\\conninfo 列出当前数据库连接的信息
18、\\dx 查看数据库中安装的扩展 或 select \* from pg\_extension;
更多的命令可以用 \? 来显示
执行存储在外部文件中的 SQL 命令
\\i <文件名> 执行存储在外部文件中的 sql 语句
当然也可以在 psql 命令行加 "-s <filename>" 来执行 SQL 脚本文件中的命令,如 psql -s test.sql
psql 的使用技巧和注意事项
1、在启动 psql 命令后中加 "-E" 参数,就可以把 psql 中各种以 "\" 开头的命令执行的实际 SQL 打印出来,如下 psql -E postgres,如果想关闭此功能,可以使用 "\set ECHO_HIDDEN on | off"
2、自动提交方面的技巧
psql 中的事务是自动提交的,可以运行 begin; 然后执行 dml 语句,最后再执行 commit 或 rollback 语句。或 直接使用 psql 中的命令关闭自动提交的功能。 \\set AUTOCOMMIT off
3. 查看数据库、表、索引大小
select pg_size_pretty(pg_table_size('test'));
select pg_size_pretty(pg_database_size('david'));
select pg_size_pretty(pg_indexes_size('test'));
网友评论