gpt4 book ai didi

postgresql - 使用逗号分隔输入从 Postgresql 中的 View 获取数据

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

创建了一个 View ,我的输入将以逗号分隔,输入只包含 View 的列名。

我的输入是 '"Name","Description"' 这样的。

我试过这样

Select unnest(string_to_array('"Name","Description"',',')) 
From my_test_view

不幸的是我得到了这样的结果

"Name"
"Description"
"Name"
"Description"

这只选择了我的列名。我需要带有列值的 json 输出。我的输入是动态的

最佳答案

实际上,您要做的是在 View 上动态使用标识符来选择数据。您需要编写一个 PL/pgSQL 函数来执行此操作。

如果您信任输入数据(即您确定输入仅包含以逗号分隔的列名称),那么解决方案非常简单:

CREATE FUNCTION my_test_view_dynamic(columns text) RETURNS SET OF my_test_view AS $$
BEGIN
RETURN QUERY EXECUTE format('SELECT %s FROM my_test_view', columns);
END;
$$ LANGUAGE plpgsql STABLE STRICT;

如果您不太确定the sanity of the input data ,先检查一下:

CREATE FUNCTION my_test_view_dynamic(columns text) RETURNS SET OF my_test_view AS $$
DECLARE
c text;
safe_names text[] := '{}'::text[];
BEGIN
FOREACH c IN ARRAY regexp_split_to_array(columns, ',') LOOP
safe_names := safe_names || quote_identifier(c);
END LOOP;
RETURN QUERY EXECUTE format('SELECT %s FROM my_test_view', concat_ws(safe_names, ','));
END;
$$ LANGUAGE plpgsql STABLE STRICT;

然后这样调用:

SELECT * FROM my_text_view_dynamic('"Name","Description"');

关于postgresql - 使用逗号分隔输入从 Postgresql 中的 View 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40967286/

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