sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo realizar una consulta de selección en un bloque DO?

DO comando frente a función PL/pgSQL

El DO El comando no devuelve filas. Puede enviar NOTICES o RAISE otros mensajes (con lenguaje plpgsql) o puede escribir en una tabla (temporal) y luego SELECT de él para evitar esto.

Pero en realidad, cree una función (plpgsql) en su lugar, donde puede definir un tipo de retorno con RETURNS cláusula o OUT / INOUT parámetros y retorno de la función de varias maneras.

Si no quiere una función guardada y visible para otras conexiones, considere una función "temporal", que es una característica no documentada pero bien establecida:

  • ¿Cómo crear una función temporal en PostgreSQL?

generate_series() para el problema en cuestión

Para el problema en cuestión, parece que no necesita ninguna de esta. Utilice esta consulta simple en su lugar:

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<>violín aquí

¿Por qué?

  • Generando series de tiempo entre dos fechas en PostgreSQL