PostgreSQL:将数组传递给过程的问题

PostgreSQL: Issue with passing array to procedure

我的类型为:

CREATE TYPE status_record AS
   (
   id bigint,
   status boolean
   );

一个使用类型数组作为输入参数进行某些处理的过程:

CREATE OR REPLACE FUNCTION update_status(status_list status_record[])
RETURNS text AS
$BODY$
DECLARE  

BEGIN    
--does some processing
return 'SUCCESS'; 

end;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

最后我查询的过程为:

select *
from update_status(cast(ARRAY[(385,false),(387,false)] as status_record[]));

pgadmin 一切正常。稍后,当我尝试使用 Hibernate native SQL Query Ka Boom!!! 调用相同内容时,显示如下:

 org.postgresql.util.PSQLException:
 ERROR: array value must start with "{" or dimension information 

最后一个问题:ARRAY[--something]{--something}做同样的工作?

尝试将数组和类型初始化放入字符串中,也许您可​​以绕过混淆层(aka ORM)的问题:

select update_status(cast('{"(1,true)", "(2,false)"}' as status_record[]));

我不知道 Hibernate,所以我不知道它是否行得通。

使用数组文字(数组的文本表示),因为数组构造函数ARRAY[...]必须由Postgres计算:

SELECT update_status('{"(1,t)","(2,f)"}'::status_record[]);

也许即使没有显式转换:

SELECT update_status('{"(1,t)","(2,f)"}');

之前SO上有过类似案例:

  • Pass array from node-postgres to plpgsql function
  • How to pass custom type array to Postgres function