Na produkcji nasza baza danych ma kilkaset gigabajtów. Na potrzeby programowania i testowania musimy tworzyć migawki tej bazy danych, które są funkcjonalnie równoważne, ale mają tylko 10 lub 20 gigabajtów.
Wyzwanie polega na tym, że dane naszych podmiotów gospodarczych są rozproszone w wielu tabelach. Chcemy stworzyć jakąś przefiltrowaną migawkę, tak aby tylko niektóre encje były uwzględnione w zrzucie. W ten sposób możemy co miesiąc otrzymywać nowe migawki do tworzenia i testowania.
Na przykład załóżmy, że mamy byty, które mają te relacje wiele do wielu:
- Firma ma N dywizji
- Oddział ma N pracowników
- Pracownik ma N rekordów obecności
Istnieje może 1000 firm, 2500 oddziałów, 175000 pracowników i dziesiątki milionów rekordów obecności. Chcemy powtarzalnego sposobu pobierania, powiedzmy, pierwszych 100 firm i wszystkich ich oddziałów, pracowników i rejestrów obecności .
Obecnie używamy pg_dump jako schematu, a następnie uruchamiamy pg_dump z opcjami --disable-triggers i --data-only, aby uzyskać wszystkie dane z mniejszych tabel. Nie chcemy pisać niestandardowych skryptów, aby wyciągnąć część danych, ponieważ mamy szybki cykl rozwoju i obawiamy się, że niestandardowe skrypty byłyby kruche i prawdopodobnie byłyby nieaktualne.
Jak możemy to zrobić? Czy istnieją narzędzia innych firm, które mogą pomóc w wyciągnięciu partycji logicznych z bazy danych? Jak nazywają się te narzędzia?
Wszelkie ogólne rady również mile widziane!
źródło
\copy
zamiast tegoCOPY
, ponieważ ten ostatni był tylko superużytkownikiem. Na szczęście wszystko inne działało idealnie, bez żadnych innych zmian w 9.1.Nie znam żadnego oprogramowania, które już to robi, ale przychodzą mi do głowy 3 alternatywne rozwiązania. Niestety, wszystkie wymagają niestandardowego kodowania.
Utwórz ponownie wszystkie tabele w oddzielnym schemacie, a następnie skopiuj do tych tabel tylko podzbiór danych, które chcesz zrzucić, używając
INSERT INTO copy.tablename SELECT * FROM tablename WHERE ...
i zrzuć to.Napisz własny skrypt do zrzucania danych jako instrukcji SQL. Używałem tego podejścia w przeszłości i wymagało to tylko około 20-30 linii PHP.
Zmodyfikuj pg_dump tak, aby akceptował warunek wraz z przełącznikiem -t podczas zrzucania pojedynczej tabeli.
źródło
http://jailer.sourceforge.net/ robi to.
źródło
how
użyć tego narzędzia, możemy być w stanie zrozumieć, w jaki sposób osiąga cel