数组 – 从函数返回到列的PostgreSQL转换数组
发布时间:2020-12-13 16:15:08 所属栏目:百科 来源:网络整理
导读:我在PostgreSQL(PLPGSQL)中有一个函数,它返回一个包含两个元素的数组.当我运行一个调用该函数的select语句时,我得到一个包含该数组的列(如预期的那样): {1,2} 我真正想要做的是将这些元素提取为自己的列: [ 1 | 2 ] 我发现我能做到: SELECT (MyFunction()
我在PostgreSQL(PLPGSQL)中有一个函数,它返回一个包含两个元素的数组.当我运行一个调用该函数的select语句时,我得到一个包含该数组的列(如预期的那样):
{1,2} 我真正想要做的是将这些元素提取为自己的列: [ 1 | 2 ] 我发现我能做到: SELECT (MyFunction())[1],(MyFunction())[2] 但是它会调用该函数两次,因此运行时间加倍(此函数是一个非常耗时的函数).有没有更好的方法来处理这个? UPDATE 这是我所拥有的几乎完美的复制品: SELECT table1.a,table1.b,table1.c,(MyFunction(table1.a,table1.c))[1],table1.c))[2] FROM table1 INNER JOIN table2 using(b) WHERE ... GROUP BY table1.a,table1.c; 同样,这会产生数组中的两列,但我的函数被调用两次,这使我的运行时间加倍.
你能用subselect吗?
postgres=# select ar[1],ar[2] from (select string_to_array('a b c',' ') ar) as sq; ar | ar ----+---- a | b (1 row) 这仍然需要您显式提取每列(就像您已经做过的那样).如果数组中的元素多于提取的元素,则它们将丢失,如果元素数量较少,则缺少的列将仅为NULL. 编辑:我想我会把整个东西包裹在一个子选择中;内部子选择生成所需的行,外部选择将内部查询投影到所需的列中: SELECT subquery1.a,subquery1.b,subquery1.c,myfunction_result[1],myfunction_result[2] FROM ( SELECT table1.a,MyFunction(table1.a,table1.c) as myfunction_result FROM table1 INNER JOIN table2 using(b) WHERE ... GROUP BY table1.a,table1.c ) AS subquery1; 内部和外部选择将正确关联table1引用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |