currentSchema
パラメータをDB接続URLに指定すると、SQLコマンドでpublic
スキーマ(デフォルトのデータベースはsearch_path
)のオブジェクトが見つかりません。URLのcurrentSchemaでsearch_pathが期待どおりに動作しない
どうすればこの問題を修正できますか?
長い話:
- 私はアプリケーション・スキーマ
app1
を持っています。 - DBには、
public
スキーマにPostgis拡張機能がインストールされています(そして、そこに保存します)。 DBsearch_path
- は次のように設定されています。
URLで現在のスキーマを指定せずにDBに接続して、デフォルトのスキーマは公開されているので、それはすべての地理関数とオブジェクトを検索します。しかし、私は、例えば:
select st_asgeojson(geometry,15,4) from app1.shapes limit 5
これは便利ではない、
app1
からオブジェクトを扱うときapp1
スキーマの接頭辞を指定する必要があります。だから私はこのような接続URLに現在のスキーマパラメータとして「APP1」を追加しました:今jdbc:postgresql://localhost:5432/tst?currentSchema=app1
、私はDBに接続するとき、私はAPP1からオブジェクトを扱う際にAPP1の接頭辞を指定する必要はありませんスキーマしかし、もはや仕事として失敗していないのPostGISオブジェクトを伴うリクエスト:「
ERROR: function st_asgeojson(public.geometry, integer) does not exist
ALTER DATABASE tst SET search_path = "$user", public
私の理解では、それがsearch_path
内のオブジェクトを検索し、public
スキーマでそれらを見つける必要があることですが、それはdoesnの何らかの理由で起こる。 ユーザーレベルで検索パスを指定しようとしましたが、それでも機能しませんでした。
あなたは 'SHOWののsearch_pathを行う;'現在の検索パスが何であるかを把握します。あなたは 'SET search_path TO 'app1、public''の後に' SHOW search_path; 'を実行してそれがうまくいったかどうか試してみることができますか? – redneb
URLにcurrentSchemaパラメータなしで接続すると、show_pathは "app1、public"を返します。次に、接続を切断し、currentSchema = app1を追加して、再度接続します。今すぐSHOW search_pathは "app1"を返します。 – spoonboy