web-dev-qa-db-fra.com

Est-il possible de spécifier le schéma lors de la connexion à postgres avec JDBC?

C'est possible? Puis-je le spécifier sur l'URL de connexion? Comment faire ça?

126
marcosbeirigo

Je sais que la réponse à cette question a déjà été donnée, mais je viens tout juste de rencontrer le même problème en essayant de spécifier le schéma à utiliser pour la ligne de commande liquibase.

Mise à jour À partir de JDBC v 9.4 , vous pouvez spécifier l'URL avec le nouveau paramètre currentSchema de la manière suivante:

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

Apparaît en fonction d'un correctif antérieur:

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

Quelle URL proposée ressemble à ceci:

jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
172
Hiro2k

À compter de version 9.4 , vous pouvez utiliser le paramètre currentSchema dans votre chaîne de connexion.

Par exemple:

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

Si cela est possible dans votre environnement, vous pouvez également définir le schéma par défaut de l'utilisateur sur votre schéma souhaité:

ALTER USER user_name SET search_path to 'schema'
48
chzbrgla

Je ne crois pas qu'il existe un moyen de spécifier le schéma dans la chaîne de connexion. Il semble que vous devez exécuter

set search_path to 'schema'

une fois la connexion établie, spécifiez le schéma.

42
Herks

J'ai soumis une version mise à jour d'un correctif au pilote JDBC de PostgreSQL pour l'activer quelques années auparavant. Vous devrez construire le pilote JDBC PostreSQL à partir du source (après l’ajout du correctif) pour pouvoir l’utiliser:

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

http://jdbc.postgresql.org/

7
Scott Langley

DataSource - setCurrentSchema

Lors de l'instanciation d'une implémentation de DataSource , recherchez une méthode pour définir le schéma actuel/par défaut.

Par exemple, sur le PGSimpleDataSource appel 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_" );  // <----------

S'il n'est pas spécifié, PostgreSQL tente de se connecter à un schéma nommé public.

6
Basil Bourque

N'oubliez pas SET SCHEMA 'myschema' que vous pourriez utiliser dans une déclaration séparée

SET SCHEMA 'valeur' ​​est un alias pour la valeur de SET search_path TO. Un seul schéma peut être spécifié en utilisant cette syntaxe.

Et depuis la version 9.4 et éventuellement les versions antérieures du pilote JDBC, la méthode setSchema(String schemaName) est prise en charge.

3
beldaz

Dans Go avec "sql.DB" (notez le search_path avec soulignement):

postgres://user:password@Host/dbname?sslmode=disable&search_path=schema
1
Rafael Barros