Di PostgreSQL 9.3 Beta 2 (?), Bagaimana cara membuat indeks pada bidang JSON? Saya mencobanya menggunakan ->
operator yang digunakan untuk hstore
tetapi mendapat kesalahan berikut:
CREATE TABLE publishers(id INT, info JSON);
CREATE INDEX ON publishers((info->'name'));
EROR: tipe data json tidak memiliki kelas operator default untuk metode akses "btree" PETUNJUK: Anda harus menentukan kelas operator untuk indeks atau menentukan kelas operator default untuk tipe data.
Jawaban:
Ditemukan:
Seperti yang dinyatakan dalam komentar, perbedaan halus di sini adalah
->>
alih-alih->
. Yang pertama mengembalikan nilai sebagai teks, yang terakhir sebagai objek JSON.sumber
->>
bukan->
. Yang pertama mengembalikan nilai sebagai teks, yang terakhir mengembalikan objek JSON.TEXT
, meskipun. Jika Anda ingin melakukan perbandingan bilangan bulat bukan perbandingan string, Anda harus menambahkan gips:((info->>'name')::INT)
.create index idx_name on table_name ((json_column->'child_obj'->>'child_obj_field'));
Pertama-tama kita perlu menggunakan->
untuk mendapatkan objek JSON dan kemudian->>
mendapatkan nilai objek anak sebagai teks.