Postgresql ロールは、db 'university' の所有者であり、次のように構成されています。
ユーザー カヌーのパスワード 'mypassword' を変更します。
C に埋め込まれた SQL コードの一部は、DB に接続するだけです。
printf("SQLSTATE=[%s]\n", SQLSTATE);
EXEC SQL CONNECT TO 'university' USER 'canoe/mypassword'
printf("SQLSTATE=[%s]\n", SQLSTATE);
コードがコンパイルされ、リンクされます。これは、postgresql サーバーが実行され、そのデフォルト ポートでリッスンしている localhost で実行されます。
$ ecpg connection.pgc
$ gcc -I/usr/include/postgresql connection.c -o conn -lecpg
コンパイルされたコードの出力は次のとおりです。
SQLSTATE=[00000]
SQLSTATE=[08001]
エラー コード 08001 は、"sqlclient_unable_to_establish_sqlconnection" を意味します。コードをデバッグするために、すべての接続試行をログに記録するように postgresql の構成を変更しました。
ログ: パラメータ "log_connections" が "on" に変更されました
ログ: 00000: パラメータ "log_error_verbosity" が "verbose" に変更されました
ただし、コンパイルされたコードを実行すると、エラーは発生しません。pgsqlに接続すると、ログ情報があります。
$ pqsqlUniversity -W
LOG: 接続が承認されました: user=canoe database=university
私が気づいた有線の問題は、プロンプトの後に間違ったパスワードを入力しても、認証を受けることができることです。しかし、私の C コードは機能しません。
問題を解決できないか、さらにデバッグする考えがありません。問題はどこにあるのでしょうか?