C'est possible? Puis-je le spécifier sur l'URL de connexion? Comment faire ça?
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:
Quelle URL proposée ressemble à ceci:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
À 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
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'
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.
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
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
.
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.
Dans Go avec "sql.DB" (notez le search_path
avec soulignement):
postgres://user:password@Host/dbname?sslmode=disable&search_path=schema