【PostgreSQL灵活使用psql执行SQL的一些方式】

一、psql执行SQL并使用选项灵活输出结果

可以不进入数据库,在命令行,使用psql 的-c选项跟上需要执行的SQL。来获取SQL的执行结果

postgres@ubuntu-linux-22-04-desktop:~$ psql -c "select 1,2" ?column? | ?column?
----------+----------1 |        2
(1 row)//同一个 -c的引号里是同一个事务,多个-c分别是不同的事物postgres@ubuntu-linux-22-04-desktop:~$ psql -c "select txid_current(); select txid_current();" -c "select txid_current();"txid_current
--------------1865
(1 row)txid_current
--------------1865
(1 row)txid_current
--------------1866
(1 row)

可以使用psql的选项对查询结果进行一些处理

//-A设置非对齐输出模式,加上-A后输出格式变得不对齐了,并且返回结果中没有空行
postgres@ubuntu-linux-22-04-desktop:~$ psql -c "select 1,2" -A
?column?|?column?
1|2
(1 row)// -t只显示数据,不显示表头和返回行数,但是有空行
postgres@ubuntu-linux-22-04-desktop:~$ psql -c "select 1,2" -t1 |        2//-t和-A两个同时加,则没有空行,非对齐输出
postgres@ubuntu-linux-22-04-desktop:~$ psql -c "select 1,2" -tA
1|2//可以使用-F更改分割符
postgres@ubuntu-linux-22-04-desktop:~$ psql -c "select 1,2" -tA -F ,
1,2//-q不显示输出信息。默认情况下psql执行命令是会返回多种信息,使用-q参数后将不显示这些信息
//-q选项通常和-c和-f一起使用,在维护操作中非常有用,当输出信息不重要时,这个特性非常重要

二、特殊字符转义问题

有时候如果想执行的SQL涉及到一些特殊字符,原本的-c可能执行涉及到转义的问题,这种情况,可以借助psql<<EOF < exec SQL> EOF这种来避免特殊字符转义问题。

postgres@ubuntu-linux-22-04-desktop:~$ psql -c "select * from  pg_stat_activity where query !~ 'COPY' and wait_event like '%BgWriterMain%'"
-bash: !~: event not foundpostgres@ubuntu-linux-22-04-desktop:~$ psql <<EOF
select * from  pg_stat_activity where query !~ 'COPY' and wait_event like '%BgWriterMain%'
EOFdatid | datname | pid  | leader_pid | usesysid | usename | application_name | client_addr | client_hostname | client_port |         backend_start
| xact_start | query_start | state_change | wait_event_type |  wait_event  | state | backend_xid | backend_xmin | query_id | query |   backend_type
-------+---------+------+------------+----------+---------+------------------+-------------+-----------------+-------------+-------------------------------+------------+-------------+--------------+-----------------+--------------+-------+-------------+--------------+----------+-------+-------------------|         | 2039 |            |          |         |                  |             |                 |             | 2024-02-01 13:41:00.395458+08 |            |             |              | Activity        | BgWriterMain |       |             |              |          |       | background writer
(1 row)

三、其他执行方式(psql结合管道符和echo)

postgres@ubuntu-linux-22-04-desktop:~$  echo '\encoding SQL-ASCII \\ SELECT relname, relnamespace FROM pg_class LIMIT 1;' | psqlrelname    | relnamespace
--------------+--------------pg_statistic |           11
(1 row)postgres@ubuntu-linux-22-04-desktop:~$ echo 'SELECT relname, relnamespace FROM pg_class LIMIT 1;'  'select txid_current();' 'select txid_current();'|psqlrelname    | relnamespace
--------------+--------------pg_statistic |           11
(1 row)txid_current
--------------1861
(1 row)txid_current
--------------1862
(1 row)//如果使用这种方式显式开启了事务,需要最后加上一个commit来提交事务,否则事务不会自动提交,执行之后自动回滚。postgres@ubuntu-linux-22-04-desktop:~$ echo 'begin;' 'select * from tab_test_1;' 'select txid_current();' 'insert into tab_test_1 values(1);' 'select txid_current();'|psql
BEGINid
----
(0 rows)txid_current
--------------1893
(1 row)INSERT 0 1txid_current
--------------1893
(1 row)postgres@ubuntu-linux-22-04-desktop:~$ psql -c "select * from tab_test_1"id
----
(0 rows)postgres@ubuntu-linux-22-04-desktop:~$ echo 'begin;' 'select * from tab_test_1;' 'select txid_current();' 'insert into tab_test_1 values(1);' 'select txid_current();' 'commit'|psql
BEGINid
----
(0 rows)txid_current
--------------1894
(1 row)INSERT 0 1txid_current
--------------1894
(1 row)COMMIT
postgres@ubuntu-linux-22-04-desktop:~$ psql -c "select * from tab_test_1"id
----1
(1 row)

四、交互式执行SQL或者脚本,逐步检查

执行SQL或者SQL脚本时候带上 --single-step或者-s 选项,可以交互式地运行它,同时逐行检查 SQL 文件的内容。这对于脚本调试和演示很有用。

回车表示执行SQL,x表示不执行SQL。

交互单步执行SQL,每一个-c 相当于一步

postgres@ubuntu-linux-22-04-desktop:~$ psql -c "select 1" -c "select 2" -s
***(Single step mode: verify command)*******************************************
select 1
***(press return to proceed or enter x and return to cancel)********************?column?
----------1
(1 row)***(Single step mode: verify command)*******************************************
select 2
***(press return to proceed or enter x and return to cancel)********************
x

交互单步执行SQL脚本。

postgres@ubuntu-linux-22-04-desktop:~$ cat check.sql
select 1;
select now();
select 2;
select now();postgres@ubuntu-linux-22-04-desktop:~$ psql -s -f check.sql
***(Single step mode: verify command)*******************************************
select 1;
***(press return to proceed or enter x and return to cancel)********************?column?
----------1
(1 row)***(Single step mode: verify command)*******************************************
select now();
***(press return to proceed or enter x and return to cancel)********************now
-------------------------------2024-02-01 14:39:40.523424+08
(1 row)***(Single step mode: verify command)*******************************************
select 2;
***(press return to proceed or enter x and return to cancel)********************
x
***(Single step mode: verify command)*******************************************
select now();
***(press return to proceed or enter x and return to cancel)********************
x

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/664347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Swift Vapor 教程(CURD 操作)

接上篇使用 Swift Vapor 对数据库进行简单的操作。 下面会使用一个稍微简单的方式进行 CURD 操作 import Fluent import Vaporstruct SongController: RouteCollection {func boot(routes: Vapor.RoutesBuilder) throws {let songs routes.grouped("songs")// GET…

tengine ngx_http_upstream_dynamic_module 动态域名解析功能的代码详细解析

tengine ngx_http_upstream_dynamic_module 动态域名解析功能的代码详细解析 1. 为什么需要域名动态解析2. 配置指令3. 加载模块3. 源码分析3.1 指令解析3.2 upstream负载均衡算法的初始化3.3 upstream负载均衡上下文的初始化3.4 获取upstream的服务器地址3.5 域名解析回调处理…

【Boost】:parser代码的基本结构(二)

parser代码的基本结构 一.总体概述二. EumeFile的实现三.ParserHtml的实现四.SaveHtml实现五.完整源代码 打开parser.cc,用vscode或者vim都行。 一.总体概述 首先递归式的把文件名和路径读入一个数组内&#xff0c;接着把数组内的每一个数据按照一定的格式进行划分&#xff0c;…

创建型模式-单例模式:定义、实现及应用

目录 一、模式定义二、针对问题1.解决的问题2.解决方案3.举个例子4.设计模式适合场景5.实现方式6.优缺点7.与其他模式的关系 三、代码实现 一、模式定义 单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型模式&#xff0c;用于限制某个类只能创建一个对象。它提…

大数据信用报告查询费用一般要多少钱?

一些不少朋友在申贷的时候被拒贷之后&#xff0c;得到的原因就是因为大数据不良被拒&#xff0c;这时候很多人都反过来查询自己的大数据信用报告&#xff0c;而查询的价格也是不少朋友都比较关注的&#xff0c;那大数据信用报告查询费用一般要多少钱呢?下面本文就为你介绍一下…

码农也得“开口说话”

咱们程序员兄弟们有时候被大家贴上了“闷葫芦”的标签&#xff0c;好像我们只适合跟电脑谈恋爱&#xff0c;不爱搭理人似的。不过今儿咱要说的是&#xff0c;码农界的大神可不只是会敲代码那么简单&#xff0c;会聊天、懂合作那也是必不可少的生存法则&#xff01; 一、内向也…

vue3中如何实现图片的压缩

首先&#xff0c;为什么需要进行图片压缩&#xff1a; 减少页面加载时间&#xff1a;因为图片是页面中常见的资源之一&#xff0c;较大的图片会增加页面的加载时间&#xff0c;影响用户体验&#xff0c;压缩图片可以减小图片的文件大小&#xff0c;提升页面加载速度。节省网络…

App ICP备案获取iOS和Android的公钥和证书指纹

依照《工业和信息化部关于开展移动互联网应用程序备案工作的通知》&#xff0c;向iOS和安卓平台提交App时需要先提交ICP备案信息。 iOS平台&#xff1a; 1、下载appuploader工具&#xff1a;Appuploader home -- A tool improve ios develop efficiency such as submit ipa to…

vue yarn certificate has expired

背景&#xff1a;我在用ant design pro框架进行初始化时&#xff0c;安装脚手架时&#xff0c;安装yarn时显示报错 原因分析&#xff1a;查了很久的资料&#xff0c;这种情况应该是开了服务器代理访问导致ssl安全证书失效了 解决办法&#xff1a; 在终端输入&#xff1a;yarn…

【MybatisPlus篇】查询条件设置(范围匹配 | 模糊匹配 | 空判定 | 包含性判定 | 分组 | 排序)

文章目录 &#x1f384;环境准备⭐导入依赖⭐写入User类⭐配置启动类⭐创建UserDao 的 MyBatis Mapper 接口&#xff0c;用于定义数据库访问操作⭐创建配置文件&#x1f6f8;创建测试类MpATest.java &#x1f354;范围查询⭐eq⭐between⭐gt &#x1f354;模糊匹配⭐like &…

使用ngrok内网穿透

没有服务器和公网IP&#xff0c;想要其他人访问自己做好的网站&#xff0c;使用这款简单免费的内网穿透小工具——ngrok&#xff0c;有了它轻松让别人访问你的项目~ 一、下载ngrok 官网地址&#xff1a;ngrok | Unified Application Delivery Platform for Developers&#x…

Redis(十一)单线程VS多线程

文章目录 概述为何选择单线程主要性能瓶颈多线程特性和IO多路复用概述Unix网络编程中的五种IO模型Blocking IO-阻塞IONoneBlocking IO-非阻塞IOIO multiplexing-IO多路复用signal driven IO-信号驱动IOasynchronous IO-异步IO 场景&#xff1a;引出epoll总结 开启Redis多线程其…

2022美国大学生数学建模(优秀获奖论文)-A题:Power Planning Model: Magic Weapon for Cyclists

目录 Summary 1 Introduction 1.1 Background 1.2 Restatement of the Problem 1.3 Our Work 2 Assumptions and Justifification 3 Notations

ADB的配置和使用及刷机root

ADB的配置和使用 ADB即Android Debug Bridge&#xff0c;安卓调试桥&#xff0c;是谷歌为安卓开发者提供的开发工具之一&#xff0c;可以让你的电脑以指令窗口的方式控制手机。可以在安卓开发者网页中的 SDK 平台工具页面下直接下载对应系统的 adb 配置文件&#xff0c;大小只…

115.工业相机海康SDK开发指南(阅读)

一、SDK初始化 包含初始化SDK和反初始化SDK接口。&#xff08;由于看不到函数内部的具体实现&#xff0c;因此以下的解释仅代表个人的理解&#xff09; 函数说明 MV_CAMCTRL_API int __stdcall MV_CC_Initialize()//初始化SDK 初始化SDK 成功&#xff0c;返回MV_OK&#xff1b…

Qt-互斥量-临界区-QMutex-QMutexLocker-QReadWriteLock

文章目录 1.QMutex2.QMutexLocker3.QReadWriteLock 在Qt中&#xff0c;互斥量&#xff08;Mutex&#xff09;是用于同步多线程访问共享资源的一种机制。临界区&#xff08;Critical Section&#xff09;是指一段必须由单个线程执行的代码区域&#xff0c;防止多个线程同时执行这…

Apache Doris 整合 FLINK CDC + Iceberg 构建实时湖仓一体的联邦查询

1概况 本文展示如何使用 Flink CDC Iceberg Doris 构建实时湖仓一体的联邦查询分析&#xff0c;Doris 1.1版本提供了Iceberg的支持&#xff0c;本文主要展示Doris和Iceberg怎么使用&#xff0c;大家按照步骤可以一步步完成。完整体验整个搭建操作的过程。 2系统架构 我们整…

【Spring连载】使用Spring Data访问Redis(三)----连接模式

【Spring连载】使用Spring Data访问Redis&#xff08;三&#xff09;----连接模式Connection Modes 一、Redis Standalone二、向Master写入&#xff0c;从Replica读取三、Redis Sentinel四、Redis Cluster Redis可以在各种设置中运行。每种操作模式都需要特定的配置&#xff0c…

Vue打包Webpack源码及物理路径泄漏问题解决

修复前&#xff1a; 找到vue.config.js文件&#xff0c;在其中增加配置 module.exports {productionSourceMap: false,// webpack 配置configureWebpack: {devtool: false,}}其中打包的物理路径泄露我这边试了好多次&#xff0c;发现只有打包的时候NODE_ENVproduction 才能保…

Vue中的计算属性和侦听器(监视器)

一、computed计算属性 1.概念 基于现有的数据&#xff0c;计算出来的新属性。 依赖的数据变化&#xff0c;自动重新计算。 2.语法 声明在 computed 配置项中&#xff0c;一个计算属性对应一个函数 使用起来和普通属性一样使用 {{ 计算属性名}} 3.注意 computed配置项和da…