Knex: 选择退出时间戳记解析?

创建于 2016-03-16  ·  3评论  ·  资料来源: knex/knex

有没有办法在精度很重要的情况下选择不进行时间解析?

我在复合唯一键(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 ^
discussion question

最有用的评论

@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参数。

所有3条评论

选择退出时间戳解析是我们可能希望拥有的功能。 一个可定制的 '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 。 再次感谢。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

nklhrstv picture nklhrstv  ·  3评论

koskimas picture koskimas  ·  3评论

tjwebb picture tjwebb  ·  3评论

mattgrande picture mattgrande  ·  3评论

PaulOlteanu picture PaulOlteanu  ·  3评论