Knex: Désactiver l'analyse d'horodatage ?

Créé le 16 mars 2016  ·  3Commentaires  ·  Source: knex/knex

Existe-t-il un moyen de désactiver l'analyse temporelle pour les rares occasions où la précision est importante ?

J'utilise timestamptz dans une clé unique composée (user_id, created_at) pour stocker les valeurs des séries temporelles. Cependant, je ne peux pas paginer car javascript tronque le champ created_at en millisecondes, donc quand il y en a deux créés dans la même milliseconde, j'obtiens des doublons.

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

                           precise ^

Avec une requête 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

Commentaire le plus utile

@aj0strow Voulez-vous dire que vous souhaitez empêcher knex de convertir timestamp en objet Javascript Date lorsque les lignes sont lues à partir de la base de données ?

Si c'est le cas, cette analyse est effectuée au moins pour PostgreSQL par le pilote pg . Vous pouvez configurer le pilote pour analyser les types différemment avec un code comme celui-ci :

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

Vous pouvez également donner au pilote votre propre fonction d'analyse au lieu du paramètre text .

Tous les 3 commentaires

La désactivation de l'analyse d'horodatage est une fonctionnalité que nous aimerions avoir. Une fonction 'parseTime' personnalisable ou similaire peut-être.

Cependant, je ne suis pas sûr de votre cas particulier. Il y a une limite à la granularité de l'horloge de l'ordinateur, donc exiger des valeurs created_at uniques ne va pas évoluer.

@aj0strow Voulez-vous dire que vous souhaitez empêcher knex de convertir timestamp en objet Javascript Date lorsque les lignes sont lues à partir de la base de données ?

Si c'est le cas, cette analyse est effectuée au moins pour PostgreSQL par le pilote pg . Vous pouvez configurer le pilote pour analyser les types différemment avec un code comme celui-ci :

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

Vous pouvez également donner au pilote votre propre fonction d'analyse au lieu du paramètre text .

@rhys-vdw c'est unique sur l'utilisateur + l'heure, donc ça ira.

@elhigu merci !

C'est exactement ce que je cherchais. Il est également possible de convertir en ::text dans la requête, mais cela est sujet aux erreurs pour moi, il est donc préférable de désactiver l'analyse et d'analyser new Date si nécessaire. Merci encore.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

lanceschi picture lanceschi  ·  3Commentaires

zettam picture zettam  ·  3Commentaires

koskimas picture koskimas  ·  3Commentaires

fsebbah picture fsebbah  ·  3Commentaires

mattgrande picture mattgrande  ·  3Commentaires