PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come eseguire una query di selezione in un blocco DO?

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