2

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

timestamp without time zone

当我进行选择并获得值(由 jOOQ 获取到 a 中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); 

然后,时间戳不会没有纳米

功能是:

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

1 回答 1

1

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

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

作为一种解决方法,您可以实现自己的数据类型绑定来解决此问题。

于 2016-04-06T13:14:21.780 回答