Knex: Desativar a análise do timestamptz?

Criado em 16 mar. 2016  ·  3Comentários  ·  Fonte: knex/knex

Existe uma maneira de desativar a análise de tempo para aquelas raras ocasiões em que a precisão é importante?

Estou usando timestamptz em uma chave única composta (user_id, created_at) para armazenar valores de série temporal. No entanto, não posso paginar porque o javascript trunca o campo created_at em milissegundos, então, quando há dois criados no mesmo milissegundo, obtenho duplicatas.

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

                           precise ^

Com uma consulta 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

Comentários muito úteis

@ aj0strow Você quer dizer que gostaria de evitar que knex converta timestamp em um objeto Data Javascript quando as linhas forem lidas do banco de dados?

Nesse caso, essa análise é feita pelo menos para PostgreSQL pelo driver pg . Você pode configurar o driver para analisar os tipos de maneira diferente com um código parecido com 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');

Você também pode fornecer ao driver sua própria função de analisador em vez do parâmetro text .

Todos 3 comentários

A desativação da análise de carimbo de data / hora é um recurso que gostaríamos de ter. Uma função 'parseTime' personalizável ou semelhante, talvez.

No entanto, não tenho certeza sobre o seu caso específico. Há um limite para a granularidade do relógio do computador, portanto, exigir valores created_at exclusivos não vai escalar.

@ aj0strow Você quer dizer que gostaria de evitar que knex converta timestamp em um objeto Data Javascript quando as linhas forem lidas do banco de dados?

Nesse caso, essa análise é feita pelo menos para PostgreSQL pelo driver pg . Você pode configurar o driver para analisar os tipos de maneira diferente com um código parecido com 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');

Você também pode fornecer ao driver sua própria função de analisador em vez do parâmetro text .

@ rhys-vdw é único na hora do usuário +, então vai ficar bem.

@elhigu obrigado!

Isso é exatamente o que eu estava procurando. Também é possível converter para ::text na consulta, mas é propenso a erros para mim, então é melhor desligar a análise e analisar new Date quando necessário. Obrigado novamente.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

hyperh picture hyperh  ·  3Comentários

ghost picture ghost  ·  3Comentários

zettam picture zettam  ·  3Comentários

mtom55 picture mtom55  ·  3Comentários

mattgrande picture mattgrande  ·  3Comentários