一尘不染

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

hibernate

我的类型为:

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本机SQL查询Ka Boom 调用相同的代码时 !!! 显示以下内容:

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

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


阅读 359

收藏
2020-06-20

共1个答案

一尘不染

使用 数组文字数组的 文本表示形式),因为数组构造函数ARRAY[...]必须由Postgres求值:

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

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

SELECT update_status('{"(1,t)","(2,f)"}');
2020-06-20