Knex: ¿Deshabilitar el análisis de la marca de tiempo?

Creado en 16 mar. 2016  ·  3Comentarios  ·  Fuente: knex/knex

¿Existe alguna forma de excluir el análisis de tiempo para esas raras ocasiones en las que la precisión es importante?

Estoy usando timestamptz en una clave única compuesta (user_id, created_at) para almacenar valores de series de tiempo. Sin embargo, no puedo paginar porque javascript trunca el campo created_at a milisegundos, por lo que cuando hay dos creados en el mismo milisegundo, obtengo duplicados.

-- record --
id: 'c2ed61d5-ffab-4b0e-a957-c184b3f33132',
created_at: '2016-02-02 15:46:17.681601-05'

                           precise ^

Con una consulta de 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

Comentario más útil

@ aj0strow ¿Quiere decir que le gustaría evitar que knex convierta timestamp al objeto Fecha de Javascript cuando se leen filas desde la base de datos?

Si es así, ese análisis se realiza al menos para PostgreSQL mediante el controlador pg . Puede configurar el controlador para analizar los tipos de manera diferente con un código como este:

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');

También puede darle al controlador su propia función de analizador en lugar del parámetro text .

Todos 3 comentarios

La exclusión voluntaria del análisis de la marca de tiempo es una función que nos gustaría tener. Una función 'parseTime' personalizable o similar tal vez.

Sin embargo, no estoy seguro de su caso específico. Existe un límite para la granularidad del reloj de la computadora, por lo que requerir valores únicos created_at no se escalará.

@ aj0strow ¿Quiere decir que le gustaría evitar que knex convierta timestamp al objeto Fecha de Javascript cuando se leen filas desde la base de datos?

Si es así, ese análisis se realiza al menos para PostgreSQL mediante el controlador pg . Puede configurar el controlador para analizar los tipos de manera diferente con un código como este:

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');

También puede darle al controlador su propia función de analizador en lugar del parámetro text .

@ rhys-vdw es único en el tiempo del usuario, así que estará bien.

@elhigu gracias!

Eso es exactamente lo que estaba buscando. También es posible convertir a ::text en la consulta, pero es propenso a errores para mí, así que es mejor desactivar el análisis y analizar new Date cuando sea necesario. Gracias de nuevo.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

koskimas picture koskimas  ·  3Comentarios

rarkins picture rarkins  ·  3Comentarios

tjwebb picture tjwebb  ·  3Comentarios

marianomerlo picture marianomerlo  ·  3Comentarios

mattgrande picture mattgrande  ·  3Comentarios