Jak w PostgreSQL 9.3 Beta 2 (?) Utworzyć indeks w polu JSON? Wypróbowałem to za pomocą ->
operatora używanego do, hstore
ale otrzymałem następujący błąd:
CREATE TABLE publishers(id INT, info JSON);
CREATE INDEX ON publishers((info->'name'));
BŁĄD: typ danych json nie ma domyślnej klasy operatora dla metody dostępu „btree” WSKAZÓWKA: Należy określić klasę operatora dla indeksu lub zdefiniować domyślną klasę operatora dla typu danych.
Odpowiedzi:
Znaleziony:
Jak stwierdzono w komentarzach, subtelna różnica jest tutaj
->>
zamiast->
. Pierwsza zwraca wartość jako tekst, druga jako obiekt JSON.źródło
->>
zamiast->
. Pierwsza zwraca wartość jako tekst, druga zwraca obiekt JSON.TEXT
, jakby. Jeśli chcesz zrobić porównanie całkowitych zamiast porównywania ciągów znaków, trzeba dodać do obsady:((info->>'name')::INT)
.create index idx_name on table_name ((json_column->'child_obj'->>'child_obj_field'));
Najpierw musimy użyć,->
aby pobrać obiekt JSON, a następnie->>
uzyskać wartość obiektu podrzędnego jako tekst.