UNPKG

@opengis/fastify-table

Version:

core-plugins

63 lines (62 loc) 2.11 kB
import pg from "pg"; import logger from "../../../plugins/logger/getLogger.js"; const { types } = pg; types.setTypeParser(1082, (stringValue) => stringValue); types.setTypeParser(1114, (stringValue) => stringValue); import pgClients from "../pgClients.js"; import init from "./init.js"; import config from "../../../../config.js"; config.ready = config.ready || {}; export const Pools = {}; export default (param = {}) => { if (!config.pg) return null; const { name = param.database || "client" } = param; // return inited client if (pgClients[name]?.tlist) return pgClients[name]; // return non-inited client if (Pools[name]) return Pools[name]; const pool = new pg.Pool(param); pool.on("release", () => { if (config.trace) { console.log("PG client released", param.database); } }); pool.on("error", (err) => { console.warn("⚠️ Unexpected error on idle client", param.database); config.ready[`pg:${param.database}`] = false; logger.file("pg", { error: err.toString(), database: param.database, }); if (config.trace) { console.warn("⚠️ Unexpected error on idle client details:", err.toString(), err.stack); } }); pool.on("connect", () => { // skip auto drops and reconnects handled by pg internally if (!config.ready[`pg:${param.database}`]) { logger.file("pg", { message: "client connected", database: param.database, }); config.ready[`pg:${param.database}`] = true; } if (config.trace) { console.log("PG client connected", param.database); } // handle delayed connect to database? if (pgClients[name] && !pgClients[name]?.tlist) { init(Pools[name]); } Pools[name] = pool; }); if (config.trace) { pool.on("remove", () => { console.log("PG Client removed from the pool.", param.database); }); } return pool; };