如果未在命令行上指定,则仅在 psql-script 中设置变量

2024-02-27

我想给option在命令行上为我的 psql 脚本指定一些变量。

 psql -v myVar=myValue

但是我发现无法在 sql 脚本本身中为这些变量提供默认值。语法:

\set MyVar defaultValue

覆盖值myValue在 psql 命令行上无条件指定。

有没有办法检查 psql 中是否设置了变量?


psql 不支持设置变量的默认值,但您可以使用解决方法来完成此操作。

这个 psql 命令:

\set myVar :myVar

如果该变量已通过 psql 设置,则不执行任何操作(这意味着 myVar 再次设置为其值),否则该变量将按字面意思设置为字符串:myVar.

使用这种情况和其他 psql 命令\gset,您实际上可以为 myVar 设置默认值。将其放在 sql 脚本的顶部:

\set myVar :myVar
-- now myVar is set to the string ':myVar' if was not already set.
-- Checking it using a CASE statement:
SELECT CASE 
  WHEN :'myVar'= ':myVar'
  THEN 'default_value' 
  ELSE :'myVar' 
END AS "myVar"  \gset -- < \gset call at end of the query

它似乎只适用于文本变量,但如果需要数字变量,可以转换为数字:

SELECT CASE 
  WHEN :'myVar'= ':myVar'
  THEN '10' 
  ELSE :'myVar' 
END::numeric AS "myVar"  \gset

\gset 如何工作:

\gset允许您根据选择查询的结果设置变量。结果变量的命名类似于列名,这就是您需要子句的原因AS "myVar"在查询末尾(如果您想使用大写字母的变量名称,请不要忘记双引号)。

例如命令:

SELECT 'hello' AS var1 \gset

设置变量var1 to hello,与

\set var1 hello

请参阅此处了解更多信息:http://www.postgresql.org/docs/9.4/static/app-psql.html http://www.postgresql.org/docs/9.4/static/app-psql.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果未在命令行上指定,则仅在 psql-script 中设置变量 的相关文章

随机推荐

  • 从 noflo 开始,从 nodejs 运行它

    我运行了一个简单的 noflo 示例来自诺弗洛 但我没有弄清楚 noflo 应该如何与节点和其他代码一起工作 起初我有这个 fbp 文件 In the graph we first need to define the nodes and
  • 非关联浮点加法示例

    我正在写一篇关于浮点数的文章 我在 Javascript 控制台中放入了一些简单的测试来尝试 我正在寻找非交换加法的示例 即 x y z z x y 如果您有一些有效的 x y z 值 谢谢 没有这样的例子 因为按照 IEEE 754 的定
  • 为什么在此示例中并行版本比顺序版本慢?

    在过去的几天里 我学习了一些关于并行性的知识 并且遇到了this http msdn microsoft com en us library dd460703 aspx例子 我将它与顺序 for 循环并排放置 如下所示 private st
  • Jenkins 作业窗口批量执行比 cmd.exe 中执行慢 20 倍

    我刚刚在 Windows 2012 Server o 上安装了 Jenkins 2 46 2 它作为系统服务运行 我创建了一个执行 Windows 批处理 bat 脚本来构建代码项目的作业 此批处理会执行 2 个 mingw32 make
  • 如何按数字对文件进行排序?

    我正在处理目录中的一些文件 需要对文件进行数字排序 我发现了一些关于排序的例子 特别是使用lambda模式 在wiki python org http wiki python org moin HowTo Sorting 我把它放在一起 i
  • 为什么 html5 视频循环每次迭代都会创建请求

    I have 禁用缓存勾选已删除 但每次视频循环迭代仍发出请求 仅在 chrome 上 What Initiator Otherchrome 检查器网络部分的意思是什么 第一次从主机加载视频 但之后所有请求都从主机加载Other 每次迭代视
  • SAPUI5图标存储在哪里?

    我有一个基于 SAPUI5 的应用程序 在其中使用 SAP 站点下图标的 url 设置按钮图标https sapui5 hana ondemand com iconExplorer html https sapui5 hana ondema
  • 将父元素替换为其内容

    我正在尝试做与这个问题类似 相同的事情 如何在JavaScript中仅删除父元素而不删除其子元素 https stackoverflow com questions 170004 how to remove only the parent
  • React router dom:路由和路由器根本不工作

    我对反应相当陌生 并尝试使用react router dom进行重定向 我按照文档做了所有事情 但我的代码似乎不起作用 我收到一条关于找不到元素的错误 我不明白是什么原因造成的 另外 我现在只是尝试使用地址栏访问该页面 而不是使用任何按钮或
  • Jquery datepicker beforeShowDay 初始化后

    当我在初始化后设置 beforeShowDay 时 它不起作用 dater datepicker dater datepicker beforeShowDay renderCalendarCallback 当我第一次更改并在 ShowDay
  • Laravel 从公共目录中删除目录

    如何从公用文件夹中删除目录 现在我尝试这个 Storage deleteDirectory directory 但这看起来在存储文件夹中 您可以使用Illuminate Filesystem Filesystem为了这 Laravel 提供
  • 消除作为模板参数传递的重载成员函数指针的歧义

    我正在尝试重新创建观察者模式我可以完美地将参数转发给观察者的给定成员函数 如果我尝试传递一个地址成员函数其中有多次覆盖 它无法根据参数推导出正确的成员函数 include
  • python的跨平台usb模块?

    我有兴趣在 python 中使用 USB 设备进行一些跨平台工作 关于可以执行此类操作的模块有任何提示或建议吗 我浏览了 SF 和 googlecode 但运气不佳 thanks ct PyUSB http pyusb berlios de
  • QPainterPath 与直线的交点(通过 x 求 QPainterPath y)

    我有 QPainterPath 我需要通过 x 找到 QPainterPath 的 y 坐标 我在 QPainterPath 中找到了 intersected 方法 因此 我创建了新的 QPainterPath 它是具有 x 坐标的从路径边
  • 如何使用java获取weka中的最近邻居

    我一直在尝试使用与 weka 机器学习库一起使用的 Ibk 最近邻算法 我知道如何对实例进行分类 但我想实现协同过滤功能 因此我需要实际获取最接近感兴趣对象的实际对象列表 在 weka 中我实际上该如何使用它的 java API 来做到这一
  • 在Erlang中如何获取客户端的ip和端口?

    在下面的代码中 服务器正在侦听端口 2345 接受客户端的连接后 它返回 ok Socket start gt ok Listen gen tcp listen 2345 binary packet 4 reuseaddr true act
  • 如何在继续之前等待经过dispatch_async?

    我正在执行一系列的dispatch async 我只想在它们全部完成后更新UI 问题是dispatch async 中的方法在单独的线程中调用某些内容 因此它会在数据完全加载之前返回 并且在加载所有内容之前调用dispatch group
  • PHP-正则表达式检查字符串是否有中文字符

    我有字符串 str我想检查它的内容是否有汉字 true false str 赕就可消垻 只有当所有方块都被消垻时才可以过关 你能帮我么 谢谢 阿德里安 您可以使用 unicode 字符类http www regular expression
  • 求解三次方程以找到曲线上距某点最近的点

    Ok 我有一个射弹 其位置定义为 a x initialX initialDX time a y initialY initialDY time 0 5 gravtiy time 2 我希望能够预测该射弹将与我的环境中的哪些障碍物发生碰撞
  • 如果未在命令行上指定,则仅在 psql-script 中设置变量

    我想给option在命令行上为我的 psql 脚本指定一些变量 psql v myVar myValue 但是我发现无法在 sql 脚本本身中为这些变量提供默认值 语法 set MyVar defaultValue 覆盖值myValue在