Използвайте generate_series()
:
select gs.i, t.*
from t cross join lateral
generate_series(start_i, end_i, 1) gs(i);
Строго казано, lateral
не е необходимо. Но обяснява какво се случва. Трябва също да отбележа, че можете също да направите:
select generate_series(start_i, end_i) as i, t.*
from t;
Въпреки това, generate_series()
засяга броя на редовете в заявката. Не ми е удобно да имам такива ефекти в SELECT
клауза.