Можно ли указать схему при подключении к postgres с JDBC? - PullRequest
125 голосов
/ 12 ноября 2010

Возможно ли это? Могу ли я указать его в URL-адресе соединения? Как это сделать?

Ответы [ 8 ]

170 голосов
/ 27 января 2011

Я знаю, что на этот вопрос уже был дан ответ, но я столкнулся с той же проблемой, пытаясь указать схему, используемую для командной строки liquibase.

Обновление Начиная с JDBC v 9.4 вы можете указать URL-адрес с помощью нового параметра currentSchema, например:

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
56 голосов
/ 20 февраля 2015

Начиная с версии 9.4 , вы можете использовать параметр currentSchema в строке подключения.

Например:

jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
48 голосов
/ 15 ноября 2010

Если это возможно в вашей среде, вы также можете установить схему по умолчанию для пользователя в соответствии с желаемой схемой:

ALTER USER user_name SET search_path to 'schema'
42 голосов
/ 12 ноября 2010

Я не верю, что есть способ указать схему в строке подключения.Похоже, вам нужно выполнить

set search_path to 'schema'

после установления соединения, чтобы указать схему.

7 голосов
/ 30 марта 2011

Я отправил обновленную версию патча в драйвер PostgreSQL JDBC, чтобы включить это несколько лет назад.Вам нужно собрать драйвер PostreSQL JDBC из источника (после добавления в патч), чтобы использовать его:

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

http://jdbc.postgresql.org/

6 голосов
/ 31 мая 2017

DataSource - setCurrentSchema

При создании экземпляра реализации 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.

3 голосов
/ 06 октября 2014

Не забудьте SET SCHEMA 'myschema', который вы можете использовать в отдельном операторе

SET SCHEMA 'value' - это псевдоним для значения SET search_path TO.С помощью этого синтаксиса может быть указана только одна схема.

А начиная с версии 9.4 и, возможно, более ранних версий драйвера JDBC, поддерживается метод setSchema(String schemaName).

1 голос
/ 28 февраля 2019

In Go с «sql.DB» (обратите внимание на search_path с подчеркиванием):

postgres://user:password@host/dbname?sslmode=disable&search_path=schema
...