DO
comando rispetto alla funzione PL/pgSQL
Il DO
il comando non restituisce le righe. Puoi inviare NOTICES
o RAISE
altri messaggi (con lingua plpgsql) oppure puoi scrivere su una tabella (temporanea) e successivamente SELECT
da esso per aggirare questo.
Ma in realtà, crea invece una funzione (plpgsql), dove puoi definire un tipo restituito con RETURNS
clausola o OUT
/ INOUT
parametri e ritorno dalla funzione in vari modi.
Se non vuoi che una funzione sia salvata e visibile per altre connessioni, considera una funzione "temporanea", che è una caratteristica non documentata ma ben consolidata:
- Come creare una funzione temporanea in PostgreSQL?
generate_series()
per il problema a portata di mano
Per il problema in questione non sembra che tu ne abbia bisogno nessuno di questo. Usa invece questa semplice query:
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<>gioca qui
Perché?
- Generazione di serie temporali tra due date in PostgreSQL