1
我知道了,我可以用row_to_json返回JSON输出的Postgres从函数返回JSON
例如 如果我的查询是:
select * from sample;
如下返回JSON,我可以把它改写输出:
select row_to_json(sample) from sample;
但我试图实现的一件事是功能相同的功能。
给你举一个例子,这里是函数返回表:
CREATE FUNCTION find_val(val text)
RETURNS SETOF sample AS
$$
BEGIN
RETURN QUERY
SELECT * FROM sample where $1 = ANY(col4);
END;
$$
LANGUAGE 'plpgsql';
现在,而不是行,我想从我的函数返回JSON输出。我怎样才能做到这一点 ?
这里是我到目前为止已经试过:
native=> CREATE FUNCTION find_val(val text)
RETURNS SETOF sample AS
$$
BEGIN
RETURN QUERY
SELECT row_to_json(sample) FROM sample where $1 = ANY(col4) ;
END;
$$
LANGUAGE 'plpgsql';
CREATE FUNCTION
native=> select find_val('yo');
ERROR: structure of query does not match function result type
DETAIL: Returned type json does not match expected type integer in column 1.
CONTEXT: PL/pgSQL function find_val(text) line 3 at RETURN QUERY
native=> drop function find_val(text);
DROP FUNCTION
native=> CREATE FUNCTION find_val(val text)
native-> RETURNS json AS
native-> $$
native$> BEGIN
native$> SELECT row_to_json(sample) FROM sample where $1 = ANY(col4);
native$> END;
native$> $$
native-> LANGUAGE 'plpgsql';
CREATE FUNCTION
native=> select find_val('yo');
ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT: PL/pgSQL function find_val(text) line 3 at SQL statement
native=>
感谢克雷格..这工作。 我需要在我的实际功能中执行一些更多的操作,所以只使用plpgsql。从官方文档中找到正确的方法 'CREATE OR REPLACE FUNCTION find_val(val text) RETURNS json AS $$ DECLARE t_row sample%ROWTYPE; BEGIN SELECT * INTO t_row FROM sample其中$ 1 = ANY(col4); RETURN row_to_json(t_row); END; $$ LANGUAGE'plpgsql';' –