Thread

  1. 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.
    
    
    
    
  2. 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!
    
  3. 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
    
    
    
    
  4. 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