« §PostgreSQL(データベースの再構築(移植)手順について) | トップページ | @アニメ(2011夏アニメOP、ED) »

2011年4月30日 (土)

§PostgreSQL(テーブルが見つかりません、リレーションがありませんエラーについて)

PostgreSQLネタの続きです。
データベースが再構築できたと思い、Javaプログラムからアクセスしたところ、テーブルが見つかりませんというエラーが発生しました。pgAdminではきちんと構築されているように見えます。所有者権限も設定されています。
さらに、psql で\dを実行すると、「リレーションがありません」というエラーが表示されテーブルが表示されません。
リレーション?外部参照のことか?ネットで検索してもなかなか解決方法がわからず本当に挫折になりました。

いろいろ見ていると、psqlのリファレンスの”スキーマ”に、search_pathの初期値は$user, publicとなっているが、自分のスキーマにテーブルを構築している場合はset search_path = 自分のスキーマ, publicとしなさいという記述を見つけました。ひょっとするとこれかなと思い、set文を実行した後に\dを実行するときちんとテーブルが表示されませした。

つまり、デフォルトでは明示的にスキーマ名.テーブル名で検索する必要があるということですね。プログラムのSQL文はスキーマ名を省略して記述しているのでpublicスキーマを検索してテーブルが見つけられなかったということになります。

PostgreSQLが起動した時にsearch_pathの設定を有効にする方法がありました。
PostgreSQLインストールパス\data\postgesql.confの#search_path='"$user",public'を#を削除して、'"自分のschema","$user",public'に変更し、PostgreSQLを再起動すれば設定が有効になります。ただし、管理者ユーザで編集しないと変更が反映されないので注意が必要です。
これ以降、Javaプログラムからも正常にアクセスできるようになりました。
めでたしめでたし。

« §PostgreSQL(データベースの再構築(移植)手順について) | トップページ | @アニメ(2011夏アニメOP、ED) »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« §PostgreSQL(データベースの再構築(移植)手順について) | トップページ | @アニメ(2011夏アニメOP、ED) »