CentOS 7.3にC++、Postgres、postgresql-develをインストールしました。私もlibpqxx-4.0をインストールしました。データベース認証でパスワードが必要な場合、pqxx(Postgres用C++ API)を動作させるにはどうすればよいですか?
私はこのadd_employee.cxxファイルを作成し、それを「簡単な例」hereに基づいて作成しました。私は./a.out走ってこれを見た
c++ add_employee.cxx -lpqxx -lpq
:
は 「pqxxのインスタンスを投げた後に呼び出さTERMINATE :: broken_connection
#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(); }
私はこれでそれをコンパイル'what():致命的:ピア認証 がユーザー "foobar"に失敗しました
中止
通常、データベースの役割「jdoe」のログインにはパスワードが必要です。エラーを回避するにはどうすればよいですか?私は自動的にC++プログラムのログインをしたい。私はデータベースにパスワードなしの認証を持っていません。このC++プログラムをパスワードを要求してもPostgresデータベースに記録する方法はありますか?
私のpg_hba.confファイルが正しく設定されていると思います。私は1台のサーバーにPostgresを持っています。私はこれをローカルでやろうとしています。別のマシンからどうやって試してみるか教えていただけますか?それは私のローカル試みから新しい複雑さを導入するでしょう。 – Alex111
私は 'psql'は同じマシン_がソケットを使うので有効なテストではないことを発見しました。 _another machine_に 'psql'を使うことは、あなたのC++コードが使うものであるtcp/ipを使うので、有効なテストです。だから、ホスト引数を使って明示的に指し示す別のマシンから試してみると、私は過去に助けになりました。 –
そして、マシン_laptop_からマシン_server_に再試行しました。 'psql'以外にも私はデーモンとidentデーモンをインストールしなければならず、' pg_hba.conf'にはローカルネットワーク用のidentが設定されています。その後、それはすごくうまくいく。サーバー自体のプログラムによるアクセスも同様です。 –