Ich versuche, den "neuen" JSONB-Typ zu verwenden.Wie jsonb Integer-Werte indexieren
Ich habe eine documents
Tabelle mit einem properties
jsonb Feld, und in diesem ist ein Feld publication_year
. Ich möchte alle Dokumente innerhalb eines Jahres z. 2013-2015. [BEARBEITEN: Die Abfrage nach einer Reihe von Werten ist die größte Herausforderung, auch wenn ich unten ein genau passendes Beispiel verwendet habe. Der angeforderte Ansatz würde auch für, sagen Dollar Bereiche (Preis> $ 20 und Preis < 40 $) oder Zeitstempel Bereiche)]
ich versucht habe.
create index test1 on documents using gin ((cast(properties->'announced_on_year' as integer)));
ERROR: cannot cast type jsonb to integer
sowie:
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.`
Ich sah von diesem Beitrag http://www.postgresql.org/message-id/[email protected], dass dies möglich sein sollte, aber ich kann nicht die richtige Syntax herausfinden.
Wenn ich nur einen einfachen Index tun:
create index test1 on documents using gin ((properties->'publication_year'));
ein Index erstellt wird, aber ich kann es nicht abfragen Integer-Werte mit einem Bereich in Gang zu bringen, heißt es
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.
Irgendwelche Tipps und Hinweise sehr geschätzt. Ich bin sicher, dass auch andere davon profitieren werden. TIA
Danke-- Ich denke, das ist die Antwort, die ich suchte. Auch wenn die Dokumente dies nicht angeben, können Sie mit dieser Lösung CAST verwenden, um Bereichsresultate zu erhalten, wie in: 'EXPLAIN ANALYSE SELECT COUNT (*) FROM Dokumente WHERE Cast (Eigenschaften - >> 'publication_year' AS integer)> 2012 AND cast (Eigenschaften - >> 'publication_year' AS integer) <2016; –
Ich bin mir nicht sicher, ob dieser Weg sich auf die Performance auswirkt (was ich denke, ist das Ziel). Laut dem Dokument wird der Operator "- >>" von diesem Indextyp nicht unterstützt. Außerdem können Sie 'x> A UND x murison