CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 2 of 2
  1. #1
    Join Date
    Mar 2017
    Posts
    1

    How do I get pqxx (the C++ API for Postgres) to work with database authentication?

    How do I get pqxx (the C++ API for Postgres) to work when my database authentication requires a password?

    I installed C++, Postgres, and postgresql-devel on CentOS 7.3. I installed libpqxx-4.0 too.

    I then created this add_employee.cxx file and based it on the "brief example" here.

    Code:
    #include <iostream>
    #include <pqxx/pqxx>
    
    int main(int, char *argv[])
    {
      pqxx::connection c("dbname=foobar user=jdoe password=smartpassword");
      pqxx::work txn(c);
    
      pqxx::result r = txn.exec(
        "SELECT id "
        "FROM Employee "
        "WHERE name =" + txn.quote(argv[1]));
    
      if (r.size() != 1)
      {
        std::cerr
          << "Expected 1 employee with name " << argv[1] << ", "
          << "but found " << r.size() << std::endl;
        return 1;
      }
    
      int employee_id = r[0][0].as<int>();
      std::cout << "Updating employee #" << employee_id << std::endl;
    
      txn.exec(
        "UPDATE EMPLOYEE "
        "SET salary = salary + 1 "
        "WHERE id = " + txn.quote(employee_id));
    
      txn.commit();
    }
    I compiled it with this:

    Code:
    c++ add_employee.cxx -lpqxx -lpq
    I ran ./a.out and saw this:

    terminate called after throwing an instance of 'pqxx::broken_connection' what(): FATAL: Peer authentication failed for user "foobar"

    Aborted
    I normally need a password for the database role "jdoe" to log in. What do I do to get around the error? I want to have a C++ program log in automatically. I do not have passwordless authentication into the database. Is there a way to have this C++ program log into the Postgres database despite requiring a password?

  2. #2
    Join Date
    Jan 2006
    Location
    Singapore
    Posts
    6,765

    Re: How do I get pqxx (the C++ API for Postgres) to work with database authentication

    The connection string looks like it has the correct parameters. Perhaps you could try to add the host, e.g., "host=localhost dbname=foobar user=jdoe password=smartpassword" (or equivalently, "postgresql://jdoe:smartpassword@localhost/foobar") and double check that the password is correct.
    C + C++ Compiler: MinGW port of GCC
    Build + Version Control System: SCons + Bazaar

    Look up a C/C++ Reference and learn How To Ask Questions The Smart Way
    Kindly rate my posts if you found them useful

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured