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 ^
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.
Commentaire le plus utile
@aj0strow Voulez-vous dire que vous souhaitez empêcher
knex
de convertirtimestamp
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 :Vous pouvez également donner au pilote votre propre fonction d'analyse au lieu du paramètre
text
.