gpt4 book ai didi

Ruby TCP 服务器 - 错误:PG::ConnectionBad:致命:剩余的连接槽保留用于非复制 super 用户连接

转载 作者:可可西里 更新时间:2023-11-01 02:51:07 25 4
gpt4 key购买 nike

我已经编写了一个从终端设备接收数据包的 tcp 服务器。 TCP 服务器解释数据并使用 postgres 将其保存在数据库中。

tcp 服务器是多线程的。我打开数据库连接并保存数据时的代码示例如下所示;

conn = Sequel.connect('postgres://xxxxx:xxxxxxxxxx@127.0.0.1:xxxxx/xxxxxxxxx',:max_connections => 100) # requires pg
transactions = conn.from(:transactions)
if transactions.insert(serial_number: card_serial, balance_before: balance_before, amount: transaction_amount, balance_after: balance_after, transaction_time: time, terminal_number: terminal_number, terminal_type: terminal_type, created_at: Time.now, updated_at: Time.now)
response = {message: "TT01000080", status: "SUCCESS" }
return response
else
response = {message: "", status: "FAILED" }
return response
end

在几个数据包之后,数据库会产生这样的错误;ERROR:PG::ConnectionBad: FATAL: 剩余连接槽保留给非复制 super 用户连接

即使添加行 conn.disconnect 也无助于解决问题。

最佳答案

每次要创建记录时都连接到数据库的想法并不是最好的方法。考虑将其更改为某个连接池。

但如果你仍然想每次都连接,请尝试使用 connect 的 block 形式,这将确保连接在 block 完成后关闭。

你的代码中也没有关闭/断开连接,也许你把它放在 return 调用之后(这意味着它没有被执行)

尝试这样的事情:

response = nil
Sequel.connect('postgres://xxxxx:xxxxxxxxxx@127.0.0.1:xxxxx/xxxxxxxxx',:max_connections => 100) do |conn| # requires pg
transactions = conn.from(:transactions)
if transactions.insert(serial_number: card_serial, balance_before: balance_before, amount: transaction_amount, balance_after: balance_after, transaction_time: time, terminal_number: terminal_number, terminal_type: terminal_type, created_at: Time.now, updated_at: Time.now)
response = {message: "TT01000080", status: "SUCCESS" }
else
response = {message: "", status: "FAILED" }
end
end
return response

关于Ruby TCP 服务器 - 错误:PG::ConnectionBad:致命:剩余的连接槽保留用于非复制 super 用户连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38097012/

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