我通过libpqxx实例化PostgreSQL连接。我查询数据库并获得正确的响应。之后我尝试了以下错误情况:在创建了pqxx :: connection的实例之后,我暂停了我的程序,从Linux的命令shell手动终止Postgre的连接过程并恢复程序。它一直持续到它尝试创建新的事务pqxx :: work,它抛出pqxx :: broken_connection。我处理此异常并尝试重新连接到pqxx :: connection :: activate()的调用,但抛出另一个pqxx :: broken_connection。如何重新连接到数据库而不实例化另一个pqxx :: connection?
P.S。重新激活不受禁止。我使用标准连接类型 -
namespace pqxx
{
typedef basic_connection<connect_direct> connection;
}
答案 0 :(得分:1)
好的,没有人回答。我注意到在连续多次调用pqxx :: connection :: activate后手动终止连接后的进程后,它重新连接,这就是我的解决方法。
class dbconnection : public pqxx::connection
{
public:
dbconnection(std::string options) : pqxx::connection(options) { };
void reconnect()
{
static int times = 0;
try
{
times++;
if(!this->is_open())
{
this->activate();
}
times = 0;
}
catch(const pqxx::broken_connection & e)
{
if(times > 10)
{
times = 0;
return;
}
this->reconnect();
}
};
};
每次捕获pqxx :: broken_connection后,我都会调用dbconnection :: reconnect。让我知道你有更好的解决方案吗?