Составные типы данных

Массивы

Последнее обновление: 22.03.2018

Столбцы в таблице в 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"}');
Массивы в PostgreSQL

Массив определяется в кавычках, как и строка, но внутри кавычек все элементы массива помещаются в фигурные скобки. Каждый отдельный элемент массива заключается в двойные кавычки. То есть в данном случае в массиве четыре элемента: "sql", "postgres", "database" и "plsql".

Как и данные любого другого столбца, мы можем извлечь данные массива:

select tags from posts;

Однако с помощью индексов мы также можем конкретизировать, какие именно элементы массива мы хотим получить:

select tags[0:3] from posts;

Индексы указываются в скобках через двоеточие. Вначале идет индекс начала диапазона, а затем индекс конца диапазона. То есть в данном случае извлекаем три тега с первого по третий.

Arrays in PostgreSQL

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

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;
Обновление массива в PostgreSQL
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850