PostgreSQL error: Connection terminated unexpectedly for long queries

PostgreSQL error: Connection terminated unexpectedly for long queries

我正在尝试使用以下函数将数万个 Twitter 配置文件添加到 PostgreSQL 数据库。 Twitter 部分效果很好——我得到了 5000 个 id 的批次,将它们推送到主数组 allFollowers,然后在达到 API 速率限制时暂停 15 分钟(在获取 75000 个配置文件之后),然后再获取下一个一批关注者。

问题是,我认为,当函数暂停 15 分钟时,数据库连接关闭。当函数完成 运行ning 时,我收到错误 Connection terminated unexpectedly。当我 运行 在拥有不到 75000 名关注者的 Twitter 帐户上进行此操作时,它不必暂停,没有任何问题。

我正在使用 pg-promise with the default options. I've tried many of the suggestions in this post 连接到数据库 - 即一个巨大的 idleTimeoutMillis 值(比函数到达 运行 所需的时间长)或将其设置为 0,但是没有运气。它们的性能似乎都与默认设置相同。

我还尝试在 await addProfiles 行之前显式调用 db.connect(),但这也没有改变任何东西。

async function getTwitterFollowers() {
    const allFollowers = []
    const targetAccount = 'TwitterDev'

    await getGroupOfFollowers(-1) // Default cursor for the Twitter API is -1

    async function getGroupOfFollowers(cursor) {
        await T.get('followers/ids', {
            screen_name: targetAccount,
            stringify_ids: true,
            cursor: cursor,
            count: 5000,
        })
            .then(async (res) => {
                const followerIds = await res.data.ids
                followerIds.map((id) => {
                    allFollowers.push(id)
                })

                // Paginate and get the next 5000 followers if the first page is full
                if (followerIds.length === 5000) {
                    await getGroupOfFollowers(res.data.next_cursor)
                }
            })
            .catch(async (err) => {
                // This is expected to fail due to Twitter rate limiting, so we pause and try again
                // This is why the queries are so long
                console.error('Trying again in 15 mins.', err.twitterReply.errors[0].message)

                // Pause for 15 mins
                await new Promise((resolve) => setTimeout(resolve, 900000))

                // Try again
                await getGroupOfFollowers(cursor)
            })
    }

    // It could take many hours to get to this point for large Twitter accounts
    try {
        await addProfiles(
            allFollowers.map((id) => ({
                id: id,
                added: new Date(),
            }))
        )

        console.log(`Added/updated ${allFollowers.length} profiles to the database`)
    } catch (err) {
        console.error("Error adding target accounts' followers to the database.", err)
        // This is the "Error: Connection terminated unexpectedly"
    }

    return allFollowers
}

我想知道我的问题是否出在数据库启动选项中(同样,我使用所有默认设置,因为其他建议的答案不起作用),或者以其他方式保持连接。将不胜感激。

原来它只是一个 Railway issue (the PostgreSQL host I was using). The same issue appears when using Render 和其他类似的平台。使用 AWS 或 Google 云按预期工作。