将参数传递给 psql 过程脚本

2024-04-28

我有一个循环命令脚本psql看起来像这样:

脚本.sql

DO $$DECLARE
    data_rec RECORD;
    r RECORD;
    r2 RECORD;
BEGIN
select mytables.data_id into data_rec from mytables where id = :arg1;

    FOR r IN select * from
    (select * from ...)
    LOOP
        FOR r2 IN select * from
        (...)
              LOOP
            ......
          END LOOP;
    END LOOP;
END$$;

我想通过arg1作为来自命令行的参数:

psql -h db.server.com -f script.sql -v arg1=1234 > foo.out

但我不断收到语法错误where id = :arg1,所以我不知道如何将一个简单的参数传递给这个脚本。欢迎提出建议


可能性很小,如何做。匿名块与客户端环境相对强烈地隔离,因此参数化并不直观 - 但这并不困难。

您可以使用服务器端会话变量。这些变量可以从两个环境访问。

postgres=# \set txt Ahoj
postgres=# set myvars.txt to :'txt'; -- fill server side variable
SET
postgres=# do $$ begin raise notice '%', current_setting('myvars.txt'); end;$$;
NOTICE:  Ahoj
DO

稍微复杂一点的例子

bash-4.1$ cat test.sh
echo "
set myvars.msgcount TO :'msgcount'; 
DO \$\$ 
BEGIN 
  FOR i IN 1..current_setting('myvars.msgcount')::int LOOP 
    RAISE NOTICE 'Hello';
  END LOOP; 
END \$\$" | psql postgres -v msgcount=$1


bash-4.1$ sh test.sh 10
SET
Time: 0.935 ms
NOTICE:  Hello
NOTICE:  Hello
NOTICE:  Hello
NOTICE:  Hello
NOTICE:  Hello
NOTICE:  Hello
NOTICE:  Hello
NOTICE:  Hello
NOTICE:  Hello
NOTICE:  Hello
DO
Time: 1.709 ms
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将参数传递给 psql 过程脚本 的相关文章

随机推荐

  • microsoft.visualbasic.fileio 不存在

    我使用 NET Framework 4 0 在 Visual Studio 2012 中构建 C Web 应用程序 我添加了 Microsoft VisualBasic 作为对该项目的引用 我在使用以下代码行时遇到问题 使用 Microso
  • 如何在同一活动中为底部导航和导航抽屉创建侦听器?

    这是我的java代码 public class HomeActivity extends AppCompatActivity implements NavigationView OnNavigationItemSelectedListene
  • 当Python只应附加到一个列表时,它附加到两个列表

    我有一个名为 团队 的列表 其中包含两个对象 这些对象是同一类的对象 并且它们都有一个 成员 列表 我将单独附加到这些列表中 请参阅 Fight AddParticipant 但我附加的两个参与者对象似乎最终出现在两个团队对象中 这是意外行
  • 不要使用静态转换进行算术转换(cpp-core-guidelines)

    msvc 的 cpp 核心指南代码分析器告诉我 警告 C26472 不要使用static cast用于算术转换 使用 大括号初始化 gsl narrow cast or gsl narrow 类型1 对于这个片段 static cast
  • 在 FFmpeg 中使用 -filter_complex amerge 时混合流

    我目前遇到 ffmpeg 及其过滤器之一的问题 我正在尝试将视频的 2 个音频流合并为一个 为此我尝试了这个命令 ffmpeg i home maniaplanet Videos ManiaPlanet 2014 08 21 20 09 1
  • JAX-WS 和 Guice 3

    是否有某种方法可以获取使用 JAX WS 创建的 SOAP Web 服务类 并使用 Guice 3 0 guice persist 事务或什至只是简单的依赖注入来注入它们 guiceyfruit 包提供了一个 GuiceManaged 注释
  • openssh-server 未在 Docker 容器中启动

    我有一个奇怪的问题 我无法 ssh 到具有 IP 地址的 docker 容器172 17 0 61 我收到以下错误 ssh 172 17 0 61 ssh connect to host 172 17 0 61 port 22 Connec
  • 如何让Python bs4在XML上正常工作?

    我正在尝试使用 Python 和 BeautifulSoup 4 bs4 将 Inkscape SVG 转换为某些专有软件的类似 XML 的格式 我似乎无法让 bs4 正确解析一个最小的示例 我需要解析器尊重自闭标签 处理 unicode
  • 值范围为 1 - 365 的正则表达式

    值范围为 1 365 的正则表达式是什么 尝试这个 1 9 d 12 d 2 3 0 5 d 36 0 5 起始锚点 和端锚 是匹配整个输入和 不仅仅是其中的一部分 是为了分组 是为了交替 1 9 d 火柴1 to 99 12 d 2 火柴
  • Sublime Text 3:如何将快捷方式绑定到特定文件扩展名?

    我想自定义快捷方式 但仅将它们应用于特定扩展 例如 jump to matching bracket gt works in JS files gt customly bound to ctrl m go to matching tag p
  • 在 C 中摆弄很多位

    我想使用二进制标志来表示 C 中的数学集合 其中 位 i 已设置 意味着 项目 i 在集合中 这很方便 因为 并集 和 交集 等操作实现起来很简单 和 但是 我希望我的集合能够包含超过 32 个项目 此外 我希望我的代码能够在 32 位和
  • 即使 cookie 在开发人员工具中列出且 httpOnly 标志设置为 false,访问 document.cookie 也会返回空字符串

    有时 访问时document cookie在登录页面中 我得到一个空字符串 即使 cookie 列在 Chrome 和 Firefox 开发者工具中 我感兴趣的 cookie 的 httpOnly 标志设置为 false 我感兴趣的 coo
  • 接收客户端返回的数据

    我使用套接字连接从服务器发送了一个缩放数组到客户端 它运行良好 现在我想将数据发送回服务器以在服务器中取消缩放 数据一次每行发送到客户端 因此我尝试将它们按顺序放回到名为 Final 的空数组中 这是服务器 py import socket
  • 应用程序负载均衡器的 SurgeQueueLength 等效项

    我希望为 AWS ECS 上运行的服务设置自动缩放 来自ECS弹性伸缩文档 https docs aws amazon com AmazonECS latest developerguide service auto scaling htm
  • 寻找支付网关[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一家支付网关公司 这样我们就可以避免繁琐的 PCI DSS 认证及其相关费用 我现在就解决这个
  • 向 yii2 活动记录模型添加不在数据库中的属性

    我有一个 mySQL 数据库 其中有一个表videos和两列 开始时间 and end time 其格式为2017 01 24 15 38 11 我有一个活动记录模型Videos延伸 yii db ActiveRecord我想添加一些数据库
  • PHP上传图片

    好吧 我在这方面投入了很多时间 我是 PHP 编程新手 并试图掌握基础知识 但我有点迷失 因为昨晚我能够获得一个 PHP 表单来将基本数据 如名称地址和其他内容 上传到我的 MySQL 服务器 但今天我说让我们进行下一步 将图像发送到服务器
  • 使用 Servlet 启动 VLC HTTP Stream 时出现问题

    我正在为自己开发一个 VLC 项目 我的目标是创建一个 HTML 前端来启动流 我通过使用 Java Servlet 来完成此操作 概述 乌班图13 04 Java 7 21 冰茶 2 3 9 Eclipse JAVAEE IDE 雄猫7
  • 汇编语言中的全局_start是什么?

    这是我的汇编级代码 section text global start start mov eax 4 mov ebx 1 mov ecx mesg mov edx size int 0x80 exit mov eax 1 int 0x80
  • 将参数传递给 psql 过程脚本

    我有一个循环命令脚本psql看起来像这样 脚本 sql DO DECLARE data rec RECORD r RECORD r2 RECORD BEGIN select mytables data id into data rec fr