有没有办法在精度很重要的情况下选择不进行时间解析?
我在复合唯一键(user_id, created_at)
使用 timestamptz 来存储时间序列值。 但是我无法分页,因为 javascript 将created_at
字段截断
-- record --
id: 'c2ed61d5-ffab-4b0e-a957-c184b3f33132',
created_at: '2016-02-02 15:46:17.681601-05'
precise ^
使用 knex 查询:
knex("series").where("created_at", ">", last.created_at).toString()
select * from series
where created_at > '2016-02-02T15:46:17.681-05:00'
truncated ^
选择退出时间戳解析是我们可能希望拥有的功能。 一个可定制的 'parseTime' 函数或类似的函数。
但是,我不确定您的具体情况。 计算机时钟的粒度是有限制的,因此要求唯一的created_at
值是不会扩展的。
@aj0strow你的意思是你想阻止knex
在从数据库读取行时将timestamp
为 Javascript Date 对象吗?
如果是这样,该解析至少是由pg
驱动程序为 PostgreSQL 完成的。 您可以设置驱动程序以使用如下代码以不同方式解析类型:
var pgTypes = require('pg').types;
// Don't parse dates to js Date() objects
pgTypes.setTypeParser(1082, 'text');
// Don't parse timestamps to js Date() objects
pgTypes.setTypeParser(1184, 'text');
您还可以为驱动程序提供您自己的解析器函数而不是text
参数。
@rhys-vdw 它在用户 + 时间上是独一无二的,所以没问题。
@elhigu谢谢!
这正是我要找的。 也可以在查询中强制转换为::text
,但它对我来说很容易出错,所以最好在需要时关闭解析并解析new Date
。 再次感谢。
最有用的评论
@aj0strow你的意思是你想阻止
knex
在从数据库读取行时将timestamp
为 Javascript Date 对象吗?如果是这样,该解析至少是由
pg
驱动程序为 PostgreSQL 完成的。 您可以设置驱动程序以使用如下代码以不同方式解析类型:您还可以为驱动程序提供您自己的解析器函数而不是
text
参数。