ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Удаление атрибута из JSON-колонки в PostgreSQL: руководство

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для того чтобы удалить атрибут из колонки jsonb в PostgreSQL, используйте оператор -. Предположим, вы имеете таблицу my_table с колонкой json_data, и вам необходимо удалить ключ 'unwanted_key'. Для этого произведите следующий запрос:

SQL
Скопировать код
UPDATE my_table
SET json_data = json_data – 'unwanted_key'
WHERE json_data ? 'unwanted_key';

Таким образом, ключ 'unwanted_key' будет удалён из всей колонки json_data, где он присутствует.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Эффективное управление параллельными обновлениями

Работая с параллельными обновлениями, важно принимать во внимание уровни изоляции транзакций и предупреждать возникновение проблем, связанных с блокировками.

Если требуется удалить один ключ и в то же время добавить или обновить другой, можно воспользоваться оператором ||. Пример такого обновления:

SQL
Скопировать код
UPDATE my_table
SET json_data = (json_data – 'unwanted_key') || '{"new_key": "new_value"}'::jsonb
WHERE json_data ? 'unwanted_key';

Работа с типами данных JSON и JSONB

Если вы используете тип данных json, преобразуйте его в jsonb для удобства использования операций с JSONB, предоставляемых PostgreSQL:

SQL
Скопировать код
UPDATE my_table
SET json_data = json_data::jsonb – 'unwanted_key'
WHERE json_data::jsonb ? 'unwanted_key';

Помните, что для использования возможностей JSONB вам потребуется версия PostgreSQL 9.4 или более поздняя.

Работа с вложенными структурами JSON

Для работы с вложенными структурами используйте оператор #-, который позволяет удалить элементы по указанному пути:

SQL
Скопировать код
UPDATE my_table
SET json_data = json_data #- '{nested,unwanted_key}'::text[]
WHERE json_data @> '{"nested":{"unwanted_key":"value"}}'::jsonb;

Безопасность превыше всего: Тестируйте и снова тестируйте

Прежде чем применять глобальные обновления, обязательно протестируйте их на отдельной выборке данных или на клоне базы данных. Никогда не забывайте о важности резервного копирования.

Для сложных операций с JSON создавайте функции PL/pgSQL для стандартизации и упрощения последующей поддержки.

Визуализация

Восприятие объекта JSON можно сравнить с набором инструментов, где каждый ключ — это отдельный инструмент:

Markdown
Скопировать код
До: 🧰 {
  "молоток" 🔨, 
  "пила" 🪚, 
  "гаечный ключ" 🔧
}

Операция: -🔧 (Удалить гаечный ключ)

После: 🧰 {
  "молоток" 🔨, 
  "пила" 🪚
}

Разъяснение операторов JSON

Оператор - удаляет пару ключ-значение из объекта JSONB, оператор || объединяет JSONB-объекты, а #- удаляет вложенные элементы.

Рекомендации для непрерывной работы

Особое внимание следует уделить неизменяемым колонкам, обработке null и пустых объектов, влиянию больших объемов данных на производительность и корректному приведению типов данных между json и jsonb.

Полезные материалы

  1. PostgreSQL: Documentation: 16: 8.14. Типы данных JSON — подробное руководство по работе с JSON в PostgreSQL.
  2. JSON – PostgreSQL wiki — обзор функций и операторов JSON в PostgreSQL.
  3. Обсуждение на Stack Overflow — обмен знаниями и опытом с коллегами.