Рассмотрим следующую демонстрацию:
CREATE TEMP TABLE x(item text, qty int);
INSERT INTO x VALUES
('AAAA',2)
,('EEEE',3)
,('IIII',4);
SELECT regexp_split_to_table(rtrim(repeat(item||'~#~',qty),'~#~'),'~#~') AS item
FROM x;
Дает точно запрошенный результат.
- В моих тестах он работает на порядок быстрее, чем решение с
generate_series()
. - Дополнительный бонус: работает с любым числом
qty
. - Слабость: вам нужна строка-разделитель, не содержащаяся ни в одном
item
.