web-dev-qa-db-ja.com

JDBCを使用してpostgresに接続するときにスキーマを指定することは可能ですか?

出来ますか?接続URLで指定できますか?どうやってするか?

126
marcosbeirigo

私はこれがすでに答えられていることを知っていますが、liquibaseコマンドラインに使用するスキーマを指定しようとして同じ問題に出くわしました。

UpdateJDBC v 9.4 以降、次のように新しいcurrentSchemaパラメーターでURLを指定できます。

jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema

以前のパッチに基づいて表示されます。

http://web.archive.org/web/20141025044151/http://postgresql.1045698.n5.nabble.com/Patch-to-allow-setting-schema-search-path-in-the- connectionURL-td2174512.html

どのようなURLを提案しましたか:

jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
172
Hiro2k

バージョン9.4 の時点で、接続文字列でcurrentSchemaパラメーターを使用できます。

例えば:

jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
56
Distortum

ご使用の環境で可能であれば、ユーザーのデフォルトスキーマを目的のスキーマに設定することもできます。

ALTER USER user_name SET search_path to 'schema'
48
chzbrgla

接続文字列でスキーマを指定する方法があるとは思わない。実行する必要があるようです

set search_path to 'schema'

スキーマを指定するために接続が確立された後。

42
Herks

これを数年前に有効にするために、PostgreSQL JDBCドライバーに更新バージョンのパッチを提出しました。 PostreSQL JDBCドライバーを使用するには、ソースから(パッチを追加した後)ビルドする必要があります。

http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php

http://jdbc.postgresql.org/

7
Scott Langley

DataSourcesetCurrentSchema

DataSource 実装をインスタンス化するとき、現在/デフォルトのスキーマを設定するメソッドを探します。

たとえば、 PGSimpleDataSource クラス呼び出し setCurrentSchema で。

org.postgresql.ds.PGSimpleDataSource dataSource = new org.postgresql.ds.PGSimpleDataSource ( );
dataSource.setServerName ( "localhost" );
dataSource.setDatabaseName ( "your_db_here_" );
dataSource.setPortNumber ( 5432 );
dataSource.setUser ( "postgres" );
dataSource.setPassword ( "your_password_here" );
dataSource.setCurrentSchema ( "your_schema_name_here_" );  // <----------

指定しない場合、Postgresはpublicという名前のスキーマへの接続を試みます。

6
Basil Bourque

SET SCHEMA 'myschema' を忘れないでください。これは別のステートメントで使用できます。

SET SCHEMA 'value'は、SET search_path TO valueのエイリアスです。この構文を使用して指定できるスキーマは1つだけです。

また、JDBCドライバーの9.4およびそれ以前のバージョン以降、 setSchema(String schemaName) メソッドのサポートがあります。

3
beldaz

Go with "sql.DB"(アンダースコア付きのsearch_pathに注意してください):

postgres://user:[email protected]/dbname?sslmode=disable&search_path=schema
1
Rafael Barros