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

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

7 ответов


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

обновление По состоянию на JDBC V9.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

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

например:

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

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

ALTER USER user_name SET search_path to 'schema'

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

set search_path to 'schema'

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


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

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

http://jdbc.postgresql.org/


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_" );  // <----------

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

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

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