jOOQ 获取的时间戳没有纳秒

jOOQ fetched timestamp has no nanoseconds

在 postgres 数据库中,使用 jOOQ,当我获取具有定义为

的列的行时
timestamp without time zone

当我执行 select 并获得值(由 jOOQ 获取到 java.sql.Timestamp)时,我发现纳秒丢失了。

例如,在我的数据库中:

2016-04-04 15:14:10.970048

但 jOOQ returns 具有值

的时间戳
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;

这是 jOOQ 中的错误:https://github.com/jOOQ/jOOQ/issues/5193

jOOQ 内部实现了复合类型反序列化算法,作为 PostgreSQL 的 JDBC 驱动程序,不幸的是,没有实现 SQLData 和相关的 API 用于开箱即用的复合类型支持。当前的实现 (jOOQ 3.7.3) 解析没有小数秒部分的时间戳。

作为解决方法,您可以实施自己的 data type binding 来解决此问题。