Gibt es eine Möglichkeit, die Zeitanalyse für die seltenen Fälle zu deaktivieren, in denen Präzision wichtig ist?
Ich verwende timestamptz in einem zusammengesetzten eindeutigen Schlüssel (user_id, created_at)
, um Zeitreihenwerte zu speichern. Ich kann jedoch nicht paginieren, da Javascript das Feld created_at
auf Millisekunden abschneidet. Wenn also zwei innerhalb derselben Millisekunde erstellt werden, erhalte ich Duplikate.
-- record --
id: 'c2ed61d5-ffab-4b0e-a957-c184b3f33132',
created_at: '2016-02-02 15:46:17.681601-05'
precise ^
Mit einer Knex-Abfrage:
knex("series").where("created_at", ">", last.created_at).toString()
select * from series
where created_at > '2016-02-02T15:46:17.681-05:00'
truncated ^
Die Abmeldung vom Zeitstempel-Parsing ist eine Funktion, die wir gerne hätten. Eine anpassbare 'parseTime'-Funktion oder ähnliches vielleicht.
Allerdings bin ich mir bei deinem konkreten Fall nicht sicher. Die Granularität der Computeruhr ist begrenzt, so dass das Erfordernis eindeutiger created_at
Werte nicht skaliert.
@aj0strow Meinen Sie, dass Sie verhindern möchten, dass knex
timestamp
in ein Javascript- Datumsobjekt konvertiert, wenn Zeilen aus der DB gelesen werden?
Wenn ja, wird diese Analyse zumindest für PostgreSQL durch den pg
Treiber durchgeführt. Sie können den Treiber so einrichten, dass er Typen mit einem Code wie diesem anders analysiert:
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');
Sie können dem Treiber auch eine eigene Parserfunktion anstelle des Parameters text
.
@rhys-vdw es ist einzigartig für Benutzer + Zeit, also wird es in Ordnung sein.
@elhigu danke!
Genau das habe ich gesucht. Es ist auch möglich, in der Abfrage in ::text
umzuwandeln, aber es ist für mich fehleranfällig, also deaktivieren Sie besser das Parsen und parsen Sie new Date
bei Bedarf. Danke noch einmal.
Hilfreichster Kommentar
@aj0strow Meinen Sie, dass Sie verhindern möchten, dass
knex
timestamp
in ein Javascript- Datumsobjekt konvertiert, wenn Zeilen aus der DB gelesen werden?Wenn ja, wird diese Analyse zumindest für PostgreSQL durch den
pg
Treiber durchgeführt. Sie können den Treiber so einrichten, dass er Typen mit einem Code wie diesem anders analysiert:Sie können dem Treiber auch eine eigene Parserfunktion anstelle des Parameters
text
.