¿Es posible? ¿Puedo especificarlo en la URL de conexión? ¿Como hacer eso?
¿Es posible? ¿Puedo especificarlo en la URL de conexión? ¿Como hacer eso?
Respuestas:
Sé que esto ya fue respondido, pero me encontré con el mismo problema al tratar de especificar el esquema a utilizar para la línea de comando liquibase.
Actualización A partir de JDBC v 9.4 , puede especificar la url con el nuevo parámetro currentSchema de la siguiente manera:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Aparece según un parche anterior:
La url propuesta es así:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
setSchema
método JDCB después de crear su conexión. Funciona para mí con un controlador reciente de postgres.
postgresql-9.4.1209.jdbc42.jar
trabajamos junto con una 9.5
base de datos y la ?currentSchema=myschema
sintaxis.
A partir de la versión 9.4 , puede usar el currentSchema
parámetro en su cadena de conexión.
Por ejemplo:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Si es posible en su entorno, también puede establecer el esquema predeterminado del usuario para su esquema deseado:
ALTER USER user_name SET search_path to 'schema'
No creo que haya una manera de especificar el esquema en la cadena de conexión. Parece que tienes que ejecutar
set search_path to 'schema'
después de realizar la conexión para especificar el esquema.
Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
Envié una versión actualizada de un parche al controlador JDBC de PostgreSQL para habilitar esto hace unos años. Tendrá que compilar el controlador JDBC PostreSQL desde la fuente (después de agregar el parche) para usarlo:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php
DataSource
- setCurrentSchema
Al crear instancias de una DataSource
implementación, busque un método para establecer el esquema actual / predeterminado.
Por ejemplo, en la PGSimpleDataSource
llamada de clase 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_" ); // <----------
Si deja el esquema sin especificar, Postgres por defecto es un esquema nombrado public
dentro de la base de datos. Consulte el manual, sección 5.9.2 El esquema público . Para citar el manual del sombrero:
En las secciones anteriores creamos tablas sin especificar ningún nombre de esquema. Por defecto, tales tablas (y otros objetos) se colocan automáticamente en un esquema llamado "público". Cada nueva base de datos contiene dicho esquema.
search_path
No olvide SET SCHEMA 'myschema'
cuáles podría usar en una Declaración separada
SET SCHEMA 'value' es un alias para el valor SET search_path TO. Solo se puede especificar un esquema utilizando esta sintaxis.
Y desde 9.4 y posiblemente versiones anteriores en el controlador JDBC, hay soporte para el setSchema(String schemaName)
método.
En Ir con "sql.DB" (tenga en cuenta el search_path
guión bajo):
postgres://user:password@host/dbname?sslmode=disable&search_path=schema
Esto ya fue respondido:
jdbc: postgresql: // localhost: 5432 / mydatabase? currentSchema = myschema
Como en respuestas anteriores, la cadena de conexión anterior simplemente funciona.
Lo he comprobado y está bien: https://youtu.be/m0lBUHSLkNM?t=79
(Aunque la respuesta aceptada se dio hace 8 años, se editó hace 1 año ...)