[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-postgresql-kakie-operatory-sushchestvuyut-dlya-raboty-s-jsonb":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},934,"kakie-operatory-sushchestvuyut-dlya-raboty-s-jsonb",28,"postgresql","PostgreSQL","🐘","Какие операторы существуют для работы с JSONB?","PostgreSQL предоставляет три группы операторов для JSONB: извлечение данных, проверка вхождения и модификация. Это позволяет работать с JSON-данными без извлечения их в приложение.\n\n### Операторы извлечения данных\n\n| Оператор | Описание | Пример | Результат |\n|---|---|---|---|\n| `->` | Получить элемент по ключу (JSON) | `'{\"a\":1}'::jsonb -> 'a'` | `1` (jsonb) |\n| `->>` | Получить элемент по ключу (текст) | `'{\"a\":1}'::jsonb ->> 'a'` | `1` (text) |\n| `#>` | Получить по пути (JSON) | `'{\"a\":{\"b\":2}}'::jsonb #> '{a,b}'` | `2` (jsonb) |\n| `#>>` | Получить по пути (текст) | `'{\"a\":{\"b\":2}}'::jsonb #>> '{a,b}'` | `2` (text) |\n\n### Операторы проверки\n\n| Оператор | Описание | Пример |\n|---|---|---|\n| `@>` | Левое содержит правое | `'{\"a\":1,\"b\":2}'::jsonb @> '{\"a\":1}'` |\n| `\u003C@` | Левое содержится в правом | `'{\"a\":1}'::jsonb \u003C@ '{\"a\":1,\"b\":2}'` |\n| `?` | Содержит ключ | `'{\"a\":1}'::jsonb ? 'a'` |\n| `?|` | Содержит хотя бы один ключ | `'{\"a\":1}'::jsonb ?| array['a','b']` |\n| `?&` | Содержит все ключи | `'{\"a\":1,\"b\":2}'::jsonb ?& array['a','b']` |\n\n### Операторы модификации\n\n| Оператор | Описание | Пример |\n|---|---|---|\n| `||` | Конкатенация | `'{\"a\":1}'::jsonb || '{\"b\":2}'::jsonb` |\n| `-` | Удаление ключа | `'{\"a\":1,\"b\":2}'::jsonb - 'a'` |\n| `#-` | Удаление по пути | `'{\"a\":{\"b\":1}}'::jsonb #- '{a,b}'` |\n\n\u003Cdetails>\u003Csummary>Практические примеры\u003C\u002Fsummary>\n\n```sql\n-- Найти клиентов с определённой настройкой\nSELECT client_id\nFROM client_settings\nWHERE settings @> '{\"theme\": \"dark\"}';\n\n-- Получить значение вложенного ключа\nSELECT settings -> 'notifications' ->> 'email' AS email_enabled\nFROM client_settings\nWHERE client_id = 1;\n\n-- Обновить отдельный ключ через jsonb_set\nUPDATE client_settings\nSET settings = jsonb_set(settings, '{theme}', '\"light\"')\nWHERE client_id = 1;\n\n-- Добавить новый ключ\nUPDATE client_settings\nSET settings = settings || '{\"language\": \"ru\"}'::jsonb\nWHERE client_id = 1;\n\n-- Полезные функции\nSELECT jsonb_pretty(settings) FROM client_settings;     -- красивый вывод\nSELECT jsonb_each(settings) FROM client_settings;       -- разбор на key-value\nSELECT jsonb_object_keys(settings) FROM client_settings; -- только ключи\nSELECT jsonb_array_elements('[1,2,3]'::jsonb);           -- разбор массива\n```\n\n\u003C\u002Fdetails>\n\n> **На собеседовании:** ключевое различие `->` и `->>`: первый возвращает jsonb (для дальнейшей навигации), второй — text (для сравнений и вывода). Для индексированного поиска используйте `@>` с GIN-индексом, а не `->>`с B-tree.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Какие операторы существуют для работы с JSONB? — Gymterview","PostgreSQL предоставляет три группы операторов для JSONB: извлечение данных, проверка вхождения и модификация. Это позволяет работать с JSON-данными без извлече","PostgreSQL предоставляет три группы операторов для JSONB: извлечение данных, проверка вхождения и модификация. Это позво",[7,13],"PostgreSQL предоставляет три группы операторов для JSONB: извлечение данных, проверка вхождения и модификация. Это позволяет работать с JSON-данными без извлечения их в приложение.",true]