Postgres поиск в JSON - PullRequest
       7

Postgres поиск в JSON

0 голосов
/ 09 февраля 2020

My probe_table выглядит так:

id | my_metadata

Столбец probe равен JSON, со следующим:

{
  "myProbe": {
    "someField": "20",
    "ip": "1.1.1.1",
  }
} 

Я пытаюсь найти во всех столбцах probe указанный c IP.

Я пробовал:

SELECT * 
      FROM probe_table
      WHERE probe @> '{"myProbe":{"ip": "1.1.1.1"}}';

ОШИБКА: оператор не существует: текст @> неизвестен

и это:

SELECT * FROM probe_table WHERE probe->myProbe->>ip = '1.1.1.1'

ОШИБКА: столбец "myProbe" не существует

Есть идеи, что мне не хватает?

1 Ответ

0 голосов
/ 09 февраля 2020

Вам необходимо использовать одинарные кавычки для параметров операторов -> или ->>. А сообщение « оператор не существует: текст @> неизвестно » указывает, что ваш столбец имеет тип text, а не json (или jsonb, каким он должен быть), поэтому вам нужно привести его :

SELECT * 
FROM probe_table 
WHERE probe::jsonb -> 'myProbe' ->> 'ip' = '1.1.1.1'

Или

SELECT * 
FROM probe_table
WHERE probe::jsonb @> '{"myProbe":{"ip": "1.1.1.1"}}';
...