gpt4 book ai didi

postgresql - 将参数传递给 psql 程序脚本

转载 作者:行者123 更新时间:2023-11-29 13:02:51 25 4
gpt4 key购买 nike

我在 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 处收到语法错误,所以我不知道如何将一个简单的参数传递给这个脚本。欢迎提出建议

最佳答案

可能性很小,怎么办。匿名 block 与客户端环境相对隔离,因此参数化不是直观的 - 但它不是艰苦的工作。

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

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

关于postgresql - 将参数传递给 psql 程序脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24073632/

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