Abstracción para ejecución de funciones PL/pgSQL desde Node.js con [`pg`](https://www.npmjs.com/package/pg).
npm install pg-functionsAbstracción para ejecución de funciones PL/pgSQL desde Node.js con pg.
- Ejecución de funciones PL/pgSQL de forma tipada.
- Transacciones automáticas (PgFunction) o manuales (PgFunctionTransactional).
- Tipado con genéricos para resultados ().
- Inyección de opcional de logger (compatible con pino, console, etc.).
- Basado en el Pool del proyecto consumidor.
``bash`
pnpm add pg-functions
` ts
import { Pool } from 'pg';
import { registerPool } from 'pg-functions';
registerPool(new Pool({/ ... /}))
`
sql
CREATE OR REPLACE FUNCTION fn_obtener_roles_usuario()
RETURNS TABLE (id INTEGER, nombre VARCHAR)
LANGUAGE plpgsql
AS $$
BEGIN
RETURN QUERY
SELECT "ID_ROL_USUARIO" AS id, "N_ROL_USUARIO" AS nombre
FROM "T_ROLES_USUARIO"
ORDER BY "ID_ROL_USUARIO";
END;
$$;
`$3
`ts
import { PgFunction } from 'pg-functions';type RolRecord = {
id: number;
nombre: string;
};
export const obtenerRoles = async (): Promise => {
const func = new PgFunction('fn_obtener_roles_usuario', []);
return await func.execute();
};
`Opcional: Logger personalizado
`ts
import { setLogger } from 'pg-functions';
import pino from 'pino';setLogger(pino({ level: 'info' }));
`API
| Clase | Descripción |
| ---------------------------- | ---------------------------------------------------------- |
|
PgFunction | Ejecuta funciones PL/pgSQL con control transaccional automático (BEGIN, COMMIT, ROLLBACK, RELEASE). Ideal para operaciones simples que deben ser atómicas |
| PgFunctionTransactional | Ejecuta funciones dentro de una transacción controlada manualmente. El desarrollador debe encargarse de realizar commit(), rollback() y release() usando la conexión provista. Útil cuando se deben encadenar múltiples funciones en una misma transacción |
| PgConnection | Wrapper de PoolClient con manejo de transacciones y logs |
| registerPool() | Registra el Pool global del proyecto |
| setLogger() | Define un logger personalizado |
| setSchema()` | Define el nombre del schema a utilizar de la base de datos |