Столбцы в таблице в PostgreSQL могут представлять массивы, например, массивы чисел INTEGER или массивы строк VARCHAR или массивы других типов данных. Рассмотрим, как работать с массивами в PostgreSQL.
Вначале определим простейшую таблицу:
create table posts( id serial primary key, title varchar(30), body text, tags varchar(10)[] );
Таблица posts будет хранить условные статьи, где столбец title хранит заголовок статьи, body - ее текст, а tags - список тегов статьи. Причем столбец tags представляет массив данных varchar(10), то есть строк. Для определения массива после названия типа указываются квадратные скобки.
Добавим в эту таблицу одну статью с набором тегов:
insert into posts(title, body, tags) values('Post Title', 'Post Text', '{"sql", "postgres", "database", "plsql"}');
Массив определяется в кавычках, как и строка, но внутри кавычек все элементы массива помещаются в фигурные скобки. Каждый отдельный элемент массива заключается в двойные кавычки. То есть в данном случае в массиве четыре элемента: "sql", "postgres", "database" и "plsql".
Как и данные любого другого столбца, мы можем извлечь данные массива:
select tags from posts;
Однако с помощью индексов мы также можем конкретизировать, какие именно элементы массива мы хотим получить:
select tags[0:3] from posts;
Индексы указываются в скобках через двоеточие. Вначале идет индекс начала диапазона, а затем индекс конца диапазона. То есть в данном случае извлекаем три тега с первого по третий.
При обновлении строки мы можем изменять как в целом все теги, так и какие-то конкретные теги. Например, удалим все теги:
update posts set tags='{}' where id=1;
Переустановим массив:
update posts set tags='{"sql", "postgres", "database"}' where id=1;
Переустановим конкретный элемент, например, второй:
update posts set tags[2]='system' where id=1;