Próbuję użyć "nowego" typu JSONB.Jak indeksować wartości całkowite jsonb
Mam tablicę documents
z polem jsonb o rozmiarze properties
, w tym polu publication_year
. Chcę znaleźć wszystkie rekordy dokumentów w ciągu roku, np. 2013-2015. [EDYCJA: zapytanie o zakres wartości jest tutaj głównym wyzwaniem, mimo że użyłem przykładu dopasowania dokładnego poniżej. Żądana podejście byłoby również zastosowanie do, powiedzmy zakresy dolara (cena> $ 20 i cenę < 40 $) lub zakresy datownika)]
próbowałem.
create index test1 on documents using gin ((cast(properties->'announced_on_year' as integer)));
ERROR: cannot cast type jsonb to integer
, jak:
create index test1 on documents using gin (cast(properties->>'publication_year' as integer));
ERROR: data type integer has no default operator class for access method "gin"
HINT: You must specify an operator class for the index or define a default operator class for the data type.`
Widziałem z tego wpisu http://www.postgresql.org/message-id/[email protected], że powinno to być możliwe, ale nie mogę znaleźć właściwej składni.
Kiedy tylko zrobić prosty indeks:
create index test1 on documents using gin ((properties->'publication_year'));
indeks jest tworzony, ale nie mogę zapytać go przy użyciu wartości całkowitych, aby uzyskać zakres dzieje, to mówi
select count(*) from documents where properties->>'publication_year' = 2015;
ERROR: operator does not exist: text = integer
LINE 1: ...*) from documents where properties->>'publication_year' = 2015;
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Wszelkie wskazówki i wskazówki bardzo cenne. Jestem pewien, że inni też skorzystają. TIA
Dziękuję - myślę, że to jest odpowiedź, której szukałem. Mimo że dokumenty nie określają tego, możesz za pomocą tego rozwiązania użyć CAST, aby uzyskać wyniki zasięgu, jak w: 'WYJAŚNIJ ANALIZĘ WYBIERZ COUNT (*) Z dokumentów WHERE obsada (właściwości - >> 'publication_year' AS integer)> 2012 I obsada (właściwości - >> 'publication_year' AS integer) <2016; –
Nie jestem pewien, czy użycie go w ten sposób będzie miało wpływ na wydajność (co jest chyba celem). Według dokumentu - operator "- >>" nie jest obsługiwany przez ten typ indeksu. Również - możesz połączyć 'x> A AND x murison