libpqxx:如何在连接进程终止后重新连接到Postgresql数据库

libpqxx: How to reconnect to a Postgresql database after connection process has died

本文关键字:重新连接 Postgresql 数据库 终止 进程 连接 libpqxx      更新时间:2023-10-16

我通过libpqxx实例化PostgreSQL连接。我查询了数据库并得到了正确的响应。在那之后,我尝试了以下错误情况:在创建了pqxx::connection实例后,我暂停了我的程序,从Linux的命令shell手动终止Postgre的连接进程,然后恢复程序。它一直持续到尝试创建新的事务pqxx::work,并抛出pqxx::broken_connection。我处理了这个异常,并尝试通过调用pqxx::connection::activate()重新连接,但另一个pqxx::broken_connection被抛出。如何在不实例化另一个pqxx::连接的情况下重新连接到DB?

p.S.再激活不受抑制。我使用标准连接类型-

namespace pqxx
{  
    typedef basic_connection<connect_direct> connection;
}

好的,没有人回答。我注意到,在连续几次调用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。让我知道你有更好的解决方案吗?