Puntos clave de la corrección:
Se inicializa correctamente tiempoInicio
con CLOCK_TIMESTAMP()
.
Se usa parametrosSeguimiento
con la ortografía correcta.
Se asegura que table_tmp
y tablaorigenDato
coincidan en nombres de columnas.
Se usa dato AS id
en la salida JSON para que coincida con la estructura esperada
Explicación de la función PL/pgSQL en PostgreSQL
La función esquema.funcion(usuario INTEGER)
realiza las siguientes acciones:
- Registra la ejecución en un log
- Crea una tabla temporal para almacenar resultados
- Inserta datos desde una tabla origen (
esquema.tablaorigenDato
) - Retorna los datos en formato JSON
- Actualiza el log con el tiempo de ejecución
1. Definición de la función
- Se define una función almacenada en PostgreSQL dentro del esquema
esquema
. - Acepta un parámetro entero
usuario INTEGER
. - Retorna una tabla con una columna
data
de tipo JSON. - Usa PL/pgSQL como lenguaje.
2. Declaración de variables
funcionEjecutada
: Guarda el nombre de la función en ejecución.parametrosSeguimiento
: Almacena información del usuario que llamó la función.ultimoRegistro
: Guarda ellog_id
generado en el log.tiempoInicio
: Captura el tiempo de inicio de la función conCLOCK_TIMESTAMP()
.
3. Inserción en la tabla de logs
- Inserta un registro en la tabla
"log".log
, guardando:funcionEjecutada
: Nombre de la función.parametrosSeguimiento
: Información del usuario.datoEjecucion
: Hora de inicio (tiempoInicio
).usuario
: ID del usuario.creacion
: Fecha/hora actual (CURRENT_TIMESTAMP
).
RETURNING log_id INTO ultimoRegistro
: Obtiene el ID del log insertado.
4. Creación de la tabla temporal
- Se crea una tabla temporal
table_tmp
con dos columnas:dato
: Un entero.indicacion
: Un texto de hasta 250 caracteres.
ON COMMIT DROP
: La tabla se elimina automáticamente al finalizar la transacción.
5. Inserción de datos en la tabla temporal
- Se copian datos desde
esquema.tablaorigenDato
atable_tmp
, filtrando solo los registros activos (active = TRUE
).
6. Retorno de los datos en formato JSON
- Se construye un JSON con
json_build_object
:'msg'
: Mensaje"Consulta Exitosa"
.'success'
: Valor1
(indicando éxito).'data'
: Se obtiene conjson_agg(row_to_json(c))
, transformando los resultados en un array de objetos JSON.COALESCE(..., '[]'::JSON)
: Si no hay datos, devuelve un array vacío[]
.
Ejemplo de salida JSON:
7. Actualización del log con el tiempo de ejecución
- Se actualiza el registro del log con:
execution_end_date
: Hora final de ejecución.updated_at
: Última actualización del registro.execution_time
: Tiempo de ejecución en milisegundos.
Resumen del flujo de la función
- Registra la ejecución en el log con la información del usuario.
- Crea una tabla temporal para almacenar datos.
- Obtiene datos desde
esquema.tablaorigenDato
y los guarda entable_tmp
. - Convierte los datos en JSON y los retorna como resultado de la función.
- Actualiza el log con el tiempo total de ejecución.
Es una función útil para registrar consultas y mejorar el seguimiento de la ejecución en PostgreSQL.