PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Selezione dinamica dello schema PostgreSQL di runtime in jOOQ

Sembra che almeno per il momento, l'impostazione di search_path sia qualcosa fuori dall'ambito di jOOQ. In teoria, potremmo utilizzare le migrazioni Java in Flyway e forzare tutti i riferimenti all'interno di una funzione ad avere schemi espliciti, ma sembra piuttosto doloroso. Il che ci lascia con l'impostazione manuale del percorso di ricerca, aggiungendolo potenzialmente alla nostra gestione delle transazioni o con la scrittura di un ConnectionProvider più intelligente.

Abbiamo un modello piuttosto rigoroso di una query per transazione sulla nostra applicazione, quindi non c'è davvero alcuna gestione delle transazioni in atto per aggiungere la query "set search_path =..." a. La soluzione ConnectionProvider sembra essere la nostra migliore opzione.

Abbiamo già un'implementazione personalizzata di ConnectionProvider per il pool di connessioni, quindi non è stato troppo complicato aggiungere la logica (indicata sopra alla fine della domanda) per impostare il percorso_ricerca. Potremmo renderlo più performante decorando la connessione con qualcosa che ricordasse a cosa è impostato il suo percorso_ricerca corrente e anteponendo un "set percorso_ricerca =...;" all'inizio di qualsiasi affermazione prima che esca dalla porta, se necessario. Stiamo già riscontrando un impatto sulle prestazioni nell'impostazione di search_path ogni richiesta, quindi è solo questione di tempo prima che diventi una necessità. Bene, questo o tornando al dolore del nostro vecchio livello di accesso al database proprietario.

Per lo meno, non accetterò questa come risposta fino a quando non scrivo e apro il pool di connessioni/impostazione di percorso_ricerca ConnectionProvider, nella speranza che qualcun altro trovi una soluzione migliore prima che me ne occupi.