Zakładając, że interesujące Cię tabele mają (lub mogą być wzbogacone) unikalny, indeksowany klucz sekwencyjny, znacznie lepszą wartość uzyskasz, po prostu wydając SELECT ... FROM table ... WHERE key > :last_max_key
z wyjściem do pliku, gdzie last_max_key
to ostatnia wartość klucza z ostatniej ekstrakcji (0, jeśli pierwsza ekstrakcja). To przyrostowe, oddzielone podejście pozwala uniknąć wprowadzenie opóźnienia wyzwalacza w ścieżce danych wstawiania (czy to niestandardowe wyzwalacze, czy zmodyfikowane Slony) i w zależności od konfiguracji może lepiej skalować się z liczbą procesorów itp. (Jeśli jednak musisz także śledzić UPDATE
s , a klucz sekwencyjny został dodany przez Ciebie, a następnie Twoja UPDATE
instrukcje powinny SET
kolumna klucza do NULL
więc otrzymuje nową wartość i jest wybierany przez następną ekstrakcję. nie będziesz w stanie śledzić DELETE
s bez wyzwalacza). Czy to miałeś na myśli, kiedy wspomniałeś o Talendzie?
Nie korzystałbym z funkcji rejestrowania, chyba że nie możesz wdrożyć powyższego rozwiązania; rejestrowanie najprawdopodobniej wiąże się z zablokowaniem narzutu aby upewnić się, że wiersze dziennika są zapisywane sekwencyjnie i nie nakładają się/nie nadpisują się nawzajem, gdy wiele backendów zapisuje do dziennika (sprawdź źródło Postgres). Narzut blokowania może nie być katastrofalny, ale możesz się bez niego obejść, jeśli możesz użyć przyrostowego SELECT
alternatywny. Co więcej, zagłuszałoby rejestrowanie wyciągów wszelkie przydatne komunikaty OSTRZEGAWCZE lub BŁĘDOWE, a samo analizowanie nie będzie natychmiastowe .
O ile nie chcesz analizować WAL (w tym śledzenie stanu transakcji i być gotowym do przepisywania kodu za każdym razem, gdy uaktualnisz Postgresa), niekoniecznie będę używał WAL-ów — to znaczy, chyba że masz dostępny dodatkowy sprzęt , w takim przypadku możesz wysłać pliki WAL na inny komputer w celu wyodrębnienia (na drugiej maszynie możesz bezwstydnie używać wyzwalaczy -- a nawet rejestrowanie instrukcji -- ponieważ cokolwiek się tam dzieje, nie ma wpływu na INSERT
/UPDATE
/DELETE
wydajność na maszynie podstawowej.) Zauważ, że pod względem wydajności (na maszynie podstawowej), o ile nie możesz zapisywać dzienników do sieci SAN, uzyskasz porównywalny spadek wydajności (w kategoriach thrashing pamięci podręcznej systemu plików, głównie) z dostarczania WAL-ów na inną maszynę od uruchomienia przyrostowego SELECT
.