Моя любимая функция PostgreSQL — unnest (ссылка на документацию)! Она такая простая, но такая классная 😀
Она очень пригодится, если нужно вставить сразу несколько записей за один присест. Допустим, у одной фирмы есть несколько номеров телефонов и,чтобы не перечислять вставку этих данных через запятую, дублируя id фирмы, можно использовать unnest — элегантное решение!
Пусть у нас есть таблица telephone_numbers:
Для фирмы с id = 5 надо вставить 5 номеров телефона: 123, 456, 789, 147, 258.
Через перечисление:
Муторно же 🙂
Используя unnest(array):
Функция раскладывает значения, указанные в массиве array[] на строки, таким образом, автоматически формируя вставку значений через перечисление.
Это очень удобно, когда нам необходимо вставить за раз несколько массивов данных. Тогда они будут последовательно связаны друг с другом. Например, следующая конструкция
будет эквивалентна записи:
Если в таком перечислении будет неравное количество элементов, недостающие будут заменены на null.
Очень удобно использование unnest при формировании скрипта в коде. Например, в Qt:
Перечислять массивы внутри функции можно через запятую. И вот такая инструкция
превращается в такую выборку: