PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Seleção de esquema PostgreSQL de tempo de execução dinâmico no jOOQ


Parece que, pelo menos por enquanto, definir search_path é algo fora do escopo do jOOQ. Poderíamos, em teoria, usar migrações Java no Flyway e forçar todas as referências dentro de uma função a ter esquemas explícitos, mas isso parece bastante doloroso. O que nos deixa com a configuração do caminho de pesquisa manualmente, potencialmente adicionando-o ao nosso gerenciamento de transações ou escrevendo um ConnectionProvider mais inteligente.

Temos um modelo bastante estrito de uma consulta por transação em nosso aplicativo, portanto, não há realmente nenhum gerenciamento de transações para adicionar a consulta "set search_path =...". A solução ConnectionProvider parece ser nossa melhor opção.

Já temos uma implementação de ConnectionProvider personalizada para pool de conexões, portanto, não foi muito trabalhoso adicionar a lógica (dada acima no final da pergunta) para definir o search_path. Poderíamos torná-lo mais eficiente decorando a Connection com algo que lembrasse para o que seu search_path atual está definido e prefixando um "set search_path =...;" para a frente de qualquer declaração antes de sair pela porta, se necessário. Já estamos vendo um impacto no desempenho ao definir o search_path a cada solicitação, portanto, é apenas uma questão de tempo até que isso se torne uma necessidade. Bem, isso ou voltando à dor de nossa antiga camada de acesso ao banco de dados proprietário.

No mínimo, não aceitarei isso como a resposta até que eu escreva e abra o código da conexão pool/search_path configuração ConnectionProvider, na esperança de que alguém venha com uma solução melhor antes de eu chegar a isso.