Utilisez generate_series()
:
select gs.i, t.*
from t cross join lateral
generate_series(start_i, end_i, 1) gs(i);
A proprement parler, le lateral
n'est pas nécessaire. Mais ça explique ce qui se passe. Je dois également noter que vous pouvez également faire :
select generate_series(start_i, end_i) as i, t.*
from t;
Cependant, generate_series()
affecte le nombre de lignes dans la requête. Je ne suis pas à l'aise avec de tels effets dans le SELECT
clause.