Доброго здоровья читателям моего канала programmer's notes. Поддерживаем мой канал.
Тип array в базах данных PostgreSQL
Интересный вопрос, я человек старой формации и привык, что массив хранится как таблица, а тут в одном поле целый массив. Стоит взять на вооружение.
Создание таблицы с массивами
Синтаксис создания таблицы со столбцами-массивами довольно прост
create table table1 (
id serial primary key,
nm text,
arr1 text[],
arr2 integer[][]
);
Как видим у нас два столбца-массива. arr1 — одномерный массив, arr2 — двумерный массив. При создании мы не указываем размерность массива, но фиксируем тип элементов массива.
Добавление и изменения данных в таблице с массивами
Рассмотрим теперь вопрос о добавлении элементов к такой таблице.
insert into table1
(nm, arr1, arr2)
values
('qwerty',
'{"Иванов", "Петров", "Сидоров"}',
'{{1, 2, 3}, {100, 200, 300}, {1000, 2000, 3000}}'
);
С точки зрения синтаксиса для человека, занимающегося программированием, здесь нет никаких особых проблем. Обращаем только внимание на неожиданное использование двойных кавычек. Раньше мы говорили, что двойные кавычки используются для обозначения имён объектов базы данных. Но, как видим, в данном случае они используются для ввода строковых элементов массива. Логика использования здесь понятна, так как есть ещё и внешние одинарные кавычки. Продолжим рассматривать команду добавления строк в таблицу с массивами.
insert into table1
(nm, arr1, arr2)
values
('abcdeh',
'{"Иванов", "Петрова", "Сидорова", "Мухина"}',
'{{11, 21, 31, 1}, {101, 201, 301, 2}, {1001, 2001, 3001, 3}}'
);
Обратите внимание, мы изменили размерность массива arr1. Это вполне допускаемая операция, аналогично мы изменили количество столбцов в массиве arr2. Отметим только обязательное требование: количество элементов в строках двумерного массива должно быть одинаково. Перед нами именно массив в классическом его понимании, а не список, позволяющий более вольно обращение со своими строками. Становится, кстати, понятным, почему мы не указывали размерность массива при создании таблицы: она может меняться от строки к строке.
Рассмотрим команду update, применительно к таблице с массивами.
update table1
set arr1[1]='Латунский'
where arr2[2][2]=201;
На что следует обратить внимание. Нумерация элементов массива всегда начинается с единицы. Поэтому данный запрос выполниться корректно, изменения будут касаться второй добавленной строки таблицы. Как видим доступ к элементам массива таблицы прост и интуитивно понятен.
Доступ к данным в таблице с массивами
Рассмотрим, в начале простую команду select
select * from table1
Результат см. на рисунке 1.
Конечно, можно выводить конкретный массив или его элемент
select arr1[2], arr2[2][1]
from table1
where nm='qwerty';
Вопрос о хранении массивов в базах данных PostgreSQL не закончен. Важный вопрос, к которому я обращусь в ближайшее время: как это будет работать с точки зрения клиента.
Пока всё!
Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.