Knex: Menyisih dari penguraian timestamptz?

Dibuat pada 16 Mar 2016  ·  3Komentar  ·  Sumber: knex/knex

Apakah ada cara untuk memilih keluar dari penguraian waktu untuk kesempatan langka itu ketika presisi penting?

Saya menggunakan timestamptz dalam kunci unik majemuk (user_id, created_at) untuk menyimpan nilai deret waktu. Namun saya tidak dapat membuat paginasi karena javascript memotong bidang created_at menjadi milidetik, jadi ketika ada dua yang dibuat dalam milidetik yang sama, saya mendapatkan duplikat.

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

                           precise ^

Dengan kueri 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

Komentar yang paling membantu

@aj0strow Apakah maksud Anda bahwa Anda ingin mencegah knex mengonversi timestamp ke objek Tanggal Javascript ketika baris dibaca dari DB?

Jika demikian, penguraian itu dilakukan setidaknya untuk PostgreSQL oleh driver pg . Anda dapat mengatur driver untuk mengurai jenis secara berbeda dengan kode seperti ini:

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

Anda juga dapat memberi driver fungsi parser Anda sendiri alih-alih parameter text .

Semua 3 komentar

Menyisih dari penguraian stempel waktu adalah fitur yang mungkin ingin kami miliki. Fungsi 'parseTime' yang dapat disesuaikan atau yang serupa mungkin.

Namun, saya tidak yakin tentang kasus spesifik Anda. Ada batasan granularitas jam komputer, sehingga membutuhkan nilai unik created_at tidak akan diskalakan.

@aj0strow Apakah maksud Anda bahwa Anda ingin mencegah knex mengonversi timestamp ke objek Tanggal Javascript ketika baris dibaca dari DB?

Jika demikian, penguraian itu dilakukan setidaknya untuk PostgreSQL oleh driver pg . Anda dapat mengatur driver untuk mengurai jenis secara berbeda dengan kode seperti ini:

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

Anda juga dapat memberi driver fungsi parser Anda sendiri alih-alih parameter text .

@rhys-vdw unik pada pengguna + waktu, jadi akan baik-baik saja.

@elhigu terima kasih!

Itulah yang saya cari. Dimungkinkan juga untuk melakukan cast ke ::text dalam kueri tetapi bagi saya itu rawan kesalahan, jadi lebih baik matikan parsing dan parse new Date bila diperlukan. Terima kasih lagi.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

nklhrstv picture nklhrstv  ·  3Komentar

tjwebb picture tjwebb  ·  3Komentar

koskimas picture koskimas  ·  3Komentar

hyperh picture hyperh  ·  3Komentar

saurabhghewari picture saurabhghewari  ·  3Komentar