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

标签 c++ linux libpqxx

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

附言重新激活不受抑制。我使用标准连接类型 -

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。让我知道您是否有更好的解决方案?

关于c++ - libpqxx:连接进程终止后如何重新连接到 Postgresql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26144212/

相关文章:

linux - grep 是如何制作颜色的?

c++ - libpqxx 事务序列化和后果

c++ - 将 32 位代码移植到 64 位代码

c++ - QWebView/QWebPage 是在单独的线程中还是在主/gui 线程中下载内容?

c++ - Win32 多线程资源

C++ - ifstream 不喜欢相对路径

linux - 如何在不删除原始文件的情况下使用cat追加一个文件

linux - 可安全中断的连续流压缩

c++ - 使用 libpq/libpqxx 进行输入清理

c++ - pqxx::result::tuple 尚未声明(C++ 的 PostgreSQL 库)