Knex: Timestamptz-Parsing deaktivieren?

Erstellt am 16. März 2016  ·  3Kommentare  ·  Quelle: knex/knex

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 ^
discussion question

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:

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 .

Alle 3 Kommentare

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

koskimas picture koskimas  ·  3Kommentare

nklhrstv picture nklhrstv  ·  3Kommentare

fsebbah picture fsebbah  ·  3Kommentare

olaferlandsen picture olaferlandsen  ·  3Kommentare

rarkins picture rarkins  ·  3Kommentare