gpt4 book ai didi

postgresql - 如何从 psql 查询将文本打印到标准输出?

转载 作者:行者123 更新时间:2023-12-05 02:20:54 29 4
gpt4 key购买 nike

我从 bash shell 调用了以下(经过处理的)psql 脚本:

foo=$( psql -q -t -R $'\x01' -F $'\x02' \
--variable="title=something" \
--variable="severity=level9" \
--pset='format=unaligned' \
<<'EOF'
SET standard_conforming_strings=on;
SET myvars.title = :title;
SET myvars.severity = :severity;
DO $$
BEGIN
IF EXISTS ( SELECT 1 from my_database
WHERE title=current_setting('myvars.title') \
AND severity=current_setting('myvars.severity') )
THEN
RAISE NOTICE 'Found existing entry';
ELSE
RAISE NOTICE 'Did not find existing entry';
END IF;
END;
$$;
EOF
)

我希望在 bash 变量“foo”中捕获查询是否成功的一些指示。我想我可以在每个 RAISE NOTICE 语句之后添加某种 print/echo/return/whatever 语句,以从 psql 语句输出 0 或 1,以便它可以在 foo< 中捕获 用于稍后在 bash 脚本中进行评估,例如:

foo=$( psql -q -t -R $'\x01' -F $'\x02' \
--variable="title=something" \
--variable="severity=level9" \
--pset='format=unaligned' \
<<'EOF'
SET standard_conforming_strings=on;
SET myvars.title = :title;
SET myvars.severity = :severity;
DO $$
BEGIN
IF EXISTS ( SELECT 1 from my_database
WHERE title=current_setting('myvars.title') \
AND severity=current_setting('myvars.severity') )
THEN
RAISE NOTICE 'Found existing entry';
magical_incantation 1;
ELSE
RAISE NOTICE 'Did not find existing entry';
magical_incantation 0;
END IF;
END;
$$;
EOF
)

在过去的 5 个小时里,我一直在阅读 psql 文档,但无法理解我上面想象的 magical_incantation 的命令/语法。

我是 psql 的新手,正在调整别人的代码。我无法更改脚本的主要结构,我只需要一些方法来打印一个值。

谁能指出我正确的方向?

最佳答案

\echo 在 psql 中打印到标准输出。我认为 RAISE NOTICE 转到 stderr。

可以选择一个 psql 变量然后回显它。基本破败是在 How do you use script variables in PostgreSQL?

但是我不确定目前有什么方法可以将查询结果拉入变量。

假设这不是您正在寻找的答案只是一个 SELECT.

所以像这样:

SELECT (EXISTS (....))::int;
-- true is 1, false is 0

请注意,无法从 DO 语句中执行此操作,因此如果您需要从 plpgsql 中执行此操作,则必须实际创建一个函数。

关于postgresql - 如何从 psql 查询将文本打印到标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37800371/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com