psql是PostgreSQL自带的一个交互式命令行客户端,使用起来非常的灵活。一般如果是在Linux环境下,我们都会选择它。而且,当我们要在Shel脚本中操作数据库的话,那psql就非常的方便了。

一,psql的常用选项

第一类:连接相关-d:指定要连接的数据库。

-U:连接时使用的用户。

-h:要连接的主机地址(IP)。

-p:连接的端口号。

比如,使用数据库用户allan登陆192.168.1.148主机上面监听端口为5432的PostgreSQL数据库,命令如下:allan@ubuntu:~$ psql -d postgres -U allan -h 192.168.1.148 -p 5432

psql (9.3.5)

Type "help" for help.

postgres=#

注意点:这几个参数都有默认值,可以使用psql --help查看默认值。如果不明确使用某个选项,就使用默认值。比如如果默认登陆的数据库是postgres,默认端口号是5432,那么上面的命令可以简写为:psql -U allan -h 192.168.1.148。

要注意使用-h与不使用-h的区别:一般不加-h是默认使用的是local socket,亦即UNIX socket(该socket此处不详细介绍),该socket只能用于本机登陆,所以一般认证机制会稍微比较宽松。而加-h参数都使用的都是TCP socket,可以在不同主机间通信。这两者的安全级别在pg_hba.conf文件里面是分开规定的。所以,psql -d postgres -h 127.0.0.1和psql -d postgres都登陆的是本机的postgres数据库,但是走的通道却是不一样的,前者走的是TCP socket通道,后者走的是Unix socket通道。

PostgreSQL数据库默认只监听本机,所以如果需要接受其他主机的连接,需要设置两个文件:postgresql.conf和pg_hba.conf文件。

第二类:执行命令-c:执行该参数后面跟的字符串命令。如果字符串中包含多个SQL命令,那他们将在一个事务里面处理,除非明确使用BEGIN/COMMIT命令将他们分隔开。

-f:执行该参数后面跟的文件。与psql内部的命令i作用相同。

第三类:其他选项-v:设置psql的参数。psql有许多参数可以设置,如果我们只想让某些选项只在某一次会话中有效,那么我们就不能将设置写在配置文件里面,而需要登陆的时候加上-v参数进行设置。

-V:打印psql的版本号。

-l:列出可用的数据库。

-o:后跟文件名,功能是将查询结果重定向到该文件中。

其他还有许多参数,但是都不太常用,这里不再一一列出,可以使用psql -?或者psql --help查看。

二,psql返回值

psql共有四个返回值:0,1,2,3.0:正常结束,向shell返回0.

1:自身发生致命错误,比如内存用尽,文件不存在等。

2:如果和数据库的连接失效而且会话不再活跃,返回2.

3:如果脚本中发生了错误,并且设置了ON_ERROR_STOP,则返回3.

这里需要注意的是0和3这两个返回值。我们经常会利用psql去执行一个文件,但是却发现即使文件里面执行时出了错,却返回值依旧是0,而不是3.这是因为要返回3,有两个条件:脚本中发生了错误,并且设置了ON_ERROR_STOP选项。如果不设置后者,那么即使出错,也返回0.无法判断文件是否真正成功执行。

那ON_ERROR_STOP这个选项是什么意思呢?其实很简单,就是如果遇到执行失败,就停止继续执行。比如说test.sql文件里面写了10句sql命令,而且第6条执行会出错。那么不设置该选项时,第6条失败后,后面的语句会继续执行,且返回值为0。但是如果设置了ON_ERROR_STOP选项,那么当第6条执行出错后,就停止执行,后面的语句将不再执行,且返回值为3.这在shell脚本中判断psql是否真正执行成功非常的有用。看下面的例子:# 创建测试用的表test

allan@ubuntu:~$ psql postgres

psql (9.3.5)

Type "help" for help.

postgres=# CREATE TABLE test(

postgres(# word varchar

postgres(# );

CREATE TABLE

postgres=# d test

Table "public.test"

Column | Type | Modifiers

--------+-------------------+-----------

word | character varying |

postgres=# q

# 创建测试用的sql文件

allan@ubuntu:~$ cat test.sql

INSERT INTO test VALUES('a');

INSERT INTO test VALUES(b); # 该句存在语法错误

INSERT INTO test VALUES('c');

# 利用psql刷入test.sql文件,执行第二条语句时出错

allan@ubuntu:~$ psql -d postgres -f test.sql

INSERT 0 1

ERROR: column "b" does not exist at character 25

STATEMENT: INSERT INTO test VALUES(b);

psql:test.sql:2: ERROR: column "b" does not exist

LINE 1: INSERT INTO test VALUES(b);

^

INSERT 0 1 # 虽然第二句执行出错,但第三条依旧执行

allan@ubuntu:~$ echo $?

0 # 虽然执行脚本时出错,但是psql向shell的返回值为0

# 查看结果,可见a、b入库。

allan@ubuntu:~$ psql postgres

psql (9.3.5)

Type "help" for help.

postgres=# select * from test;

word

------

a

c

(2 rows)

postgres=# truncate table test; # 清空表,继续后面的测试

TRUNCATE TABLE

postgres=# q

# 加了ON_ERROR_STOP选项后再测试

allan@ubuntu:~$ psql postgres -v ON_ERROR_STOP=true -f test.sql

INSERT 0 1

ERROR: column "b" does not exist at character 25

STATEMENT: INSERT INTO test VALUES(b);

psql:test.sql:2: ERROR: column "b" does not exist

LINE 1: INSERT INTO test VALUES(b);

^

allan@ubuntu:~$ echo $?

3 #第二句执行出错后,后面的没有继续执行,且返回值为3

查看数据库,只有a入库了

allan@ubuntu:~$ psql postgres

psql (9.3.5)

Type "help" for help.

postgres=# select * from test;

word

------

a

(1 row)

postgres=# q

linux环境下psql命令,psql命令介绍相关推荐

  1. 操作系统课程设计--在Linux环境下模拟实现简单命令解释器(C++代码)

    操作系统课程设计要求 一.设计目的 熟悉Linux编程环境,加强对Linux命令的理解及函数的运用 二.设计内容 1. 在Linux环境下模拟实现简单命令解释器. (1)要求实现的基本命令包括: pw ...

  2. linux环境下常用的网络命令ping、telnet、traceroute、tcpdump

    文章目录 前言 网络 网络命令 ping telnet nc traceroute tcpdump 总结 前言 因特网(Internet)的前身是美国国防部高级研究计划局(ARPA)用于军事目的的通信 ...

  3. 在linux环境下模拟实现简单命令解释器_git bash 竟然不支持 tree 命令

    别人家的孩子 以下故事,纯属虚构,如有雷同,绝不可能! git 是一个思维敏捷做事可靠的好管家,什么事交给他都很放心,文件再也不用担心丢失了,还得记住文件内容的更改变化. 可惜的是,git 是别人家的 ...

  4. Linux环境下查看日志文件命令详解

    目录: 前言 cat命令 more命令 less命令 head命令 tail命令 tac命令 echo命令 grep命令 sed命令 混合命令 附加 前言: 当日志存储文件很大时,我们就不能用 vi ...

  5. linux环境下随时照看服务器进程的ps和top命令

    文章目录 前言 ps命令 语法格式 语法规范 常用的ps选项 ps命令的表头 进程状态 常规状态码 BSD格式状态码 进程相关的后续命令 top命令 语法格式 常用的top选项和快捷键 top命令的表 ...

  6. linux设置密码报错automa,opensuse linux环境下ibm_websphere和ibm_db2安装以及DB2数据迁移操...

    opensuse linux环境下ibm_websphere和ibm_db2安装 ibm_websphere安装: 1.ibm官网下载免费版websphere,如下载文件名为BASETRIAL.age ...

  7. 【Chrome浏览器插件开发】浏览器插件运行机制02之实战开发出一款Google浏览器插件——含源码全部过程 (建议在Linux环境下)

    一.浏览器插件配置文件 manifest.json入门 每个浏览器插件都有一个 JSON 格式的文件,叫做 manifest.json,里面提供了插件的描述信息. manifest.json 文件本质 ...

  8. PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...

    源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...

  9. linux环境下blastn命令怎么用,Linux环境下通配符及特殊符号使用详解

    Linux环境下通配符及特殊符号使用详解 我们现在来介绍通配符的使用,通过通配符的过滤,快速找到想找的文件和目录,比如/etc/目录下有上千个目录和文件,不使用通配符想找一个目录和文件是非常麻烦的和花 ...

最新文章

  1. java算法例子_java算法小例子
  2. The Innovation | Volume 2 Issue3 正式出版
  3. mysql双主数据一致性_mysql双主复制的主备数据一致性知多少
  4. HTTP协议 ----响应消息
  5. kubernetes使用ansible快速构建集群
  6. u-boot移植第二弹——移植2012.10u-boot到RealARM210 cortex-A8开发板
  7. 交叉驰豫的影响因素_交叉滚子轴承系列吉林薄壁交叉滚子轴承用途博盈
  8. 书呆子rico_寻找设计和类型书呆子的清道夫
  9. Android 学习笔记 databinding简单使用:使用databinding在listview加入不同类型的view
  10. 关于Oracle数据库的SQL语句使用时的一些技巧。
  11. 5319. 删除回文子序列
  12. iOS 并发编程之 Operation Queues
  13. 计算机鼠标双击怎么,电脑鼠标双击变成属性的解决方法
  14. MATLAB学习笔记————(MATLAB的矩阵及其操作②)
  15. 不同尺度下耕地土壤Cr含量的空间自相关性分析
  16. 国内十大白银期货APP最新排名
  17. 关于国产化系统银河麒麟(Kylin)的问题记录--持续更新
  18. SVM中支持向量的通俗解释
  19. Kotlin+Retrofit + MVVM 的网络请求框架的封装
  20. 2021-2027全球与中国户外建筑用大理石市场现状及未来发展趋势

热门文章

  1. json格式化小工具--pyqt5实例
  2. windows搭建NTP时钟服务器(win xp、7、8、10)
  3. [图像处理]彩色图片转手绘效果
  4. HC社区商城操作文档
  5. 手机玩exe游戏的模拟器_使命召唤手游模拟器和手机一起玩怎么样 拟器和手机一览_使命召唤手游...
  6. base64图片 类型
  7. Nginx开启gzip压缩配置参数
  8. 以太坊之DAPP开发(完整例子)
  9. 干洗店小程序做一个预约小程序有什么优点
  10. 改造我们的win10桌面