【问题标题】:node-postgres script does not end after it is finishednode-postgres 脚本在完成后不会结束
【发布时间】:2022-02-17 20:41:20
【问题描述】:

我有一个名为scheduler() 的脚本,它在 Postgres 数据库上运行一些查询,然后完成。我遇到了脚本挂在终端中并且之后不退出的问题。

这是我的代码:

scheduler.js

const {pool} = require("./db");
const scheduler = async function() {
    try {
        await auctionCheck();
        return pool.end().then(() => {
            console.log('Pool\'s closed');
            return;
        })

    } catch (e) {
        console.error(e)
        return;
    }

}
return scheduler();

db.js

const {Pool} = require("pg");
const pool = new Pool({
    connectionString: process.env.DATABASE_URL,
});

pool.on('error', (err, client) => {
    console.error('Unexpected error on idle client', err)
    process.exit(-1)
})

pool.connect();

module.exports = {pool};

当我没有pool.end() 调用时,我的脚本没有退出,但它也没有通过end() 调用退出。永远不会打印“池已关闭”日志。 node-pg documentation 说我应该这样做来关闭连接(我假设我的脚本没有完成的原因是由于打开的数据库连接。)我想基本上定期运行一些函数然后让脚本完成,但目前它只是活着。我做错了什么?

【问题讨论】:

    标签: node.js node-postgres node-pg-pool


    【解决方案1】:

    似乎原因是在db.js 我有pool.connect()。因此,当我执行pool.end() 时,它无法关闭连接,因为池中没有所有客户端——一个已经在db.js 中创建但从未释放。当我在db.js 中删除pool.connect() 时,进程正常退出。

    【讨论】:

    • 您可能使用了pool.connect() 方法,但重要的是通过调用client.release() 释放返回的客户端。我假设一旦客户端被释放,pool.end() 函数也会终止。
    猜你喜欢
    • 2021-08-18
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    相关资源
    最近更新 更多