能否在age_函数中使用SPI?如何调用其他age_函数并排序结果?
关于SPI与AG函数调用的问题解答
1. 利用SPI执行查询并返回agtype值是否可行?
完全可行。你可以通过SPI在自定义函数中调用已有的age_函数,对结果执行ORDER BY后返回agtype类型数据。以下是PL/pgSQL示例:
CREATE OR REPLACE FUNCTION ordered_agtype_result() RETURNS SETOF agtype AS $$ DECLARE spi_record RECORD; BEGIN -- 通过SPI调用目标age_函数并排序 FOR spi_record IN SELECT ag_data FROM age_existing_function() ORDER BY agtype_extract(ag_data, 'sort_key') LOOP RETURN NEXT spi_record.ag_data; END LOOP; RETURN; END; $$ LANGUAGE plpgsql;
2. 能否在age_函数中使用SPI?
可以。只要你的age_函数是用支持SPI的语言(如PL/pgSQL、PL/Python等)编写的,就能直接在函数内部通过SPI执行查询,包括调用其他age_函数或PostgreSQL原生函数。
3. 若SPI方案不可行,如何在age_函数中调用另一个并排序?
不用SPI的话,直接通过子查询或临时表处理即可,示例如下:
方式一:子查询直接排序
CREATE OR REPLACE FUNCTION call_and_sort_age_func() RETURNS SETOF agtype AS $$ BEGIN RETURN QUERY SELECT ag_data FROM age_target_function() ORDER BY agtype_extract(ag_data, 'sort_field')::text; -- 根据agtype内的字段排序 END; $$ LANGUAGE plpgsql;
方式二:临时表中转处理
CREATE OR REPLACE FUNCTION sort_age_func_result() RETURNS SETOF agtype AS $$ BEGIN -- 临时表存储目标函数结果 CREATE TEMP TABLE temp_ag_output AS SELECT * FROM age_another_func(); -- 从临时表取数并排序返回 RETURN QUERY SELECT ag_content FROM temp_ag_output ORDER BY agtype_extract(ag_content, 'priority') DESC; END; $$ LANGUAGE plpgsql;
内容的提问来源于stack exchange,提问作者Matheus Farias
相关产品推荐
相关产品推荐

