C'est possible? Puis-je le spécifier sur l'URL de connexion? Comment faire ça?
C'est possible? Puis-je le spécifier sur l'URL de connexion? Comment faire ça?
Réponses:
Je sais que cela a déjà été répondu, mais je viens 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 comme suit:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Apparaît sur la base d'un correctif antérieur:
Quelle URL proposée est comme ça:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
setSchema
méthode JDCB après avoir créé votre connexion. Fonctionne pour moi avec un pilote postgres récent.
postgresql-9.4.1209.jdbc42.jar
travaillé avec une 9.5
base de données et la ?currentSchema=myschema
syntaxe.
Depuis la version 9.4 , vous pouvez utiliser le currentSchema
paramètre 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 le schéma souhaité:
ALTER USER user_name SET search_path to 'schema'
Je ne pense 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 pour spécifier le schéma.
Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
J'ai soumis une version mise à jour d'un correctif au pilote JDBC PostgreSQL pour l'activer il y a quelques années. Vous devrez créer le pilote JDBC PostreSQL à partir de la source (après l'ajout du correctif) pour l'utiliser:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php
DataSource
- setCurrentSchema
Lors de l'instanciation d'une DataSource
implémentation, recherchez une méthode pour définir le schéma actuel / par défaut.
Par exemple, lors de l' 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_" ); // <----------
Si vous laissez le schéma non spécifié, Postgres utilise par défaut un schéma nommé public
dans la base de données. Voir le manuel, section 5.9.2 Le schéma public . Pour citer le manuel du chapeau:
Dans les sections précédentes, nous avons créé des tables sans spécifier de nom de schéma. Par défaut, ces tables (et autres objets) sont automatiquement placées dans un schéma nommé «public». Chaque nouvelle base de données contient un tel schéma.
search_path
N'oubliez pas SET SCHEMA 'myschema'
ce que vous pouvez utiliser dans une déclaration distincte
SET SCHEMA 'value' est un alias pour SET search_path TO value. Un seul schéma peut être spécifié à l'aide de cette syntaxe.
Et depuis 9.4 et peut-être les versions antérieures sur le pilote JDBC, il existe un support pour la setSchema(String schemaName)
méthode.
En Go avec "sql.DB" (notez le search_path
avec trait de soulignement):
postgres://user:password@host/dbname?sslmode=disable&search_path=schema
Cela a déjà été répondu:
jdbc: postgresql: // localhost: 5432 / ma base de données? currentSchema = myschema
Comme dans les réponses précédentes, la chaîne de connexion ci-dessus fonctionne simplement.
J'ai vérifié, et c'est OK: https://youtu.be/m0lBUHSLkNM?t=79
(Bien que la réponse acceptée ait été donnée il y a 8 ans, elle a été modifiée il y a 1 an...)