函数如何将数组或设置值作为 PostgreSQL 中用户定义函数的参数 (IN)

Posted

技术标签:

【中文标题】函数如何将数组或设置值作为 PostgreSQL 中用户定义函数的参数 (IN)【英文标题】:How a function can take array or set values as parameter(IN) for an user defined function in PostgreSQL 【发布时间】:2013-04-24 12:26:43 【问题描述】:

我正要创建一个用户定义的函数来在基于超图的数据库中实现分面搜索,该函数将返回带有计数的分面。问题是我需要传递要搜索的字段集。我不知道该怎么做。请看一下功能并帮助我。我想传递类似于 'node_type', 'node_title', 'title' 等的 search_fields。

CREATE OR REPLACE FUNCTION facets(
    IN keyword text, IN search_fields text, IN relation_name text, IN node_type text, IN group_by text, 
    OUT facet text, OUT count integer
   )

    RETURNS SETOF record AS

    $BODY$

谢谢

【问题讨论】:

作为一个明确的例子,select 将如何为两列关键字和 search_fields 返回count?每列一个计数?您的示例函数返回的集合中有什么? 不,它总是会计算 id(primary) 但搜索条件会尝试与表的几个字段匹配,我需要将这些字段作为所有其他参数旁边的列表传递,因为这些字段会有所不同取决于关系。 【参考方案1】:

由于我不明白您到底在尝试什么,所以我将其作为首发。

返回一组数组传递的列:

create or replace function facets(
    columns text[]
) returns setof record language plpgsql as $body$
begin
    return query execute format($$
        select %1$I, %2$I from t
    $$, columns[1], columns[2]);
end; $body$;

要检索它,您必须声明返回类型:

select * from facets(array['a', 'b']) s(a text, b text);

【讨论】:

以上是关于函数如何将数组或设置值作为 PostgreSQL 中用户定义函数的参数 (IN)的主要内容,如果未能解决你的问题,请参考以下文章

如何设置像'YYYYMM'这样的Postgresql默认值日期戳?

如何使用 Sequelize + PostgreSQL 将项目附加到数组值

当我们将数组作为参数传递给其他函数时,数组的值如何变化? [复制]

将数组文字传递给 PostgreSQL 函数

如何将带有数组的普通值转换为 PostgreSQL 中的数据结构?

如何将 HTML 作为 PostgreSQL 插入查询中的值处理?