linux环境下psql命令,psql命令介绍
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命令介绍相关推荐
- 操作系统课程设计--在Linux环境下模拟实现简单命令解释器(C++代码)
操作系统课程设计要求 一.设计目的 熟悉Linux编程环境,加强对Linux命令的理解及函数的运用 二.设计内容 1. 在Linux环境下模拟实现简单命令解释器. (1)要求实现的基本命令包括: pw ...
- linux环境下常用的网络命令ping、telnet、traceroute、tcpdump
文章目录 前言 网络 网络命令 ping telnet nc traceroute tcpdump 总结 前言 因特网(Internet)的前身是美国国防部高级研究计划局(ARPA)用于军事目的的通信 ...
- 在linux环境下模拟实现简单命令解释器_git bash 竟然不支持 tree 命令
别人家的孩子 以下故事,纯属虚构,如有雷同,绝不可能! git 是一个思维敏捷做事可靠的好管家,什么事交给他都很放心,文件再也不用担心丢失了,还得记住文件内容的更改变化. 可惜的是,git 是别人家的 ...
- Linux环境下查看日志文件命令详解
目录: 前言 cat命令 more命令 less命令 head命令 tail命令 tac命令 echo命令 grep命令 sed命令 混合命令 附加 前言: 当日志存储文件很大时,我们就不能用 vi ...
- linux环境下随时照看服务器进程的ps和top命令
文章目录 前言 ps命令 语法格式 语法规范 常用的ps选项 ps命令的表头 进程状态 常规状态码 BSD格式状态码 进程相关的后续命令 top命令 语法格式 常用的top选项和快捷键 top命令的表 ...
- linux设置密码报错automa,opensuse linux环境下ibm_websphere和ibm_db2安装以及DB2数据迁移操...
opensuse linux环境下ibm_websphere和ibm_db2安装 ibm_websphere安装: 1.ibm官网下载免费版websphere,如下载文件名为BASETRIAL.age ...
- 【Chrome浏览器插件开发】浏览器插件运行机制02之实战开发出一款Google浏览器插件——含源码全部过程 (建议在Linux环境下)
一.浏览器插件配置文件 manifest.json入门 每个浏览器插件都有一个 JSON 格式的文件,叫做 manifest.json,里面提供了插件的描述信息. manifest.json 文件本质 ...
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...
源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...
- linux环境下blastn命令怎么用,Linux环境下通配符及特殊符号使用详解
Linux环境下通配符及特殊符号使用详解 我们现在来介绍通配符的使用,通过通配符的过滤,快速找到想找的文件和目录,比如/etc/目录下有上千个目录和文件,不使用通配符想找一个目录和文件是非常麻烦的和花 ...
最新文章
- java算法例子_java算法小例子
- The Innovation | Volume 2 Issue3 正式出版
- mysql双主数据一致性_mysql双主复制的主备数据一致性知多少
- HTTP协议 ----响应消息
- kubernetes使用ansible快速构建集群
- u-boot移植第二弹——移植2012.10u-boot到RealARM210 cortex-A8开发板
- 交叉驰豫的影响因素_交叉滚子轴承系列吉林薄壁交叉滚子轴承用途博盈
- 书呆子rico_寻找设计和类型书呆子的清道夫
- Android 学习笔记 databinding简单使用:使用databinding在listview加入不同类型的view
- 关于Oracle数据库的SQL语句使用时的一些技巧。
- 5319. 删除回文子序列
- iOS 并发编程之 Operation Queues
- 计算机鼠标双击怎么,电脑鼠标双击变成属性的解决方法
- MATLAB学习笔记————(MATLAB的矩阵及其操作②)
- 不同尺度下耕地土壤Cr含量的空间自相关性分析
- 国内十大白银期货APP最新排名
- 关于国产化系统银河麒麟(Kylin)的问题记录--持续更新
- SVM中支持向量的通俗解释
- Kotlin+Retrofit + MVVM 的网络请求框架的封装
- 2021-2027全球与中国户外建筑用大理石市场现状及未来发展趋势