Use
generate_series()
:select gs.i, t.*
from t cross join lateral
generate_series(start_i, end_i, 1) gs(i);
Estritamente falando, o
lateral
Não é necessário. Mas explica o que está acontecendo. Devo também notar que você também pode fazer:select generate_series(start_i, end_i) as i, t.*
from t;
No entanto,
generate_series()
afeta o número de linhas na consulta. Não me sinto confortável em ter esses efeitos no SELECT
cláusula.