gpt4 book ai didi

postgresql - 如何在 Vercel 无服务器函数中处理 Postgres 连接池? (“too many connections for role” )

转载 作者:行者123 更新时间:2023-12-03 19:17:59 26 4
gpt4 key购买 nike

我有一个基于此模板构建的小型业余爱好网络应用程序:https://github.com/tomsoderlund/nextjs-pwa-graphql-sql-boilerplate
它使用 ElephantSQL 的免费层(5 个连接),在 Zeit Now v2 无服务器功能上运行 - 并且不断耗尽 Postgres 连接(“ 角色“djsktctf”的连接过多 ”)。
我正在使用 death NPM 关闭连接 - 这是在 /api/graphql/index.js :

const { ApolloServer, gql } = require('apollo-server-micro')
const { config } = require('../../config/config')

// Postgres (pg)
const { Pool } = require('pg')
const onProcessDeath = require('death')
const pool = new Pool({ connectionString: config.databaseUrl })
let client

const initDatabaseClient = async () => {
if (!client) client = await pool.connect()
}
initDatabaseClient()

onProcessDeath((signal, err) => {
client && client.release()
})

const typeDefs = gql`
${require('../../graphql/font/schema')}
`

const resolvers = {
...require('../../graphql/font/resolvers')(pool)
}

const server = new ApolloServer({
typeDefs,
resolvers,
introspection: true,
playground: true
})

module.exports = server.createHandler({ path: config.graphqlPath })
然后在里面 resolvers它看起来像这样:
module.exports = (pool) => ({
Query: {
async articles (parent, variables, context, info) {
const sqlString = `SELECT * FROM article LIMIT 100;`
const { rows } = await pool.query(sqlString)
return rows
}
}
如何改进这一点以避免连接用完?
更新
得到下面的答案后,我用 client.end() 更新了我的代码并且不使用共享客户端:
// const results = await runDatabaseFunction(async (pool) => { ... })
const runDatabaseFunction = async function (functionToRun) {
// Connect db
const client = await pool.connect()
// Run function
const results = await functionToRun(client)
// Release db
await client.end()
await client.release()
return results
}

最佳答案

我认为这个问题来自client = await pool.connect()它似乎持有你的数据库。所以你需要断开你和数据库之间的某些东西。
如果您添加 await client.end()在您最后一次获取数据后,错误可能会消失。
就我而言,这种方式解决了问题。

关于postgresql - 如何在 Vercel 无服务器函数中处理 Postgres 连接池? (“too many connections for role” ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60136099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com