¿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
setSchemamétodo JDCB después de crear su conexión. Funciona para mí con un controlador reciente de postgres.
postgresql-9.4.1209.jdbc42.jartrabajamos junto con una 9.5base de datos y la ?currentSchema=myschemasintaxis.
A partir de la versión 9.4 , puede usar el currentSchemapará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 - setCurrentSchemaAl crear instancias de una DataSourceimplementación, busque un método para establecer el esquema actual / predeterminado.
Por ejemplo, en la PGSimpleDataSourcellamada 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 publicdentro 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_pathguió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 ...)