ARRAY в PostgreSQL: работа с массивами

Массивы (ARRAY) в PostgreSQL представляют собой коллекции однотипных данных, хранящиеся в виде одного значения. Они позволяют эффективно управлять списками значений и упростить хранение структурированной информации.

Создание таблицы с полем массива

Создание таблицы с полем типа массив осуществляется следующим образом:

CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    tags TEXT[]
);

Вставка данных в массив

Для вставки значений в поле-массив используется следующий синтаксис:

INSERT INTO products (tags) VALUES ('{"electronics", "gadgets", "mobile"}');

Альтернативный вариант:

INSERT INTO products (tags) VALUES (ARRAY['electronics', 'gadgets', 'mobile']);

Запрос данных из массива

Извлечь элемент массива по индексу:

SELECT tags[1] FROM products;

Получение всех элементов массива:

SELECT unnest(tags) FROM products;

Поиск в массиве

Поиск записей по наличию элемента в массиве:

SELECT * FROM products
WHERE 'electronics' = ANY(tags);

Аналогично используется оператор @> для проверки наличия нескольких значений:

SELECT * FROM products
WHERE tags @> ARRAY['electronics', 'mobile'];

Обновление элементов массива

Обновить конкретный элемент массива:

UPDATE products
SET tags[2] = 'accessories'
WHERE id = 1;

Добавить элемент к существующему массиву:

UPDATE products
SET tags = array_append(tags, 'new_tag')
WHERE id = 1;

Удаление элемента массива

Удалить элемент массива по значению:

UPDATE products
SET tags = array_remove(tags, 'gadgets')
WHERE id = 1;

Индексация массива

Создание индекса для ускорения поиска по массиву:

CREATE INDEX idx_products_tags ON products USING GIN(tags);

Преимущества использования массивов

  • Упрощение структуры таблиц.
  • Гибкость и эффективность хранения связанных данных.
  • Возможность работы со списками без дополнительных таблиц.