2015-12-02 22 views
8

Ho bisogno di cercare oltre i valori di una chiave array del campo jsonb in Postgres.aggiungi indice su campo jsonb

field: {'array_key' : [1, 2, 3, 4]} 

E 'possibile aggiungere indice su array_key o c'è qualche metodo ottimizzato per la ricerca sui valori?

criteri di ricerca sarà qualcosa di simile

select * where field['array_key'].include?(2) 
+0

può aggiungi come sarà la tua query di ricerca? – ben

+0

sicuro .. qualcosa come, selezionare * dove campo ['array_key']. Include? (2) – mudasir

risposta

10

È possibile creare indice su chiavi jsonb come,

add_index :table_name, :field, :using => :gin, :expression => "(field->'array_key')", :name => 'index_table_name_on_field_array_keys' 

Quindi, è possibile cercare le chiavi indicizzati come,

where("table_name.field->'array_keys' @> ?", Array(2)) 
+1

Quale versione di rota richiede? Sto eseguendo 4.2.1 e ricevo: 'Si è verificato un errore, questa e tutte le successive migrazioni annullate: Chiave sconosciuta:: espressione' – ChristopherJ

+0

Ah, vedo che questo è nuovo per le guide 5. http: //guides.rubyonrails .org/5_0_release_notes.html # active-record-notable-changes – ChristopherJ

+2

'add_index: table_name," (campo -> 'array_key') ", utilizzando:: gin, nome: 'index_table_name_on_field_array_keys'' in Rails 5.0.0 – Dinatih

Problemi correlati