psql工具的使用

psql工具简介

psql是命令行的工具,对应的图形化工具是pgadminIII,psql允许你交互式地输入命令,也可以通过文件的形式执行脚本。

简单使用

直接输入psql即可进入到命令行

1
2
3
4
psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1))
Type "help" for help.
postgres=#

postgresql在安装的时候会自动创建一个与安装用户同名的超级用户,该用户的鉴权是通过操作系统实现的,所以,执行psql的时候不需要输入密码。

1
2
3
4
5
6
7
8
9
10
11
psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
pgdemo | 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**
(4 rows)

安装好后,默认会有一个postgres的数据库,还有两个模板数据库template0和template1,用户在创建数据库时,是默认从模板数据库template1克隆出来的,通常可以定制template1中的内容,以后创建的数据库默认会有这些表和内容。而template0是一个最简化的模板库,创建数据库时,如果指明从此数据库中继承,将会创建出一个最简化的数据库。

常用命令

\l

列出数据库列表

\d

显示匹配的关系,表、视图、索引和序列等

\d+

比\d显示更详细的信息,与表关联的注释以及表中的OID等

dt: 只显示匹配的表
di: 只显示匹配的索引
ds: 只显示匹配的序列
dv: 只显示匹配的视图
df: 只显示匹配的函数

列出sql执行的时间

\timing on

列出所有的schema

\dn

列出所有的表空间

\db

Postgresql中的表空间实际就是一个目录,放在一个表空间的表,就是把表数据放在目录下。

列出所有的角色和用户

\du 或 \dg

du和dg在postgresql中等价,原因在于postgresql中的角色和用户不分。

表权限

\dp 或 \z 显示表权限分配情况

指定字符集

\encoding

pset命令

  1. pset border 0: 输出内容无边框
  2. pset border 1: 边框只在内部
  3. pset border 2: 内外都有边框

\x 拆分单行

\x 命令可以将表中的每一行数据都拆分成单行

执行外部sql脚本

  1. \i 文件名
  2. psql -s 文件名

显示信息

\echo

更多命令

\?

使用技巧和注意事项

自动补全

按两次tab键可以自动补全命令

自动提交

psql中的事物是自动提交的,想要不自动提交的方式:

  1. 运行begin命令 然后执行dml语句,再commit或rollback
  2. 直接使用 \set AUTOCOMMIT off 关掉自动提交

在psql中获取实际执行的sql

在启动psql的时候添加-E 参数就可以把psql中各种以\开头的命令实际执行的sql打印出来。

如果想在psql中显示某一条命令实际执行的sql,显示完又想关闭这个功能,则使用:

\set ECHO_HIDDEN on|off