libpqxx:如何在连接过程中死后重新连接到Postgresql数据库

时间:2014-10-01 14:52:20

标签: c++ linux libpqxx

我通过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;
}

1 个答案:

答案 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。让我知道你有更好的解决方案吗?