如何用一个复合types的数组来调用postgres函数
我正在寻找如何调用具有参数的复合types的postgres函数的建议。 问过类似的问题,但我find了一个满意的答案。
我有以下复合types:
CREATE TYPE collect.event_record AS ( event_type integer , event_timestamp timestamp without time zone , event_data text , event_import_id integer );
我有以下function:
CREATE OR REPLACE FUNCTION collect.insert_events( fail_on_duplicates boolean, source_public_id text, event_records collect.event_record[]) RETURNS integer AS ...
在postgres方面一切似乎工作正常。 现在我只需要从java / kotlin中调用它。
我们使用这个版本的postgres驱动程序:
compile group: "org.postgresql", name: "postgresql", version: "9.4.1212"
在PreparedStatement
有一个方法,似乎是我在找什么:
void setArray (int parameterIndex, Array x) throws SQLException;
数组types是java.sql.Array
,根据我可以告诉的可以使用Connection对象创建:
Array createArrayOf(String typeName, Object[] elements) throws SQLException;
但是,在这里我不知道该输入什么typeName
是什么? 我想我应该创建一个匹配复合types的类,并根据需要序列化字段,或者它是一个java.sql.Struct
数组。
我一直在谷歌搜索的例子,但他们似乎处理的原始types主要是不帮助我的情况。
另一种方法是重构insert_events
来接受几个原始types的数组,排序我的对象的列视图。
另一种方法是发送一个JSON数组,将其转换为postgres函数内的collect.event_record[]
数组。
但是,我想find一种方法,让我保持我目前的postgres函数签名。
任何想法,不胜感激。