使用逗号分隔输入从Postgresql中的视图获取数据

使用逗号分隔输入从Postgresql中的视图获取数据,postgresql,Postgresql,创建视图时,我的输入将以逗号分隔,输入仅包含视图的列名 我的输入是这样的“名称”、“说明” 我试过这样做 Select unnest(string_to_array('"Name","Description"',',')) From my_test_view "Name" "Description" "Name" "Description" 不幸的是我得到了这样的结果 Select unnest(string_to_array('"Name","Description"',','))

创建视图时,我的输入将以逗号分隔,输入仅包含视图的列名

我的输入是这样的“名称”、“说明”

我试过这样做

Select unnest(string_to_array('"Name","Description"',',')) 
 From  my_test_view
"Name"
"Description"
"Name"
"Description"
不幸的是我得到了这样的结果

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

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

实际上,您要做的是在视图上动态使用标识符来选择数据。要做到这一点,需要编写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;
如果您不太确定,请先检查:

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"');

谢谢你为我工作!!