É 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
setSchemamétodo JDCB depois de criar sua conexão. Funciona para mim com um driver recente do postgres.
postgresql-9.4.1209.jdbc42.jartrabalhamos em conjunto com um 9.5banco de dados e a ?currentSchema=myschemasintaxe.
A partir da versão 9.4 , você pode usar o currentSchemaparâ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 - setCurrentSchemaAo instanciar uma DataSourceimplementação, procure um método para definir o esquema atual / padrão.
Por exemplo, na PGSimpleDataSourcechamada 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 publicno 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_pathsublinhado):
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...)