Wie erstelle ich in PostgreSQL 9.3 Beta 2 (?) Einen Index für ein JSON-Feld? Ich habe es mit dem ->
für verwendeten Operator versucht, hstore
aber den folgenden Fehler erhalten:
CREATE TABLE publishers(id INT, info JSON);
CREATE INDEX ON publishers((info->'name'));
FEHLER: Datentyp json hat keine Standardoperatorklasse für die Zugriffsmethode "btree". HINWEIS: Sie müssen eine Operatorklasse für den Index angeben oder eine Standardoperatorklasse für den Datentyp definieren.
Antworten:
Gefunden:
Wie in den Kommentaren angegeben, ist der subtile Unterschied hier
->>
statt->
. Ersteres gibt den Wert als Text zurück, letzteres als JSON-Objekt.quelle
->>
statt->
. Ersteres gibt den Wert als Text zurück, letzteres gibt ein JSON-Objekt zurück.TEXT
. Wenn Sie Ganzzahlvergleiche anstelle von Zeichenfolgenvergleichen durchführen möchten, müssen Sie eine Umwandlung hinzufügen :((info->>'name')::INT)
.create index idx_name on table_name ((json_column->'child_obj'->>'child_obj_field'));
Wir müssen zuerst->
das JSON-Objekt und dann->>
den untergeordneten Objektwert als abrufen Text.