gpt4 book ai didi

postgresql - 在 PostgreSQL 中获取过程的多个结果集

转载 作者:行者123 更新时间:2023-11-29 12:15:23 25 4
gpt4 key购买 nike

我的要求是我想创建一个通用函数,我可以在其中传递任何其他函数及其参数,并且它应该返回适​​当的输出(即它可能是一个表结果或单个结果等)并且它应该与 in那里有一个声明。

这是我搜索和尝试过的内容,但我不想运行任何多个语句。

CREATE FUNCTION CustomerWithOrdersByState() RETURNS SETOF refcursor AS $$
DECLARE
ref1 refcursor; -- Declare cursor variables
ref2 refcursor;
BEGIN
OPEN ref1 FOR SELECT * FROM "table1" limit 10;
RETURN NEXT ref1;

OPEN ref2 FOR SELECT * FROM "table2" limit 10;
RETURN NEXT ref2;

END;
$$ LANGUAGE plpgsql;

============================================= ===================

    begin;
select * from CustomerWithOrdersByState();
FETCH ALL FROM "<unnamed portal 31>";
-- FETCH ALL FROM "<unnamed portal 30>";
commit;

我正在使用 Postgres 11.4 版本..

最佳答案

我有一个我认为是类似的问题,我想要一种方法来在单个批处理中执行具有多个结果集的脚本。

如上所述,PGAdmin4(以及我尝试过的许多其他客户端)似乎一次只能处理一个命令,这意味着您必须选择一行,执行,选择下一个,执行...等等.

我发现一种似乎有效的快速方法是将脚本保存为单个文件,然后通过 PSQL 在 CLI 上执行它。

例如,我创建了一个名为 myscript.sql 的文件,如下所示:

DROP TABLE IF EXISTS sampledata;
CREATE TABLE if not exists sampledata as select x,1 as c2,2 as c3, md5(random()::text) from generate_series(1,5) x;
CREATE OR REPLACE FUNCTION GET_RECORDS(ref refcursor) RETURNS REFCURSOR AS $$
BEGIN
OPEN ref FOR SELECT * FROM SAMPLEDATA; -- OPEN A CURSOR
RETURN ref; -- RETURN THE CURSOR TO THE CALLER
END;
$$ LANGUAGE PLPGSQL;



/*
In PGManage, you would need to execute this commands one at a time (ie, 4 times).
*/
BEGIN;
SELECT get_records('r1');
FETCH ALL IN "r1";
COMMIT;

然后我创建了一个 bash 脚本 (runscript.sh),它允许轻松执行不同的文件。

#!/bin/bash
# Can be used to execute scripts.
# Like this ./runfile.sh hello.sql
psql -U xuser -d postgres < "$1"

我将脚本设置为可执行:

chmod a+x runscript.sh

然后执行如下:

./runscript.sh myscript.sql

脚本执行,我在 CLI 中看到了结果。我可以快速迭代文件,保存它并在 shell 中执行它。

关于postgresql - 在 PostgreSQL 中获取过程的多个结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57147115/

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