2014-06-30 18 views
5

La situazione è che ho un tipo di colonna JSON in una tabella postgresql. Mi piacerebbe creare un indice su uno o più dei tasti di JSON. Credo di sapere come farlo usando sql (Nota a margine: avevo l'impressione che dovessi usare jsonb per avere questo tipo di indicizzazione secondo il postgresql docs. Non sembra che sia così.)Utilizzo di sqlalchemy per creare un indice su una chiave json (indice di espressione)

Per coerenza, mi piacerebbe farlo attraverso sqlalchemy, ma non vedo alcuna menzione su come farlo nei loro documenti. È possibile?

+0

Si desidera creare un indice di espressione tramite SQLAlchemy? Dovrai trovare un modo per farlo funzionare con SQL arbitrario, dubito davvero che lo supporti in modo nativo. –

risposta

7

Ho capito la risposta a questa domanda. Come sottolineato da Craig, questo è un indice basato su espressioni, che è stato reso possibile sul tipo di colonna JSON in Postgresql 9.3. Questo può essere fatto attraverso SQLAlchemy, nel modo seguente:

Dato un modello chiamato MyModel e un tipo di colonna JSON chiamato data che assume questa forma:

{"my_key": "my_value"} 

per creare un indice di espressione basata su my_key, è potrebbe fare questo:

index = Index("my_index_name", MyModel.c.data['my_key'].astext) 
index.create(engine) 

la risposta originale per questo da Mike Bayer nel gruppo SQLAlchemy Google, che è possibile trovare here.