0
我是Postgresql JSONb和Ecto的新手。我有一個列「配置」,是jsonb的表。我能夠插入,但是當我嘗試從中選擇使用片段函數的條件時,我無法使其工作。下面是示例輸出:Elixir Ecto JSONb查詢
iex> Repo.all(from i in Instance, select: i.configuration, where:
fragment("?->'testing' LIKE '%hey%'", i.configuration))
[debug] QUERY ERROR source="instances" db=0.4ms
SELECT i0."configuration" FROM "instances" AS i0 WHERE
(i0."configuration"->'testing' LIKE '%hey%') []
** (Postgrex.Error) ERROR 42883 (undefined_function): operator does not
exist: jsonb ~~ unknown
(ecto) lib/ecto/adapters/sql.ex:431:
Ecto.Adapters.SQL.execute_and_cache/7
(ecto) lib/ecto/repo/queryable.ex:133: Ecto.Repo.Queryable.execute/5
(ecto) lib/ecto/repo/queryable.ex:37: Ecto.Repo.Queryable.all/4
如果我執行原始查詢這樣:
iex> query = """
select configuration FROM instances where configuration->>'testing'
LIKE '%hey%'
"""
iex> Ecto.Adapters.SQL.query!(Repo, query)
[debug] QUERY OK db=1.0ms
select configuration FROM instances where configuration->>'testing'
LIKE '%hey%' []
%Postgrex.Result{columns: ["configuration"], command: :select,
connection_id: 28581, num_rows: 1, rows: [[%{"testing" => "some test
hey?"}]]}
它的工作原理,同樣在PSQL以下查詢工作:
select configuration FROM instances where configuration->>'tsting' LIKE '%hey%';
任何幫助的我正在做什麼錯誤的Repo.all(...查詢將不勝感激,因爲我已經嘗試了一堆無濟於事,不明白我做錯了什麼。
一路走來,我有 - - 在某些時候,可能還有一些其他錯誤,除了沒有閱讀所有的文檔和了解 - >操作符。我很欣賞清晰度。 – bexley
關於'~~'而不是'LIKE'的錯誤信息會引起混淆,除非您已經知道'~~'和'LIKE'是相同的東西。別客氣。 –