#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:
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?