Miałem nadzieję, że uda mi się uzyskać jasną odpowiedź na pytanie, jak zapewnić wykonanie pełnej kopii zapasowej Postgres, tak jak w przypadku MS SQL Server, a następnie zająć się osieroconymi użytkownikami.
Z tego, co przeczytałem, i może być źle, znalezienie dobrego bloga PostgreSQL było trudnym wyzwaniem, więc proszę polecić mi trochę, muszę dowiedzieć się, jak działa ta aplikacja, aby mieć zaufanie do moich kopii zapasowych i Slony replikacja. Miałem deweloper przywrócić kopię zapasową wziąłem od PgadminIII pośrednictwem custom
, directory
oraz tar
formatu podczas wybierania OID
s ale powiedział, dwie z nich nie obciążenie, tar
tak, ale to było tylko katalogiem, a nie danych. Jestem teraz naprawdę zdezorientowany.
- Korzystam z PGAdminIII, ma opcję
pg_dump
ipg_dumpall
. Chcę wykonać kopię zapasową wszystkiego , czego potrzebuję, aby gdzieś przetestować przywracanie tej bazy danych i sprawdzić, czy tak, wszystkie potrzebne dane i nasza kopia zapasowa są dobre. W końcu chcę napisać skrypt automatycznego przywracania, ale jeden dzień na raz.
pg_dumpall
najwyraźniej ma -globals
opcję, która ma wykonać kopię zapasową wszystkiego, ale pomoc dla pg_dumpall
pokazuje, a -g, --globals-only dump only global objects, no databases
nie --globals
opcję.
Myślałem, pg_dumpall
że przynajmniej stworzę kopię zapasową kluczy obcych, ale nawet to wydaje się być „opcją”. Zgodnie z dokumentacją , nawet jeśli pg_dumpall
muszę użyć -o
opcji do tworzenia kopii zapasowych kluczy obcych, nie mogę sobie wyobrazić, kiedy nie chciałbym tworzyć kopii zapasowych kluczy obcych, a to byłoby bardziej sensowne jako opcja domyślna.
- Jak mam zająć się osieroconymi użytkownikami i sprawdzić, czy mam wszystko? Chciałbym przywrócić plik kopii zapasowej na innym serwerze i sprawdzić, czy wszystko działa. Jeśli ktoś ma jakieś sugestie, jak zrobić prawdziwą kopię zapasową w PostgreSQL i przywrócić, byłbym bardzo wdzięczny.
Miałem serwer PostgreSQL, ale nadal nie mogę zrozumieć, dlaczego aplikacja OID
domyślnie nie tworzy kopii zapasowych ! Wydaje się, że 99,9% czasu tego chcesz.
AKTUALIZACJA 1:
Postgres'a dokumentacja wspomina, że globals
opcja Szukałem wydaje się być opcja domyślna dla tej wersji, ale nadal potrzebuje -o
opcję. Jeśli ktoś może zweryfikować lub podać przykładowe polecenie przywrócenia pojedynczej bazy danych w innym miejscu ze wszystkim, czego potrzebuje, byłbym wdzięczny.
Edycja: poproszony przez witrynę o pokazanie wyjątkowości tego pytania poprzez edycję mojego pytania. To pytanie podnosi problem i zapewnia przejrzystość identyfikatorów OID w kopiach zapasowych, różnicę między globalnymi i nieglobalnymi, a także testowanie przywraca zalecenia, aby upewnić się, że kopia zapasowa jest dobra, a nie tylko sama kopia zapasowa. Dzięki odpowiedziom udało mi się wykonać kopię zapasową, dowiedzieć się o globals / oids i co noc rozpocząłem testowy proces przywracania na Postgres przy użyciu zadań cron. Dzięki za pomoc!
źródło
Odpowiedzi:
Możesz zrzucić cały klaster PostgreSQL za pomocą pg_dumpall. To są wszystkie bazy danych i wszystkie globale dla jednego klastra. Z wiersza poleceń na serwerze zrobiłbym coś takiego. (Mój nasłuchuje na porcie 5433, a nie na porcie domyślnym.) Możesz - lub nie potrzebować opcji --clean.
Obejmuje to dane globalne - informacje o użytkownikach i grupach, obszarach tabel itp.
Gdybym miał wykonać kopię zapasową pojedynczej bazy danych i przenieść ją na serwer scratch , zrzuciłbym bazę danych za pomocą pg_dump, a globalny za pomocą
pg_dumpall --globals-only
lubpg_dumpall --roles-only
(jeśli potrzebujesz tylko ról)lubię to.
Dane wyjściowe to tylko pliki tekstowe.
Po przeniesieniu tych plików na inny serwer najpierw załaduj globals, a następnie zrzut bazy danych.
Nie, w tym odwołaniu jest napisane: „Użyj tej opcji, jeśli aplikacja w jakiś sposób odwołuje się do kolumn OID (np. Z ograniczeniem klucza obcego). W przeciwnym razie ta opcja nie powinna być używana”. (Podkreślenie dodane.) Myślę, że jest mało prawdopodobne, aby twoja aplikacja odwoływała się do kolumn OID. Nie musisz używać tej opcji do tworzenia kopii zapasowych kluczy obcych. (Przeczytaj plik zrzutu w edytorze lub przeglądarce plików).
źródło
psql -U postgres -h localhost -p 5433 sandbox < sandbox.sql
pg_dumpall
wersja 9.5 nie działa poprawnie zNULL
wartościami podczas używaniaCOPY
. Otrzymuję wiele takich błędów:psql:/tmp/dumpall.sql:4133559: invalid command \N psql:/tmp/dumpall.sql:4133560: invalid command \.
Podczas importowania z powrotem do Postgres 10 przy użyciupsql -f /tmp/dumpall.sql