É possível? Posso especificá-lo no URL de conexão? Como fazer isso?
É possível? Posso especificá-lo no URL de conexão? Como fazer isso?
Respostas:
Eu sei que isso já foi respondido, mas acabei de encontrar o mesmo problema, tentando especificar o esquema a ser usado para a linha de comando liquibase.
Atualizar No JDBC v 9.4, você pode especificar o URL com o novo parâmetro currentSchema da seguinte forma:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Aparece com base em um patch anterior:
Qual URL proposto é o seguinte:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
setSchema
método JDCB depois de criar sua conexão. Funciona para mim com um driver recente do postgres.
postgresql-9.4.1209.jdbc42.jar
trabalhamos em conjunto com um 9.5
banco de dados e a ?currentSchema=myschema
sintaxe.
A partir da versão 9.4 , você pode usar o currentSchema
parâmetro na sua cadeia de conexão.
Por exemplo:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Se for possível no seu ambiente, você também pode definir o esquema padrão do usuário para o esquema desejado:
ALTER USER user_name SET search_path to 'schema'
Não acredito que haja uma maneira de especificar o esquema na cadeia de conexão. Parece que você precisa executar
set search_path to 'schema'
após a conexão ser feita para especificar o esquema.
Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
Enviei uma versão atualizada de um patch para o driver JDBC do PostgreSQL para ativar isso alguns anos atrás. Você precisará criar o driver JDBC PostreSQL a partir da fonte (após adicionar o patch) para usá-lo:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php
DataSource
- setCurrentSchema
Ao instanciar uma DataSource
implementação, procure um método para definir o esquema atual / padrão.
Por exemplo, na PGSimpleDataSource
chamada de classe 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_" ); // <----------
Se você deixar o esquema não especificado, o Postgres assumirá como padrão o esquema nomeado public
no banco de dados. Consulte o manual, seção 5.9.2 O esquema público . Para citar o manual do chapéu:
Nas seções anteriores, criamos tabelas sem especificar nenhum nome de esquema. Por padrão, essas tabelas (e outros objetos) são automaticamente colocadas em um esquema chamado "public". Todo novo banco de dados contém esse esquema.
search_path
Não esqueça SET SCHEMA 'myschema'
que você poderia usar em uma declaração separada
SET SCHEMA 'value' é um alias para o valor SET search_path TO. Somente um esquema pode ser especificado usando esta sintaxe.
E desde as versões 9.4 e possivelmente anteriores no driver JDBC, há suporte para o setSchema(String schemaName)
método.
Em Vá com "sql.DB" (observe o search_path
sublinhado):
postgres://user:password@host/dbname?sslmode=disable&search_path=schema
Isso já foi respondido:
jdbc: postgresql: // localhost: 5432 / mydatabase? currentSchema = myschema
Como nas respostas anteriores, a cadeia de conexão acima simplesmente funciona.
Eu verifiquei e está tudo bem: https://youtu.be/m0lBUHSLkNM?t=79
(Embora a resposta aceita tenha sido dada há 8 anos, foi editada há 1 ano...)