È possibile? Posso specificarlo sull'URL della connessione? Come farlo?
È possibile? Posso specificarlo sull'URL della connessione? Come farlo?
Risposte:
So che è stata già fornita una risposta, ma ho riscontrato lo stesso problema nel tentativo di specificare lo schema da utilizzare per la riga di comando liquibase.
Aggiornamento A partire da JDBC v 9.4 è possibile specificare l'URL con il nuovo parametro currentSchema in questo modo:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Appare basato su una patch precedente:
Che ha proposto l'URL in questo modo:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
setSchema
metodo JDCB dopo aver creato la connessione. Funziona per me con un driver Postgres recente.
postgresql-9.4.1209.jdbc42.jar
collaborato con un 9.5
database e la ?currentSchema=myschema
sintassi.
A partire dalla versione 9.4 , è possibile utilizzare il currentSchema
parametro nella stringa di connessione.
Per esempio:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Se è possibile nel tuo ambiente, puoi anche impostare lo schema predefinito dell'utente sullo schema desiderato:
ALTER USER user_name SET search_path to 'schema'
Non credo che ci sia un modo per specificare lo schema nella stringa di connessione. Sembra che devi eseguire
set search_path to 'schema'
dopo aver effettuato la connessione per specificare lo schema.
Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
Ho inviato una versione aggiornata di una patch al driver PostgreSQL JDBC per abilitarlo qualche anno fa. Dovrai creare il driver JDBC PostreSQL dal sorgente (dopo aver aggiunto la patch) per usarlo:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php
DataSource
- setCurrentSchema
Quando si crea un'istanza di DataSource
un'implementazione, cercare un metodo per impostare lo schema corrente / predefinito.
Ad esempio, durante la PGSimpleDataSource
chiamata di 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_" ); // <----------
Se lo schema non viene specificato, Postgres imposta automaticamente uno schema denominato public
all'interno del database. Vedere il manuale, sezione 5.9.2 Schema pubblico . Per citare il manuale del cappello:
Nelle sezioni precedenti abbiamo creato tabelle senza specificare alcun nome di schema. Per impostazione predefinita, tali tabelle (e altri oggetti) vengono automaticamente inseriti in uno schema denominato "pubblico". Ogni nuovo database contiene un tale schema.
search_path
Non dimenticare SET SCHEMA 'myschema'
quale potresti usare in una Dichiarazione separata
SET SCHEMA 'valore' è un alias per valore SET search_path TO. Solo uno schema può essere specificato usando questa sintassi.
E dalla versione 9.4 e forse versioni precedenti sul driver JDBC, esiste il supporto per il setSchema(String schemaName)
metodo.
In Vai con "sql.DB" (nota il carattere search_path
di sottolineatura con):
postgres://user:password@host/dbname?sslmode=disable&search_path=schema
Questo è stato già risposto:
jdbc: postgresql: // localhost: 5432 / mydatabase currentSchema = myschema
Come nelle risposte precedenti, la stringa di connessione sopra funziona.
Ho controllato ed è OK: https://youtu.be/m0lBUHSLkNM?t=79
(Sebbene la risposta accettata sia stata data 8 anni fa, è stata modificata 1 anno fa...)