Является ли это возможным? Могу ли я указать его в URL-адресе соединения? Как это сделать?
Является ли это возможным? Могу ли я указать его в URL-адресе соединения? Как это сделать?
Ответы:
Я знаю, что на этот вопрос уже был дан ответ, но я столкнулся с той же проблемой, пытаясь указать схему, используемую для командной строки liquibase.
Обновление Начиная с JDBC v 9.4, вы можете указать URL с новым параметром currentSchema следующим образом:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Появляется на основе более раннего патча:
Какой предложенный URL-адрес выглядит так:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
setSchema
метод JDCB после создания подключения. У меня работает с последним драйвером postgres.
postgresql-9.4.1209.jdbc42.jar
работали вместе с 9.5
базой данных и ?currentSchema=myschema
синтаксисом.
Начиная с версии 9.4 , вы можете использовать currentSchema
параметр в строке подключения.
Например:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Если это возможно в вашей среде, вы также можете установить схему по умолчанию для пользователя в соответствии с желаемой схемой:
ALTER USER user_name SET search_path to 'schema'
Я не верю, что есть способ указать схему в строке подключения. Похоже, вы должны выполнить
set search_path to 'schema'
после установления соединения указать схему.
Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
Я представил обновленную версию патча в драйвер PostgreSQL JDBC, чтобы включить это несколько лет назад. Вам нужно собрать драйвер PostreSQL JDBC из исходного кода (после добавления в патч), чтобы использовать его:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php
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
в базе данных. См. Руководство, раздел 5.9.2 Общедоступная схема . Чтобы процитировать шляпу руководство:
В предыдущих разделах мы создавали таблицы без указания имен схем. По умолчанию такие таблицы (и другие объекты) автоматически помещаются в схему с именем «public». Каждая новая база данных содержит такую схему.
search_path
Не забывайте, SET SCHEMA 'myschema'
что вы можете использовать в отдельном заявлении
SET SCHEMA 'value' является псевдонимом для SET search_path TO value. С помощью этого синтаксиса можно указать только одну схему.
Начиная с версии 9.4 и, возможно, более ранних версий в драйвере JDBC, существует поддержка setSchema(String schemaName)
метода.
В Go с "sql.DB" (обратите внимание на search_path
подчеркивание):
postgres://user:password@host/dbname?sslmode=disable&search_path=schema
На это уже ответили:
JDBC: PostgreSQL: // локальный: 5432 / MyDatabase CurrentSchema = MySchema
Как и в предыдущих ответах, приведенная выше строка подключения просто работает.
Я проверил, и все в порядке: https://youtu.be/m0lBUHSLkNM?t=79
(Хотя принятый ответ был дан 8 лет назад, он был отредактирован 1 год назад ...)