Вы уже смотрели libpqxx ?Сам по себе это не пул соединений, однако он предоставляет API-интерфейс c ++ для абстрагирования обработки соединения от кода приложения.Это позволяет приложению довольно легко создавать собственный пул соединений и управлять им.
Это действительно довольно просто, вот пример (с использованием boost для shared_ptr & pqxx) для иллюстрации класса пула с помощью фабричного метода.Вы можете представить, что метод runQuery получит соединение из указанного пула и вызовет API pqxx, чтобы выполнить запрос к базовому соединению.Затем он может вернуть соединение в пул.
class DbPool {
public:
static db_handle_t create(const string &conn,
uint32_t max = DEFAULT_CON_MAX,
uint32_t min = DEFAULT_CON_MIN);
static pqxx::result runQuery(db_handle_t pool,
const string& query);
private:
DbPool(const string& con, uint32_t max_cons,
uint32_t min_cons);
static boost::ptr_vector<DbPool> pool_; // Keep a static vector of pools,
pqxx::connection *createCon();
void releaseCon(pqxx::connection *c);
uint32_t initializeCons();
pqxx::connection *getCon();
boost::ptr_list<pqxx::connection> m_freeCons;
}