2013-07-11 33 views
6

Próbuję przywrócić pg_dump pobraną za pomocą tego polecenia z innego serwera.PostgreSQL 9.0.13 robi pg_restore, ale nie ma dowodu, że przestrzeń dyskowa jest używana

sudo -u postgres pg_dump --verbose --format=custom --file=pg-backup.sql -U postgres salesDB 

Po skopiowaniu pliku PG-backup.sql próbuję przywrócić z tego polecenia

sudo -u postgres pg_restore --verbose --jobs=`nproc` -f pg-backup.sql 

Plik pg-backup.sql jest 13PL. Funkcja pg-restore działa przez 4 godziny, przewijając dane przez cały czas na ekranie. Bez błędów.

Ale kiedy wykonać tę deklarację z sesji psql

SELECT pg_size_pretty(pg_database_size('salesDB')); 

dostaję 5377 KB. CO? Powinno to już wynosić co najmniej 1 GB. Jestem całkowicie zagubiony. Wszystkie te dane przewijają się po ekranie i nie mogę udowodnić, że wszystko idzie. Brak użycia dysku.

Pomoc

+0

Na marginesie, gratulacje za bieżące wydanie poprawki. Widzę tutaj zbyt wiele 9.0.4. –

Odpowiedz

5

Wypróbuj go bez "-f" flag w poleceniu pg_restore. Możesz także spróbować utworzyć pustą bazę danych salesdb i przekazać ją w "-d salesdb". Zauważ, że nazwa bazy będzie się składać z małymi literami, chyba że została utworzona w podwójnych cudzysłowach.

Dodane przykładowe kroki, aby pokazać, że db rośnie w wielkości jak przywrócić działa

-- sample pg_dump command 
pg_dump -f testdb.out -Fc src_test_db 

-- create the db to restore into 
createdb sometestdb 

-- restore with 4 parallel jobs, from the "testdb.out" file, into the db "sometestdb" 
time pg_restore --dbname=sometestdb --jobs=4 testdb.out 

-- In another window, every few seconds, you can see the db growing 
psql -d postgres -c "select pg_size_pretty(pg_database_size('sometestdb'))" 
pg_size_pretty 
---------------- 
4920 MB 

psql -d postgres -c "select pg_size_pretty(pg_database_size('sometestdb'))" 
pg_size_pretty 
---------------- 
4920 MB 

psql -d postgres -c "select pg_size_pretty(pg_database_size('sometestdb'))" 
pg_size_pretty 
---------------- 
5028 MB 

psql -d postgres -c "select pg_size_pretty(pg_database_size('sometestdb'))" 
pg_size_pretty 
---------------- 
5371 MB 
+0

Co mówisz, że powinienem zobaczyć rozmiar bazy danych przy każdym uruchomieniu funkcji pg_database_size podczas przywracania? i dopóki nie widzę, że nie mam racji? –

+0

Tak, a nawet sprawdź 'df'. – bma

+0

@WadeJernigan, Edytowałem swoją odpowiedź, aby pokazać, że db rośnie podczas pg_restore. – bma

2

Wygląda mi na to, że opowiadał pg_restore wydrukować zawartość zrzutu do wyświetlacza, nie przywróci go do baza danych. Czy podałeś --dbname?

Osobiście uważam, że składnia wiersza poleceń nie jest szczególnie intuicyjna, a jeśli kiedykolwiek dostanę czas, jest to jedna z rzeczy, które chciałbym poprawić w Pg.

+0

nie można użyć --dbname, jeśli podano -f (nazwa pliku), ale tak, wydaje się, że pisałem tylko na ekranie. Usunąłem przełącznik --verbose. Teraz nie mam nic na ekranie przez ostatnie 14 godzin i żadnego dowodu, że baza danych również rośnie. grrr Potrzebuję sposobu na udowodnienie, że dane trafiają do bazy danych. Spróbuję niektórych instrukcji wyboru. Szkoda, że ​​nie zgłosi rosnącego rozmiaru. –

4

ZDECYDOWANE - błąd Składnia (wyjście plik ) -f parametr jest bezużyteczny, o ile mogę powiedzieć. Musiałem określić plik dla pg_restore, aby był używany bez żadnej flagi, tylko jako ostatni element w wierszu poleceń. Potrzebny był parametr -d salesdb. Mam 16 cpusów, więc ustawiłem -j 15, który wydawał mi się bardzo pomocny. mój ostatni wiersz poleceń było

sudo -u postgres pg_restore -d salesdb --jobs=15 backup10.sql 

Potem bardzo szybko uzyskać przyrosty wielkości z funkcją pg_database_size.

Rośnie tak, jak powinna.

+0

Nie jestem całkowicie zaznajomiony z działaniem tego forum, ale wskazuję na bma. Miał rację, dzięki. –

+2

Myślę, że po prostu "akceptujesz" odpowiedź, którą wybrałeś jako właściwą. – bma