È ansible specificare lo schema quando ci si connette a postgres con JDBC?

È ansible? Posso specificarlo sull’URL di connessione? Come farlo?

So che questo è stato già risposto, ma mi sono imbattuto nello stesso problema cercando di specificare lo schema da utilizzare per la riga di comando di liquibase.

Aggiornamento A partire da JDBC v 9.4 è ansible specificare l’url con il nuovo parametro currentSchema in questo modo:

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

Appare basato su una patch precedente:

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

Quale URL proposto è così:

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

A partire dalla versione 9.4 , è ansible utilizzare il parametro currentSchema nella stringa di connessione.

Per esempio:

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

Se è ansible nel proprio ambiente, è ansible 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 tu debba eseguire

 set search_path to 'schema' 

dopo aver effettuato la connessione per specificare lo schema.

Ho inviato una versione aggiornata di una patch al driver JDBC PostgreSQL per abilitarla qualche anno fa. Dovrai compilare il driver JDBC PostreSQL dal sorgente (dopo aver aggiunto la patch) per usarlo:

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

http://jdbc.postgresql.org/

Non dimenticare SET SCHEMA 'myschema' che potresti utilizzare in una dichiarazione separata

SET SCHEMA ‘value’ è un alias per il valore SET search_path TO. È ansible specificare solo uno schema utilizzando questa syntax.

E dal 9.4 e possibilmente versioni precedenti sul driver JDBC, esiste il supporto per il setSchema(String schemaName) .

DataSourcesetCurrentSchema

Quando si crea un’istanza di un’implementazione DataSource , cercare un metodo per impostare lo schema corrente / predefinito.

Ad esempio, nella chiamata alla class 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_" ); // <----------