psql工具的使用

前端之家收集整理的这篇文章主要介绍了psql工具的使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

psql工具的使用



概述


psql是Postgresql的一个命令行交互式客户端工具,类似Oracle的命令行工具sqlplus,但是比sqlplus好用的多,并且更加的方便,它允许你交互的键入sql或者命令,然后把他们发出给Postgresql服务器,在显示sql或者命令的结果,而且,输入的内容还可以来自于一个文件,此外,它还提供了一些元命令和多种类似shell的特性来书写脚本,以及对大量任务的自动化工作。当然读者也可以使用Postgresql中的如兴华的客户端工具(如pgAdminIII)来实现上述的功能。但是如果你掌握了psql的使用方法,将会体会到它的方便之处。因为psql是一个字符界面的工具,没有图形化界面工具使用上的一些限制,psql和pgAdminIII之间的关系就相当于vi和图形化工具的关系,在记住一些psql命令之后,你会发现psql是快捷的小工具。

psql初步使用


@H_502_68@$ psql   #连接到数据库服务器,可以在其中输入相应的sql语句或者psql的命令,psql的命令都以\开始
@H_502_68@$ \l     #列出所有的数据库
@H_502_68@$ \d     #查看表的结构
@H_502_68@$ \d 表名  #查看指定表的具体结构
@H_502_68@$ create database  新数据库#创建新的数据库
@H_502_68@$ \c 已经有的数据库#切换当前数据库到指定的数据库
@H_502_68@$ psql -h 主机名/ip地址 -p 端口号    数据库名称 用户名#连接到指定的数据库

psql的常用命令


@H_502_68@$ \d      #显示所有的表
@H_502_68@$ \d  表名  #显示指定的表的结构
@H_502_68@$ \d 索引名   #显示指定索引的结构
@H_502_68@$ \d 后跟通配符*或者?等   #?代表匹配一个 * 代表匹配多个,如\d s*会匹配以s开头后跟任意个字符的表或者索引并显示出来,\d s?会匹配以s开头后跟一个字符的表或者索引并显示出来
@H_502_68@$ \d+   #该命令会比\d命令显示更详细的信息,除了前面介绍的那些,它还会显示任何与表相关联的注释,以及表中出现的OID,\d+可以代替之前的任意以\d开头的命令
@H_502_68@$ \dt    #只显示
@H_502_68@$ \di   #只显示所有的索引
@H_502_68@$ \ds   #只显示序列
@H_502_68@$ \dv   #只显示视图
@H_502_68@$ \df   #只显示函数
@H_502_68@$ \timing on  #显示sql的执行时间
@H_502_68@$ \timing off  #关闭显示sql的执行时间
@H_502_68@$ \dn  #显示所有的schema
@H_502_68@$ \db  #显示所有的表空间
@H_502_68@$ \du 或者 \dg   #显示数据库中的所有角色和用户
@H_502_68@$ \dp 或者 \z 表名   #显示表的权限分配情况
字符编码问题

$ \encoding utf8 #当客户端的字符编码和服务器的不一样时,可能会显示乱码,可以使用\encoding命令来指定客户端的字符编码,如使用\encoding utf8来指定客户端的编码方式为utf8
\pset命令

\pset命令用于指定输出的格式,具体如下:

  • \pset border 0 : 表示输出内容物边框
  • \pset border 1 : 表示边框只在内部,默认情况下采用的是该条命令
  • \pset border 2 : 表示内外都存在边框
\x命令

\x命令可以将表中的每一行的每列数据都拆分为单行显示,也就是将每条记录(一条记录就是一行)中的每一列都显示在一行里面,以记录为单位进行显示

@H_502_68@$ \x   #全局设置,一次会改变显示,再在shell中输入\x就退回到原来的显示
执行存储在外部文件中的sql命令

\i <sql文件的路径>可以在pg中执行外部的sql语句,这样方便我们执行很复杂的sql语句。在MysqL中也存在类似的功能,但是实现的方式不一样,在MysqL中执行存储在外部文件中的sql命令的方式:source <sql文件的全路径> 或者 \. <sql文件的全路径>,参考:http://www.jb51.cc/article/p-nliqcmae-bcn.html

显示信息

在使用psql的过程中,经常比较困惑的问题就是输入一条命令之后,显示出结果,由于全部嗾使一片黑压压的命令行,导致我们找不到哪里是开始,这时显示一条分割线显得尤其的重要,使用\echo命令能方便的实现这种功能

$ \echo ===================================
$ \echo "提示信息,可以和用户进行交互"
其它命令

在Linux中,我们不可能记住所有的命令,怎么办呢?在Linux操作系统、Docker技术中可以使用–help查找,那么在Postgresql中是否具备这样的功能呢?答案是肯定的。

@H_502_68@$ \?   #可以看到所有的psql的可执行命令,**请注意该命令显示的是psql客户端能够使用的命令**
@H_502_68@$ q   #退出显示
@H_502_68@$ \h 命令   #可以查看指定命令的sql语法,**请注意此时查找的是sql命令的用法**

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语句
原文链接:https://www.f2er.com/postgresql/194453.html

猜你在找的Postgre SQL相关文章