psql工具的使用
-
-
- psql工具的使用
- 概述
- psql初步使用
- psql的常用命令
- 字符编码问题
- pset命令
- x命令
- 执行存储在外部文件中的SQL命令
- 显示信息
- 其它命令
- psql的使用技巧和注意事项
- 历史命令与补全功能
- 自动提交技巧
- 得到psql中真实执行的SQL语句
概述
psql是PostgreSQL的一个命令行交互式客户端工具,类似Oracle的命令行工具sqlplus,但是比sqlplus好用的多,并且更加的方便,它允许你交互的键入SQL或者命令,然后把他们发出给PostgreSQL服务器,在显示SQL或者命令的结果,而且,输入的内容还可以来自于一个文件,此外,它还提供了一些元命令和多种类似shell的特性来书写脚本,以及对大量任务的自动化工作。当然读者也可以使用PostgreSQL中的如兴华的客户端工具(如pgAdminIII)来实现上述的功能。但是如果你掌握了psql的使用方法,将会体会到它的方便之处。因为psql是一个字符界面的工具,没有图形化界面工具使用上的一些限制,psql和pgAdminIII之间的关系就相当于vi和图形化工具的关系,在记住一些psql命令之后,你会发现psql是快捷的小工具。
psql初步使用
$ psql
$ l
$ d
$ d 表名
$ create database 新数据库名
$ c 已经有的数据库名
$ psql -h 主机名/ip地址 -p 端口号 数据库名称 用户名称
psql的常用命令
$ d
$ d 表名
$ d 索引名
$ d 后跟通配符*或者?等
$ d+
$ dt
$ di
$ ds
$ dv
$ df
$ timing on
$ timing off
$ dn
$ db
$ du 或者 dg
$ dp 或者 z 表名
字符编码问题
$ encoding utf8 #当客户端的字符编码和服务器的不一样时,可能会显示乱码,可以使用encoding命令来指定客户端的字符编码,如使用encoding utf8来指定客户端的编码方式为utf8
pset命令
pset命令用于指定输出的格式,具体如下:
- pset border 0 : 表示输出内容物边框
- pset border 1 : 表示边框只在内部,默认情况下采用的是该条命令
- pset border 2 : 表示内外都存在边框
x命令
x命令可以将表中的每一行的每列数据都拆分为单行显示,也就是将每条记录(一条记录就是一行)中的每一列都显示在一行里面,以记录为单位进行显示
$ x
执行存储在外部文件中的SQL命令
i <SQL文件的路径>
可以在pg中执行外部的SQL语句,这样方便我们执行很复杂的SQL语句。在MySQL中也存在类似的功能,但是实现的方式不一样,在MySQL中执行存储在外部文件中的SQL命令的方式:source <SQL文件的全路径>
或者 . <SQL文件的全路径>
,参考:http://www.52php.cn/article/p-nliqcmae-bcn.html 。
显示信息
在使用psql的过程中,经常比较困惑的问题就是输入一条命令之后,显示出结果,由于全部嗾使一片黑压压的命令行,导致我们找不到哪里是开始,这时显示一条分割线显得尤其的重要,使用echo命令能方便的实现这种功能。
$ echo ===================================
$ echo "提示信息,可以和用户进行交互"
其它命令
在Linux中,我们不可能记住所有的命令,怎么办呢?在Linux操作系统、Docker技术中可以使用–help查找,那么在PostgreSQL中是否具备这样的功能呢?答案是肯定的。
$ ?
$ q
$ h 命令
psql的使用技巧和注意事项
历史命令与补全功能
- 使用上下键可以查看历史命令
- 两次tab键可以实现命令补全或者给出输入提示
自动提交技巧
在psql中事务是自动提交的,比方说,执行完一条create table语句之后,事务就会被自动的提交,如果不想自动的提交,方法有两种:
- 方案一:运行begin命令,然后执行相应的SQL语句,最后在执行commit或者rollback语句
- 方案二:直接使用psql中的命令关闭自动提交的功能,set AUTOCOMMIT off ,该命令设置自动提交关闭
实际上,MySQL等数据库也是这样的情况,当我们不使用显示的事务语句时,每一条SQL语句都被作为一个事务,或者说数据库内部将每一个SQL语句封装为一个事务,在PostgreSQL中仍然是这样的,平时使用时要注意。
得到psql中真实执行的SQL语句
开头的命令究竟执行的是什么样的SQL语句?怎么知道呢?PostgreSQL提供了两种方法:
- psql -E 在启动psql时使用-E参数,该方式适用于还没有启动psql时的情况
- set ECHO_HIDDEN on|off 该情况适用于在psql已经打开,并且我们想灵活的打开和关闭显示开头命令的SQL语句