Je rencontre un problème lors de la récupération d'une valeur longue dans PostgreSQL.
J'utilise la commande SQL suivante :
SELECT *, (extract(epoch FROM start_timestamp) * 1000) FROM lot
WHERE EXTRACT(EPOCH FROM lot.start_timestamp) * 1000 >=1265299200000 AND
EXTRACT(EPOCH FROM lot.start_timestamp) * 1000 <=1265990399999
ORDER BY start_timestamp DESC limit 9 offset 0
Je suis intéressé par l'horodatage unix en ms
J'exécute cette commande manuellement via pgAdmin.
Dans pgAdmin, j'ai vu 1265860762817 for column (extract(epoch FROM start_timestamp) * 1000)
Cependant, lorsque je récupère des données via psycopg2, voici ce que j'utilise :
cur = conn.cursor()
cur.execute(sql)
rows = cur.fetchall()
for row in rows :
print row[3]
Et voici ce que j'obtiens :
1.26586076282e+12
Je passe cette valeur, de python cgi à JavaScript en JSON
Si je fais une conversion manuelle en JavaScript
1.26586076282e+12
// summary.date is 1.26586076282e+12
var timestamp = summary.date * 1;
// Get 1265860762820
alert(timestamp);
Il y a une différence d'erreur de 3 ms
1265860762817
1265860762820-
==============
3
==============
Comment éviter une telle erreur ? Comment puis-je m'assurer que psycopg2 me renvoie bien 1265860762817 no 1.26586076282e+12