0
我在CentOS 7.3上安装了C++,Postgres和postgresql-devel。我也安装了libpqxx-4.0。如何在我的数据库身份验证需要密码时使pqxx(Postgres的C++ API)正常工作?
然后我创建了这个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跑,看到这一点:
终止叫做抛出的 “pqxx :: broken_connection的实例后'什么():致命:对等身份验证 用户“foobar”失败
异常终止
我通常需要密码才能登录数据库角色“jdoe”。我该如何解决错误?我想要一个C++程序自动登录。我没有对数据库进行无密码验证。有没有办法让这个C++程序尽管需要密码登录到Postgres数据库?
我想我的pg_hba.conf文件设置正确。我有一台服务器上的Postgres。我试图在本地做到这一点。你能详细说明我将如何从另一台机器上尝试吗?这将从我本地的尝试中引入新的复杂性。 – Alex111
我发现'psql' _在同一台机器上不是一个有效的测试,因为它使用套接字。在另一台机器上使用'psql'是一个有效的测试,因为它将使用tcp/ip,这就是你的C++代码将使用的。所以,从另一台机器上尝试,通过主机参数明确指出,帮助我过去。 –
而我刚刚从机器_laptop_再次尝试机器_server_。除'psql'之外,我还必须安装ident和daemon,并且我的'pg_hba.conf'拥有本地网络的ident集。在那之后......这一切都很顺利。与服务器本身的程序化访问一样。 –