jOOQ获取的时间戳没有纳秒

时间:2016-04-04 21:49:41

标签: java postgresql jooq sql-timestamp

在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;

1 个答案:

答案 0 :(得分:1)

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

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

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