PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como realizar uma consulta de seleção em um bloco DO?

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