Thread
-
libpq usage from C++
Igor Korot <ikorot01@gmail.com> — 2026-03-14T04:40:48Z
Hi, ALL, Does anybody use libpq from C++? C++ introduces STL. C++ introduces smart-pointers. Is there a simple way of using those writing libpq communication? Or should I just forget about them and use good old "dump pointers"? Thank you.
-
Re: libpq usage from C++
Ron Johnson <ronljohnsonjr@gmail.com> — 2026-03-14T04:47:00Z
On Sat, Mar 14, 2026 at 12:41 AM Igor Korot <ikorot01@gmail.com> wrote: > Hi, ALL, > > Does anybody use libpq from C++? > > C++ introduces STL. > C++ introduces smart-pointers. > > Is there a simple way of using those writing libpq communication? > > Or should I just forget about them and use good old "dump pointers"? > Maybe use an existing libpq wrapper for c++? -- Death to <Redacted>, and butter sauce. Don't boil me, I'm still alive. <Redacted> lobster!
-
Re: libpq usage from C++
Adrian Klaver <adrian.klaver@aklaver.com> — 2026-03-14T04:51:29Z
On 3/13/26 9:40 PM, Igor Korot wrote: > Hi, ALL, > > Does anybody use libpq from C++? Search engine of choice: libpq c++ yields: https://pqxx.org/development/libpqxx/ > > C++ introduces STL. > C++ introduces smart-pointers. > > Is there a simple way of using those writing libpq communication? > > Or should I just forget about them and use good old "dump pointers"? > > Thank you. > > -- Adrian Klaver adrian.klaver@aklaver.com
-
Re: libpq usage from C++
Dominique Devienne <ddevienne@gmail.com> — 2026-03-16T10:25:15Z
On Sat, Mar 14, 2026 at 5:41 AM Igor Korot <ikorot01@gmail.com> wrote: > Does anybody use libpq from C++? Yes > C++ introduces STL. > C++ introduces smart-pointers. > Is there a simple way of using those writing libpq communication? > Or should I just forget about them and use good old "dump pointers"? Using an existing wrapper is simplest, of course. We wrote our own. To each its own. E.g. PS: Avoid the fwd-decl by using the actual libpq headers instead. extern "C" { struct pg_conn; struct pg_result; typedef struct pg_conn PGconn; typedef struct pg_result PGresult; typedef struct _PQconninfoOption PQconninfoOption; typedef struct pgNotify PGnotify; void PQfreemem(void *ptr); void PQclear(PGresult* res); void PQfinish(PGconn* conn); void PQconninfoFree(PQconninfoOption* conn); } // extern "C" namespace acme::postgresql { struct PGDeleterFunctor { void operator()(PGresult* r) { if (r != nullptr) { PQclear(r); } } void operator()(PGconn* c) { if (c != nullptr) { PQfinish(c); } } void operator()(PQconninfoOption* c) { if (c != nullptr) { PQconninfoFree(c); } } void operator()(PGnotify* n) { if (n != nullptr) { PQfreemem(n); } } }; using PGresult_uptr = std::unique_ptr<PGresult, PGDeleterFunctor>; using PGconn_uptr = std::unique_ptr<PGconn, PGDeleterFunctor>; using PGconninfo_uptr = std::unique_ptr<PQconninfoOption, PGDeleterFunctor>; using PGnotify_uptr = std::unique_ptr<PGnotify, PGDeleterFunctor>; ... } Then we have higher-level wrappers that compose those RAII low-level ones. --DD