¿Es posible especificar el esquema cuando se conecta a postgres con JDBC?


Es posible? ¿Puedo especificarlo en la URL de conexión? ¿Cómo hacer eso?

Author: marcosbeirigo, 2010-11-12

7 answers

Sé que esto ya fue respondido, pero me encontré con el mismo problema al intentar especificar el esquema a usar para la línea de comandos de liquibase.

Actualización A partir de JDBC v9.4 puede especificar la url con el nuevo parámetro currentSchema de la siguiente manera:

jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema

Aparece basado en un anterior parche:

Http://web.archive.org/web/20141025044151/http://postgresql.1045698.n5.nabble.com/Patch-to-allow-setting-schema-search-path-in-the-connectionURL-td2174512.html

Qué url propuesta es así:

jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
 134
Author: Hiro2k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-06 14:53:04

A partir de la versión 9.4, puede usar el parámetro currentSchema en su cadena de conexión.

Por ejemplo:

jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
 54
Author: Steve Taylor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-20 10:57:53

Si es posible en su entorno, también puede establecer el esquema predeterminado del usuario en el esquema deseado:

ALTER USER user_name SET search_path to 'schema'
 48
Author: chzbrgla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-15 15:11:41

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 la conexión se hace para especificar el esquema.

 41
Author: Herks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-12 20:29:45

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 de PostreSQL desde el código fuente (después de agregar el parche) para usarlo:

Http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php

Http://jdbc.postgresql.org/

 7
Author: Scott Langley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-30 19:55:25

DataSourcesetCurrentSchema

Al instanciar una DataSource implementación, busque un método para establecer el esquema actual / predeterminado.

Por ejemplo, en el PGSimpleDataSource clase llamada 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_" );  // <----------
 4
Author: Basil Bourque,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-31 03:04:48

No te olvides SET SCHEMA 'myschema' que podría utilizar en una declaración separada

SET SCHEMA 'value' es un alias para SET search_path A value. Sólo uno el esquema se puede especificar usando esta sintaxis.

Y desde la versión 9.4 y posiblemente versiones anteriores en el controlador JDBC, hay soporte para setSchema(String schemaName) método.

 3
Author: beldaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-19 19:46:11