PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dynamiczny wybór schematu PostgreSQL w czasie wykonywania w jOOQ

Wygląda na to, że przynajmniej na razie ustawienie search_path jest czymś poza zakresem jOOQ. Teoretycznie moglibyśmy użyć migracji Javy w Flyway i wymusić, aby wszystkie odwołania w funkcji miały wyraźne schematy, ale brzmi to dość boleśnie. Co pozostawia nam albo ręczne ustawienie ścieżki wyszukiwania, potencjalnie dodanie jej do naszego zarządzania transakcjami, albo napisanie inteligentniejszego ConnectionProvider.

W naszej aplikacji mamy dość ścisły model jedno zapytanie na transakcję, więc tak naprawdę nie ma żadnego zarządzania transakcjami, do którego można by dodać zapytanie „set search_path =...”. Rozwiązanie ConnectionProvider wydaje się być naszą najlepszą opcją.

Mamy już niestandardową implementację ConnectionProvider do puli połączeń, więc dodanie logiki (podanej powyżej na końcu pytania) w celu ustawienia ścieżki search_path nie było zbyt wielkim problemem. Moglibyśmy uczynić go bardziej wydajnym, dekorując połączenie czymś, co pamiętało, na co jest ustawiona jego bieżąca ścieżka_przeszukiwania, i dodając przedrostek „set search_path =...;” na początku jakiegokolwiek oświadczenia, zanim wyjdzie za drzwi, jeśli zajdzie taka potrzeba. Już teraz widzimy wpływ na wydajność ustawiania search_path przy każdym żądaniu, więc to tylko kwestia czasu, zanim stanie się to koniecznością. Cóż, to lub wracając do bólu naszej starej zastrzeżonej warstwy dostępu do bazy danych.

Przynajmniej nie zaakceptuję tego jako odpowiedzi, dopóki nie napiszę i nie otworzę kodu źródłowego ustawienia puli połączeń/ścieżki_wyszukiwania ConnectionProvider, w nadziei, że ktoś inny wymyśli lepsze rozwiązanie, zanim się do tego zabiorę.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak słowa kluczowe IMMUTABLE, STABLE i VOLATILE wpływają na zachowanie funkcji?

  2. Odpowiednik opisanej tabeli w PgAdmin3

  3. Używanie UNNEST z JOIN

  4. Jak usunąć duplikaty, aby w tabeli istniały tylko pary?

  5. Sparametryzowana klauzula IN przy użyciu wielu kolumn