当我的数据库身份验证需要密码时,如何让pqxx(Postgres的C ++ API)工作?

时间:2017-03-07 03:16:18

标签: c++ postgresql libpqxx

我在CentOS 7.3上安装了C ++,Postgres和postgresql-devel。我也安装了libpqxx-4.0。

然后我创建了这个add_employee.cxx文件并将其基于"简短示例" here

#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();
}

我用它编译了它:

c++ add_employee.cxx -lpqxx -lpq

我跑了./a.out并看到了这个:

  

在抛出一个实例后终止调用   &#39; pqxx :: broken_connection&#39; what():致命:对等身份验证   用户&#34; foobar&#34;

失败了      

中止

我通常需要一个数据库角色的密码&#34; jdoe&#34;登录。如何解决错误?我想自动登录C ++程序。我没有对数据库进行无密码身份验证。有没有办法让这个C ++程序登录到Postgres数据库,尽管需要密码?

1 个答案:

答案 0 :(得分:1)

我怀疑这与你的C ++代码没什么关系,而且更多的是你设置了服务器。

我记得,API访问始终通过网络进行,因此请确保pg_hba.conf文件正确无误。

我认为测试有用的一种方法:从同一本地网络上的另一台机器访问。