PostgreSQL:将数组传递给过程时出现问题

Vis*_*G S 1 java postgresql stored-procedures hibernate

我的类型为:

CREATE TYPE status_record AS
   (
   id bigint,
   status boolean
   );
Run Code Online (Sandbox Code Playgroud)

使用类型数组作为输入参数进行某些处理的过程,如下所示:

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;
Run Code Online (Sandbox Code Playgroud)

最后我查询程序为:

select *
from update_status(cast(ARRAY[(385,false),(387,false)] as status_record[]));
Run Code Online (Sandbox Code Playgroud)

在 pgadmin 中一切正常。后来,当我尝试使用Hibernate 本机 SQL 查询调用相同的命令时,Ka Boom!!!显示如下:

 org.postgresql.util.PSQLException:
 ERROR: array value must start with "{" or dimension information 
Run Code Online (Sandbox Code Playgroud)

最后一个问题:两者ARRAY[--something]{--something}作用相同吗?

Erw*_*ter 5

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

SELECT update_status('{"(1,t)","(2,f)"}'::status_record[]);
Run Code Online (Sandbox Code Playgroud)

甚至可能没有显式的强制转换:

SELECT update_status('{"(1,t)","(2,f)"}');
Run Code Online (Sandbox Code Playgroud)

之前SO上也有类似的案例: