PostgreSQL + JSONB + Ruby

PostgreSQL + JSONB + Ruby

Содержание
  1. Введение
  2. JSONB в PostgreSQL
  3. JSONB в Ruby On Rails
  4. Запрос
  5. Обновить
  6. Создать
  7. Заключение

Введение

PostgreSQL - это реляционная система управления базами данных с открытым исходным кодом, которая в последние годы приобрела огромную популярность благодаря своим мощным и гибким возможностям. Одной из таких возможностей является тип данных JSONB, который позволяет пользователям хранить и извлекать данные в формате JSON в реляционной базе данных. В этой статье мы рассмотрим, как работает JSONB в Postgres и как его можно использовать в связке с Rails.

JSONB в PostgreSQL

JSONB расшифровывается как “JSON Binary” и представляет собой двоичное представление данных JSON. Оно позволяет пользователям хранить, запрашивать и индексировать данные JSON в реляционной базе данных, как и любой другой тип данных. JSONB отличается от стандартного типа данных JSON тем, что хранит данные в двоичном формате, что позволяет эффективнее хранить и запрашивать большие наборы данных JSON.

JSONB - это мощный тип данных, который позволяет хранить и запрашивать сложные структуры данных JSON. Он поддерживает все стандартные типы данных JSON, такие как строки, числа, булевы, массивы и объекты. Кроме того, он позволяет хранить и запрашивать вложенные структуры данных JSON, что может быть полезно для представления сложных наборов данных.

JSONB в Ruby On Rails

Rails предоставляет набор инструментов и соглашений, которые позволяют быстро и эффективно создавать веб-приложения. В Rails встроена поддержка PostgreSQL, включая поддержку типа данных JSONB.

Rails позволяет хранить и извлекать данные JSONB в базе данных с помощью ActiveRecord - слоя ORM (Object-Relational Mapping), который Rails использует для взаимодействия с базами данных. ActiveRecord предоставляет набор методов для работы с данными JSONB, включая методы для запроса, обновления и создания данных JSONB.

Запрос

Чтобы запросить JSONB-данные в Rails, мы можем использовать метод where для объекта отношения ActiveRecord. Метод where принимает хэш пар ключ-значение, которые представляют условия, по которым мы хотим отфильтровать данные.

Например, предположим, что у нас есть таблица users, содержащая столбец metadata, в котором хранятся JSONB-данные, представляющие метаданные пользователя. Мы можем запросить эти данные с помощью следующего кода:

users = User.where("metadata ->> 'country' = ?", 'USA').

В этом коде мы запрашиваем таблицу users и фильтруем по значению ключа country в метаданных JSONB. Мы используем оператор ->> для извлечения значения ключа country в виде строки и сравниваем его со строкой ‘USA’.

Мы также можем запрашивать вложенные структуры данных JSONB с помощью оператора ->. Например, предположим, что у нас есть вложенная структура данных JSONB, представляющая контактную информацию пользователя:

metadata = { "name": "Джон Смит", "email": "john@example.com", "phone": { "home": "555-1234", "рабочий": "555-5678" } }

Мы можем запросить номер телефона пользователя с помощью следующего кода:

users = User.where("metadata -> 'phone' ->> 'home' = ?", '555-1234').

В этом коде мы запрашиваем таблицу users и фильтруем по значению ключа home в объекте phone в метаданных JSONB.

Обновить

Для обновления JSONB-данных в Rails мы можем использовать метод update для объекта ActiveRecord. Метод update принимает хэш пар ключ-значение, которые представляют изменения, которые мы хотим внести.

Например, предположим, что мы хотим обновить метаданные JSONB-данных для пользователя с идентификатором 1. Мы можем сделать это с помощью следующего кода:

user = User.find(1) user.update(metadata: { "country": "Canada" }).

В этом коде мы находим пользователя с идентификатором 1 с помощью метода find и обновляем данные метаданных JSONB, чтобы установить значение ключа country в ‘Canada’ с помощью метода update.

Мы также можем обновлять вложенные структуры данных JSONB с помощью оператора ->. Например, предположим, что мы хотим обновить номер телефона пользователя:

user.update("metadata -> 'phone' ->> 'home'" => '555-4321').

В этом коде мы обновляем значение ключа home в объекте phone в метаданных JSONB до ‘555-4321’ с помощью метода update.

Создать

Для создания JSONB-данных в Rails мы можем использовать метод create в модели ActiveRecord. Метод create принимает хэш пар ключ-значение, которые представляют данные, которые мы хотим создать.

Например, предположим, что мы хотим создать нового пользователя с метаданными, представляющими его страну и номер телефона:

user = User.create(metadata: { "country": "USA", "phone": { "home": "555-1234" } }).

В этом коде мы создаем нового пользователя с метаданными, включающими ключ страны со значением ‘USA’ и объект телефона с ключом home и значением ‘555-1234’.

Заключение

JSONB - это мощный тип данных, который позволяет хранить и запрашивать JSON-данные в реляционной базе данных. Он поддерживается в PostgreSQL и может быть использован в сочетании с Rails для создания мощных веб-приложений. В этой статье мы рассмотрели, как запрашивать, обновлять и создавать данные JSONB в Rails с помощьюg ActiveRecord. Мы также привели примеры запросов к вложенным структурам данных JSONB и обновления вложенных структур данных JSONB. Используя JSONB в сочетании с Rails, пользователи могут создавать мощные и гибкие веб-приложения, способные с легкостью работать со сложными структурами данных.

Источник