在postgres db中,使用jOOQ,当我获取一列定义为
的列时timestamp without time zone
当我做一个select并得到值(由jOOQ提取到java.sql.Timestamp
)时,我发现缺少纳秒。
例如,我在数据库中有:
2016-04-04 15:14:10.970048
但是jOOQ返回值为
的时间戳2016-04-04 15:14:10.0
这是进一步比较的问题。我该如何防止这种情况?
更新 根据要求,我将提供更多详细信息。
在Postgresql中我有一个类型:
CREATE TYPE schema.my_type AS
(
mt_page smallint,
mt_active_from timestamp without time zone,
);
我使用例程调用函数:
DSLContext dsl = ....
MyTypeRecord [] records = Routines.myRoutine(dsl.configuration);
然后,Timestamp将没有nanos
功能是:
CREATE OR REPLACE FUNCTION shop.myRoutine(
OUT my_types schema.my_type[]
)
RETURNS schema.my_type[] AS
$BODY$
DECLARE
BEGIN
BEGIN
SELECT ARRAY(
SELECT
ROW(a_id, a_timestamp)::schema.my_type
FROM schema.article
) INTO my_types;
END;
RETURN;
END;
$BODY$
LANGUAGE plpgsql VOLATILE SECURITY DEFINER
COST 1000;
答案 0 :(得分:1)
这是jOOQ中的错误:https://github.com/jOOQ/jOOQ/issues/5193
jOOQ内部实现了复合类型反序列化算法,遗憾的是,PostgreSQL的JDBC驱动程序并没有实现SQLData
和相关API,以实现开箱即用的复合类型支持。当前的实现(jOOQ 3.7.3)解析时间戳而没有它们的小数秒部分。
作为一种解决方法,您可以实施自己的data type binding来解决此问题。