Coluna jsonb de consulta que contém a matriz de objetos JSON
eu usoPostgreSQL 9.5 e Rails 5. Quero consultar ojsonb
coluna mostrada abaixo que contém uma matriz de objetos JSON para retornar todo o elemento da matriz JSON que contém{"kind":"person"}
e também faça uma contagem.
oSQL Eu uso é mostrado abaixo dos dados json. A execução da consulta apenas retorna uma matriz vazia.
Eu tentei as consultas sugeridasaqui eaqui.
Isto é o que meujsonb
os dados se parecem com:
'[
{"kind":"person", "filter_term":"56","selected_attr":"customer"},
{"kind":"email", "filter_term":"marketer","selected_attr":"job_title"}
]'
Eu quero que uma da consulta sql retorne:
data
----------------------------------------------------------------------
'{"kind":"person", "filter_term":"56","selected_attr":"customer"}'
(1 row)
e outra consulta para retornar a matriz de volta para que eu possa contar com ela no meu aplicativo e também fazer um loop sobre ela para criar formulários:
data
----------------------------------------------------------------------
'[{"kind":"person", "filter_term":"56","selected_attr":"customer"}]'
(1 row)
Eu tentei esta consulta SQL:
"SELECT * FROM \"segments\" WHERE (payload @> '[{\"kind\":\"person\"}]')"
Eu também tentei esta consulta:
"SELECT payload FROM segments WHERE payload @> '[{\"kind\":\"person\"}]'::jsonb;"
Aqui está uma terceira consulta:
"SELECT * FROM segments s WHERE s.payload->'\"#{a}\"' @> '[{\"kind\":\"person\"}]';"
O modelo:
class Segment < ApplicationRecord
store_accessor :payload,:kind, :filter_term, :selected_model_name, :selected_attr, :limit, :selected_operator
end
A migração:
create_table "segments", force: :cascade do |t|
t.jsonb "payload", default: "[]", null: false
t.index ["payload"], name: "index_segments_on_payload", using: :gin
end