DO
comando vs. função PL/pgSQL
O
DO
comando não retorna linhas. Você pode enviar NOTICES
ou RAISE
outras mensagens (com linguagem plpgsql) ou você pode escrever em uma tabela (temporária) e depois SELECT
dele para contornar isso. Mas, na verdade, crie uma função (plpgsql), onde você pode definir um tipo de retorno com o
RETURNS
cláusula ou OUT
/ INOUT
parâmetros e retornar da função de várias maneiras. Se você não quiser uma função salva e visível para outras conexões, considere uma função "temporária", que é um recurso não documentado, mas bem estabelecido:
- Como criar uma função temporária no PostgreSQL?
generate_series()
para o problema em questão
Para o problema em questão, você não parece precisar de nenhum disto. Use esta consulta simples em vez disso:
SELECT row_number() OVER () AS running_month
, extract('year' FROM m) AS year
, extract('month' FROM m) AS month
FROM generate_series(timestamp '2012-04-01'
, timestamp '2016-01-01'
, interval '1 month') m;
db<>mexa aqui
Por quê?
- Gerando séries temporais entre duas datas no PostgreSQL