我在postgresql中有一个玩具存储过程。
CREATE FUNCTION foo(bar bytea) RETURNS BOOLEAN AS
$$
BEGIN
RETURN TRUE;
END;
$$
LANGUAGE plpgsql;
由于我想从Java代码中调用它,因此我使用jooq-codegen-maven
插件生成了表示数据库例程的Java对象。我打电话的时候:
def select = DSL.select(Routines.test([1,2,3] as byte[]))
context.batch(s).execute()
由于缺少程序匹配名称和参数列表而导致失败。类型。事实证明,jooq生成了错误的查询:
select "public"."test"(X'010203');
function public.test(bit) does not exist
应该是:
select "public"."test"('\x010203');
或:
select "public"."test"(E'\\01\\02\\03'::bytea);
您对解决方法有什么建议吗?唯一的要求是最后有bytea
,因为我想插入一行bytea
列
进入数据库。
类似的情况适用于smallint
。 Jooq生成不正确的查询(不转换值::smallint
),因此postgresql因类型不匹配而无法匹配任何过程(给定整数,但预期为smallint)。这种情况可以很容易地解决"通过将参数类型更改为int
并在程序正文中进行处理。