@opengis/fastify-table
Version:
core-plugins
63 lines (62 loc) • 2.11 kB
JavaScript
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;
};