pilot_name |
schedule |
meal
------------+-------------+-------------------------
Ivan
| {1,3,5,6,7} | {сосиска,макароны,кофе}
Pavel
| {2,5}
| {сосиска,каша,кофе}
(2 строки)
Предположим, что руководство авиакомпании решило, что пища пилотов долж-
на быть разнообразной. Оно позволило им выбрать свой рацион на каждый из
четырех дней недели, в которые пилоты совершают полеты. Для нас это ре-
шение руководства выливается в необходимость модифицировать таблицу, а
именно: столбец meal теперь будет содержать двумерные массивы. Определе-
ние этого столбца станет таким:
meal text[][]
Задание.
Создайте новую версию таблицы и соответственно измените коман-
ду INSERT, чтобы в ней содержались литералы
двумерных
массивов. Они будут
выглядеть примерно так:
'{ { "сосиска", "макароны", "кофе" },
{ "котлета", "каша", "кофе" },
{ "сосиска", "каша", "кофе" },
{ "котлета", "каша", "чай" } }'::text[][]
Сделайте ряд выборок и обновлений строк в этой таблице. Для обращения к эле-
ментам двухмерного массива нужно использовать два индекса. Не забывайте,
что по умолчанию номера индексов начинаются с единицы.
34. В тексте раздела 4.6 мы выполняли обновление JSON-объекта с помощью функ-
ции jsonb_set: добавляли значение в массив. Для обновления скалярных значе-
ний, например, по ключу trips, можно сделать так:
UPDATE pilot_hobbies
SET hobbies = jsonb_set( hobbies, '{ trips }', '10' )
WHERE pilot_name = 'Pavel';
UPDATE 1
Второй параметр функции — это путь в пределах JSON-объекта. Он теперь пред-
ставляет собой лишь имя ключа. Однако его необходимо заключить в фигурные
скобки. Третий параметр — это новое значение. Хотя оно числовое, но все равно
требуется записать его в одинарных кавычках.
Достарыңызбен бөлісу: