2016-09-13 4 views
1

currentSchemaパラメータをDB接続URLに指定すると、SQLコマンドでpublicスキーマ(デフォルトのデータベースはsearch_path)のオブジェクトが見つかりません。URLのcurrentSchemaでsearch_pathが期待どおりに動作しない

どうすればこの問題を修正できますか?

長い話:

  1. 私はアプリケーション・スキーマapp1を持っています。
  2. DBには、publicスキーマにPostgis拡張機能がインストールされています(そして、そこに保存します)。 DB search_path
  3. は次のように設定されています。

    ALTER DATABASE tst SET search_path = "$user", public 
    
  4. URLで現在のスキーマを指定せずにDBに接続して、デフォルトのスキーマは公開されているので、それはすべての地理関数とオブジェクトを検索します。しかし、私は、例えば:

    select st_asgeojson(geometry,15,4) from app1.shapes limit 5 
    
  5. これは便利ではない、app1からオブジェクトを扱うときapp1スキーマの接頭辞を指定する必要があります。だから私はこのような接続URLに現在のスキーマパラメータとして「APP1」を追加しました:今

    jdbc:postgresql://localhost:5432/tst?currentSchema=app1 
    
  6. 、私はDBに接続するとき、私はAPP1からオブジェクトを扱う際にAPP1の接頭辞を指定する必要はありませんスキーマしかし、もはや仕事として失敗していないのPostGISオブジェクトを伴うリクエスト:「

    ERROR: function st_asgeojson(public.geometry, integer) does not exist

私の理解では、それがsearch_path内のオブジェクトを検索し、publicスキーマでそれらを見つける必要があることですが、それはdoesnの何らかの理由で起こる。 ユーザーレベルで検索パスを指定しようとしましたが、それでも機能しませんでした。

+1

あなたは 'SHOWののsearch_pathを行う;'現在の検索パスが何であるかを把握します。あなたは 'SET search_path TO 'app1、public''の後に' SHOW search_path; 'を実行してそれがうまくいったかどうか試してみることができますか? – redneb

+0

URLにcurrentSchemaパラメータなしで接続すると、show_pathは "app1、public"を返します。次に、接続を切断し、currentSchema = app1を追加して、再度接続します。今すぐSHOW search_pathは "app1"を返します。 – spoonboy

答えて

2

パラメータ名currentSchemaは少し誤解を招くことがあります。現在のスキーマだけでなく、全体がsearch_pathになります。 The documentation:

  • currentSchema = String

Specify the schema to be set in the search-path. This schema will be used to resolve unqualified object names used in statements over this connection.

ので、試してみてください。

jdbc:postgresql://localhost:5432/tst?currentSchema=app1,public 

それとも、あなたが特定のユーザに接続する場合は、あなたがDBのユーザーのsearch_pathを設定(またはこのデータベースでは、このユーザーのために)することができます。次に、接続文字列には何も必要ありません。

それとも、自分のユーザー名がapp1であることを起こる場合は、 "$user", publicを設定する検索パスが自動的にapp1, publicに解決され、あなたが余分何もする必要はありません。

+1

ありがとうございます。ただし、引用符を削除する必要がありました(それ以外の場合は動作しません)。したがって、URLは次のようになります。jdbc:postgresql:// localhost:5432/tst?currentSchema = app1、public。引用符の問題を理解するまでに数分かかりましたので、あなたの答えを修正することができますか? – spoonboy

関連する問題