Запрос столбца jsonb, содержащего массив объектов JSON
я используюPostgreSQL 9.5 и Rails 5. Я хочу запроситьjsonb
столбец, показанный ниже, который содержит массив объектов JSON для возврата всего элемента массива JSON, содержащего{"kind":"person"}
а также выполнить подсчет.
SQL Я использую показано ниже данных JSON. Выполнение запроса просто возвращает пустой массив.
Я попробовал предложенные вопросыВот а такжеВот.
Это то, что мойjsonb
данные выглядят так:
'[
{"kind":"person", "filter_term":"56","selected_attr":"customer"},
{"kind":"email", "filter_term":"marketer","selected_attr":"job_title"}
]'
Я хочу, чтобы один из запросов sql возвращал:
data
----------------------------------------------------------------------
'{"kind":"person", "filter_term":"56","selected_attr":"customer"}'
(1 row)
и еще один запрос для возврата массива обратно, чтобы я мог вызывать его в моем приложении, а также перебирать его для создания форм:
data
----------------------------------------------------------------------
'[{"kind":"person", "filter_term":"56","selected_attr":"customer"}]'
(1 row)
Я попробовал этот запрос SQL:
"SELECT * FROM \"segments\" WHERE (payload @> '[{\"kind\":\"person\"}]')"
Я также попробовал этот запрос:
"SELECT payload FROM segments WHERE payload @> '[{\"kind\":\"person\"}]'::jsonb;"
Вот третий запрос:
"SELECT * FROM segments s WHERE s.payload->'\"#{a}\"' @> '[{\"kind\":\"person\"}]';"
Модель:
class Segment < ApplicationRecord
store_accessor :payload,:kind, :filter_term, :selected_model_name, :selected_attr, :limit, :selected_operator
end
Миграция:
create_table "segments", force: :cascade do |t|
t.jsonb "payload", default: "[]", null: false
t.index ["payload"], name: "index_segments_on_payload", using: :gin
end