■ エラー「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
http://blogs.yahoo.co.jp/dk521123/34842155.html
で、pg_dumpをJavaから呼び出そうと思ったが、以下の「エラー内容」が表示され、
ダンプが作られなかった。
エラー内容
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");