创建一个视图,我的输入将以逗号分隔,输入仅包含视图的列名。
我的输入是'"Name","Description"'
。
我试过这个
Select unnest(string_to_array('"Name","Description"',','))
From my_test_view
不幸的是我得到了这样的结果
"Name"
"Description"
"Name"
"Description"
这只选择我的列名。我需要带有列值的json输出。我的输入是动态的
答案 0 :(得分:1)
实际上,您要做的是动态使用视图上的标识符来选择数据。你需要编写一个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"');