【トラブル】【PostegreSQL】【Java】Java - PostegreSQL で発生したトラブル

はじめに

http://blogs.yahoo.co.jp/dk521123/33325738.html
で文字化けは解決したのだが、肝心のエラーについて解決していないので
そのことも含めて、Java - PostegreSQL で発生したトラブルをまとめる

■ エラー「FATAL: password authentication failed for user "xxxxxxx"」が表示される

 * 以下の記事で、PostgreSQL を設定して、javaで繋ぎに行ったら、以下の例外が発生。
http://blogs.yahoo.co.jp/dk521123/33153278.html

エラー表示

org.postgresql.util.PSQLException: FATAL: password authentication failed for user "xxxxxxx"

解決策1

 * ログインロール(ユーザー)を作成する

ログインロール作成方法

http://blog.systemjp.net/entry/20110413/p4
を参考にするといい

[1] pgAdmin IIIを起動する
[2] 「ログインロール」を右クリックして、[新しいログインロール]を選択
[3] 以下を入力して「OK」ボタン押下
 ■ 「プロパティ」タブ
   「ロール名」:任意の文字列(例「user」)
 ■ 「定義」タブ
   「パスワード」:任意のパスワード(例「password」)

解決策2

 * 「pg_bha.conf」を以下のように修正し、サービスを再起動する

【修正前】
local   all   xxxxxxx   peer

【修正後】
local   all   xxxxxxx   trust

参考文献

http://stackoverflow.com/questions/18664074/getting-error-peer-authentication-failed-for-user-postgres-when-trying-to-ge

■ エラー「ERROR: permission denied for relation XXXX」が表示される

 * 上記「FATAL: password authentication failed for user "xxxxxxx"(以降「トラブル[1]」とする)」の解決策で、
   エラーは解決したが、別のエラーが発生

エラー表示

org.postgresql.util.PSQLException: ERROR: permission denied for relation company
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2198)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1927)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:561)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:419)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:304)

原因

 * トラブル[1]で作成したロールに対して、テーブルのアクセス権がなかったため。

解決策

 * テーブルのアクセス権を付与する

アクセス権を付与する手順

[1] pgAdmin IIIを起動する
[2] 対象のテーブルを右クリックして、[プロパティ]-[権限]を選択
[3] 対象のロールを追加する

参考文献

http://moonsoul.blog.so-net.ne.jp/2009-02-06

■ エラー「pg_dump: コマンドライン引数が多すぎます」が表示される

http://blogs.yahoo.co.jp/dk521123/34842155.html
で、pg_dumpJavaから呼び出そうと思ったが、以下の「エラー内容」が表示され、
ダンプが作られなかった。

エラー内容

pg_dump: コマンドライン引数が多すぎます(先頭は">")
詳細は "pg_dump --help" を実行してください

解決策

修正前

public static void main(String[] args) {
   try {
      ProcessBuilder processBuilder = new ProcessBuilder(
            "C:/Program Files/PostgreSQL/9.3/bin/pg_dump.exe", "-Fc", "-b",
            "-U", "postgres", "postgres", ">", "C:/temp/dump.out");

修正後

* ">"ではなく、"-f" を使用した
public static void main(String[] args) {
   try {
      ProcessBuilder processBuilder = new ProcessBuilder(
            "C:/Program Files/PostgreSQL/9.3/bin/pg_dump.exe", "-Fc", "-b",
            "-U", "postgres", "-f", "C:/temp/dump.out", "postgres");