【发布时间】:2016-07-24 15:16:51
【问题描述】:
在使用 jOOQ 的 postgres 数据库中,当我获取具有定义为列的行时
timestamp without time zone
当我进行选择并获得值(由 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);
那么,时间戳就不会没有纳米了
函数是:
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;
【问题讨论】:
-
刚刚选择了
ctx.select(val(Timestamp.valueOf("2016-04-04 15:14:10.970048"))).fetch()并获得了正确的时间戳。你的 jOOQ 代码是什么样的?您能否提供更多信息来帮助重现此问题? -
@LukasEder 已更新。希望有帮助
-
哦,这是来自复合类型的数组。这改变了一切 :) 这些通过 JDBC 被序列化为字符串。很可能,那里出了点问题。将调查
标签: java postgresql jooq sql-timestamp