POSTGRESQL PSQL 命令中如何使用变量带入查询和函数

news2025/4/9 0:03:02

8e4aa8f1f6f2dadfe31c48e514f0adef.png

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共820人左右 1 + 2 + 3)新人会进入3群,进瑞典马工群的单独说。

最近有人问,想通过SHELL 来传入变量到 PSQL的SQL 语句中,如何去撰写,因为他写的程序老是有问题。PSQL 命令中被经常DISS的问题除了不能带有密码外,就是这个问题了,变量。

怎么在PSQL 外部将变量设置,并传入到POSTGRESQL命令行内,我们做一个例子:

psql -X -v a=b 

\echo THE VALUE OF VAR a IS :a

f422aec41989d50607d778627985bcf6.png

 psql -X --set=a=c

8b9f058d8cc5f3ed8fb32572b46bb211.png

举例:我们想将多个字段传入到PG内,可以将多个值进行引号设置即可

[postgres@pg_qixun ~]$ psql -X -v a='postgresql EDB enterprise database'

psql (14.7)

Type "help" for help.

postgres=# \echo The variable a is :a

The variable a is postgresql EDB enterprise database

2c2e41f7768015021d1b563f54e43d58.png

下面我们举一个复杂的例子

我们的变量在一个文本中,而我们要执行的脚本在另一个文件中

psql -x -v a="$( cat file.txt )" -f show.sql

3ee6ee93cec0d6f224615919aba9413f.png

而如果你有一个更复杂的执行方式,如同下面的这个例子

[postgres@pg_qixun ~]$ cat show.sql 

select * from :a limit 1;

:b

[postgres@pg_qixun ~]$ psql -X -v a="$( cat file.txt )" -v b='select version();' -f show.sql

  oid  | datname  | datdba | encoding | datcollate  |  datctype   | datistemplate | datallowconn | datconnlimit | datlastsysoid | dat

frozenxid | datminmxid | dattablespace | datacl 

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

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

 13892 | postgres |     10 |        6 | en_US.UTF-8 | en_US.UTF-8 | f             | t            |           -1 |         13891 |    

     1201 |          1 |          1663 | 

(1 row)

                                                 version                                                 

---------------------------------------------------------------------------------------------------------

 PostgreSQL 14.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit

(1 row)

6252d0a1923d66edc6387e04c1019388.png

c6ff04e6ab88112fe280677a6507a490.png

[postgres@pg_qixun ~]$ psql -X -v a=1 -v b=2 -v c=3 -v d=4  -f show.sql

 datname  

----------

 postgres

(1 row)

  datname  

-----------

 postgres

 dvdrental

(2 rows)

  datname  

-----------

 postgres

 dvdrental

 template1

(3 rows)

  datname  

-----------

 postgres

 dvdrental

 template1

 template0

(4 rows)

[postgres@pg_qixun ~]$ cat show.sql 

select datname from pg_database limit :a;

select datname from pg_database limit :b;

select datname from pg_database limit :c;

select datname from pg_database limit :d;

以上为将变量带入查询中的一些简单的操作,而在POSTGRESQL 有一部分情况是通过将变量带入到函数中的,我们下面举一个例子来看看如何将变量带入到函数,我们简单的写一个函数,来进行当前PG实例中有多少数据库的一个计算,但是我们查询的是符合我们要求的PG的数据库的数量,或者判断符合我们名字要求的PG是否存在于

CREATE OR REPLACE FUNCTION count_db(IN var_b varchar(20)) RETURNS INT8 AS $$

DECLARE

    v_int INT4;

BEGIN

    SELECT COUNT(*) INTO v_int FROM pg_database WHERE datname like var_b;

    RETURN v_int;

END;

$$ LANGUAGE plpgsql;

707821fa58d69f4df65f086a7f8d4679.png

然后我们从外部来调用这个函数并赋予变量

方法1  失败

[postgres@pg_qixun ~]$ psql -X -v a=postgres%   -c 'select count_db(:a)'

ERROR:  syntax error at or near ":"

LINE 1: select count_db(:a)

10548d4cad546cdbfc79e8b588668722.png

方法2 失败

psql -X -v a="postgres%"   -c 'select count_db(:a)'

ERROR:  syntax error at or near ":"

LINE 1: select count_db(:a)

3bc15b596521d0431b946d2df4ba0bfd.png

方法3 失败

[postgres@pg_qixun ~]$ psql -X -v a="postgres%"   -f show.sql

psql:show.sql:1: error: invalid command \SET

psql:show.sql:2: ERROR:  syntax error at or near ")"

LINE 1: SELECT count_db(postgres%);

[postgres@pg_qixun ~]$ cat show.sql 

\SET a postgres%

SELECT count_db(:a);

ffdfa6973b09fea2d06d30502ff217bb.png

后面又试过  4 5 6 7 8 种方案,均有问题。

最后经过查阅,如果要在外部调用函数,给出变量是不能单独写语句的,而是要用其他的方式来代替 -c  或 -f  调用命令的方式 ,具体的写法如下:

 psql -X -v a="'postgres'" <<< 'select count_db(:a);'

8c5ece6e2dd54fe47080a26749eb9f17.png

a6b5b4da37e3d01e3c017182fc067a6a.png

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

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

相关文章

chatgpt赋能python:Python如何删除已经写好的代码?

Python如何删除已经写好的代码&#xff1f; 在编程中&#xff0c;大多数时候写出来的代码都是需要保留的。但是&#xff0c;随着项目的发展和需求的变化&#xff0c;有些代码可能就没有用了。这时&#xff0c;我们需要删除这些无用的代码&#xff0c;以保持程序的简洁性和效率…

Nginx、location匹配、Rewrite重写模块

Nginx、location匹配、Rewrite重写模块 一、常用的Nginx正则表达式二、location匹配概述1、location大致可以分为三类2、location常用的匹配规则3、location 优先级4、location 示例说明5、实际网站使用中&#xff0c;至少有三个匹配规则定义 三、rewrite重写1、rewrite 跳转场…

记录--JavaScript 中有趣的 9 个常用编码套路

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 1️⃣ set对象&#xff1a;数组快速去重 常规情况下&#xff0c;我们想要筛选唯一值&#xff0c;一般会想到遍历数组然后逐个对比&#xff0c;或者使用成熟的库比如lodash之类的。 不过&#xff0c;ES…

Spark RDD分区

文章目录 一、RRD分区&#xff08;一&#xff09;RDD分区概念&#xff08;二&#xff09;RDD分区作用 二、RDD分区数量&#xff08;一&#xff09;RDD分区原则&#xff08;二&#xff09;影响分区的因素&#xff08;三&#xff09;使用parallelize()方法创建RDD时的分区数量1、…

软件测试之环境搭建—苏汽web系统测试环境搭建

一、搭建环境的准备工作 1、安装好RedHat&#xff0c;输入用户名&#xff1a;root&#xff0c;密码&#xff1a;123456&#xff0c;右键点击桌面&#xff0c;打开终端输入“ifconfig”查询IP地址 2.打开xshell&#xff0c;点击文件&#xff0c;选择新建连接&#xff0c;在输入…

【数据分析之道-Matplotlib(七)】Matplotlib直方图

文章目录 专栏导读1、hist()基本语法2、使用 hist() 函数绘制多个数据组的直方图3、修改直方图的颜色及边框颜色4、六一儿童节为主题&#xff0c;使用直方图进行可视化 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN Python领域新星创作者&#xff0c;专注于分享pyth…

POI报表的高级应用

POI报表的高级应用 掌握基于模板打印的POI报表导出理解自定义工具类的执行流程 熟练使用SXSSFWorkbook完成百万数据报表打印理解基于事件驱动的POI报表导入 模板打印 概述 自定义生成Excel报表文件还是有很多不尽如意的地方&#xff0c;特别是针对复杂报表头&#xff0c;单元格…

我们世界中的10个算法

下面的图表展示了我们日常生活中最常用的算法。它们被应用在互联网搜索引擎、社交网络、WiFi、手机甚至卫星等各个领域。 1.排序算法 排序算法用于将一组数据按照特定的顺序进行排列。它们被广泛应用于各种场景&#xff0c;如搜索引擎中的搜索结果排序、数据分析中的数据整理和…

转转前端周刊第六十八期

转转前端周刊 本刊意在将整理业界精华文章给大家&#xff0c;期望大家一起打开视野 如果你有发现一些精华文章想和更多人分享&#xff0c;可以点击我们的公众号名称&#xff0c;将文章链接和你的解读文案发给我们&#xff01;我们会对内容进行筛选和审核&#xff0c;保留你的推…

基于TensorFlow Object Detection API实现RetinaNet目标检测网络(附源码)

文章目录 一、RetinaNet简介1. Backbone网络2. FPN网络 二、RetinaNet实现1. tf.train.CheckPoint简介2. RetinaNet的TensorFlow源码 一、RetinaNet简介 RetinaNet是作者Tsung-Yi Lin和Kaiming He于2018年发表的论文Focal Loss for Dense Object Detection中提出的网络。Retina…

运维小白必学篇之基础篇第十六集:DNS架构FTP实验

DNS架构FTP实验 目录 DNS架构FTP实验 服务端 客户端 服务端 在ftp架构了安装dns域名服务 yum -y install bind 配置主配置文件 vim /etc/named.conf listen-on port 53 { 192.168.50.1; }; allow-query { 192.168.50.0/24; }; 配置区域文件 vim /etc/named.rfc1912.zones…

深聊丨“紫东太初”大模型背后有哪些值得细读的论文(一)

原创&#xff1a;谭婧 没有人想等待&#xff0c;没有人想落伍。 新鲜论文时兴火热&#xff0c;成为大模型发展迅猛的标志之一&#xff0c;人们用“刷论文”这个游荡意味的动词替代另一个颇为严肃的动作&#xff0c;“读论文”。 论文被当作“教材”和“新知识”&#xff0c;在a…

矢量网络分析仪RS罗德与施瓦ZNB8 9KHZ至8.5GHZ德国二手

Rohde & Schwarz ZNB8网络分析仪&#xff0c;8.5 GHz&#xff0c;2 或 4 端口 ​罗德与施瓦茨 ZNB8 Rohde & Schwarz ZNB8 矢量网络分析仪具有高达 140 dB&#xff08;10 Hz IF 带宽&#xff09;的宽动态范围、低于 0.004 dB RMS&#xff08;10 kHz IF 带宽&#xff…

React--Component组件浅析

目录 一 前言二 什么是React组件&#xff1f;三 二种不同 React 组件1 class类组件2 函数组件 四 组件通信方式五 组件的强化方式六 总结 一 前言 在 React 世界里&#xff0c;一切皆组件&#xff0c;我们写的 React 项目全部起源于组件。组件可以分为两类&#xff0c;一类是类…

驱动开发:内核扫描SSDT挂钩状态

在笔者上一篇文章《驱动开发&#xff1a;内核实现SSDT挂钩与摘钩》中介绍了如何对SSDT函数进行Hook挂钩与摘钩的&#xff0c;本章将继续实现一个新功能&#xff0c;如何检测SSDT函数是否挂钩&#xff0c;要实现检测挂钩状态有两种方式&#xff0c;第一种方式则是类似于《驱动开…

【Unity-UGUI控件全面解析】| Layout自动布局组件详解

🎬【Unity-UGUI控件全面解析】| Layout自动布局组件详解一、组件介绍二、组件属性面板2.1 布局元素 (Layout Element)2.2 水平布局组 (Horizontal Layout Group)2.3 垂直布局组 (Vertical Layout Group)2.4 网格布局组 (Grid Layout Group)三、代码操作组件四、组件常用方法示…

把 AI 装进即时通讯,会发生什么?

今年以来&#xff0c;AIGC 技术以“天”为单位快速进化&#xff0c;刷足了存在感。科技公司迅速将 AI 嵌入自家的产品中&#xff0c;追逐 AI 带来的生产力变革&#xff0c;解决日益复杂的需求。从文学到音乐&#xff0c;从绘画到编程&#xff0c;无一领域不受其影响。 在这些领…

网络编程(1)

获取本网络信息相关接口 接口说明&#xff1a; QHostInfo类为主机信息&#xff0c;为主机名查找提供静态函数 QHostAddress类为主机地址类&#xff0c;管理IPV4或IPV6地址信息。 QNetworkInterface类为网络接口类&#xff0c;提供主机IP地址和网络接口的列表。 QNetworkAd…

关于人生,爱情和事业,谈谈我的人类史观(视频在最后)

前几天在知乎上回答了一个问题&#xff0c;没想到一下子好像火了&#xff0c;评论超过五百&#xff0c;也有各种质疑&#xff0c;其中有一个人的问题我觉得值得探讨&#xff0c;因为在回答中&#xff0c;我写下了一段也许值得留存的文字。 视频里面有更多的内容的扩展&#xff…

2023智源大会议程公开丨具身智能与强化学习论坛

6月9日&#xff0c;2023北京智源大会&#xff0c;将邀请这一领域的探索者、实践者、以及关心智能科学的每个人&#xff0c;共同拉开未来舞台的帷幕&#xff0c;你准备好了吗&#xff1f;与会知名嘉宾包括&#xff0c;图灵奖得主Yann LeCun、图灵奖得主Geoffrey Hinton、OpenAI创…