Можно ли указать схему при подключении к postgres с JDBC?

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

Ответ 1

Я знаю, что на этот вопрос уже был дан ответ, но я столкнулся с той же проблемой, пытаясь указать схему, используемую для командной строки 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

Ответ 2

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

Например:

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

Ответ 3

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

ALTER USER user_name SET search_path to 'schema'

Ответ 4

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

set search_path to 'schema'

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

Ответ 5

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

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

http://jdbc.postgresql.org/

Ответ 6

DataSource - setCurrentSchema

При создании экземпляра реализации DataSource ищите метод для установки текущей схемы/схемы по умолчанию.

Например, PGSimpleDataSource класса 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.

Ответ 7

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

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

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

Ответ 8

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

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