Szukaj…


Uwagi

Tworzenie kopii zapasowej systemu plików zamiast używania pg_dumpall i pg_dump

Bardzo ważne jest, aby użyć tej funkcji przed wywołaniem funkcji pg_start_backup() a następnie funkcji pg_stop_backup() . W przeciwnym razie wykonywanie kopii zapasowych systemu plików nie jest bezpieczne; nawet migawka ZFS lub FreeBSD systemu plików, którego kopię zapasową utworzono bez tych wywołań funkcji, spowoduje przejście bazy danych w tryb odzyskiwania i może utracić transakcje.

Unikałbym wykonywania kopii zapasowych systemu plików zamiast zwykłych kopii zapasowych Postgres, zarówno z tego powodu, jak i dlatego, że pliki kopii zapasowych Postgres (szczególnie w niestandardowym formacie) są niezwykle wszechstronne, jeśli chodzi o obsługę alternatywnych przywracania. Ponieważ są to pojedyncze pliki, łatwiej nimi zarządzać.

Tworzenie kopii zapasowej jednej bazy danych

pg_dump -Fc -f DATABASE.pgsql DATABASE

-Fc wybiera „niestandardowy format kopii zapasowej”, który daje więcej mocy niż surowy SQL; więcej szczegółów znajdziesz na pg_restore . Jeśli chcesz waniliowy plik SQL, możesz to zrobić w zamian:

pg_dump -f DATABASE.sql DATABASE

lub nawet

pg_dump DATABASE > DATABASE.sql

Przywracanie kopii zapasowych

psql < backup.sql

Bezpieczniejsza alternatywa używa -1 do zawijania operacji przywracania. -f określa nazwę pliku zamiast używania przekierowania powłoki.

psql -1f backup.sql

Pliki w formacie niestandardowym należy przywrócić za pomocą pg_restore z opcją -d , aby określić bazę danych:

pg_restore -d DATABASE DATABASE.pgsql

Format niestandardowy można również przekonwertować z powrotem na SQL:

pg_restore backup.pgsql > backup.sql

Zalecane jest użycie niestandardowego formatu, ponieważ można wybrać rzeczy do przywrócenia i opcjonalnie włączyć przetwarzanie równoległe.

W przypadku aktualizacji z jednej wersji postgresql do nowszej może być konieczne wykonanie pg_dump, a następnie pg_restore.

Tworzenie kopii zapasowej całego klastra

$ pg_dumpall -f backup.sql

Działa to za kulisami, tworząc wiele połączeń z serwerem raz dla każdej bazy danych i wykonując na nim pg_dump .

Czasami może pojawić się pokusa, aby ustawić to jako zadanie CRON, więc chcesz zobaczyć datę utworzenia kopii zapasowej jako część nazwy pliku:

$ postgres-backup-$(date +%Y-%m-%d).sql

Należy jednak pamiętać, że może to generować duże pliki codziennie. Postgresql ma znacznie lepszy mechanizm regularnych kopii zapasowych - archiwa WAL

Dane wyjściowe z pg_dumpall są wystarczające do przywrócenia do identycznie skonfigurowanej instancji Postgres, ale pliki konfiguracyjne w $PGDATA ( pg_hba.conf i postgresql.conf ) nie są częścią kopii zapasowej, więc będziesz musiał wykonać ich kopię zapasową osobno.

postgres=# SELECT pg_start_backup('my-backup');
postgres=# SELECT pg_stop_backup();

Aby wykonać kopię zapasową systemu plików, musisz użyć tych funkcji, aby upewnić się, że Postgres jest w spójnym stanie podczas przygotowywania kopii zapasowej.

Za pomocą Kopiuj do importowania

Aby skopiować dane z pliku CSV do tabeli

COPY <tablename> FROM '<filename with path>';

Aby wstawić do tabeli user z pliku o nazwie user_data.csv umieszczonego wewnątrz /home/user/ :

COPY user FROM '/home/user/user_data.csv';

Aby skopiować dane z pliku oddzielonego potokiem do tabeli

COPY user FROM '/home/user/user_data' WITH DELIMITER '|';

Uwaga: W przypadku braku opcji with delimiter domyślnym ogranicznikiem jest przecinek ,

Aby zignorować wiersz nagłówka podczas importowania pliku

Użyj opcji nagłówka:

COPY user FROM '/home/user/user_data' WITH DELIMITER '|' HEADER;

Uwaga: Jeśli dane są cytowane, domyślnie znaki cudzysłowu są podwójnie cytowane. Jeśli dane są cytowane przy użyciu dowolnego innego znaku, skorzystaj z opcji QUOTE ; jednak ta opcja jest dozwolona tylko przy użyciu formatu CSV.

Za pomocą Kopiuj do eksportu

Aby skopiować tabelę do standardowego o / p

KOPIUJ <nazwa_tablicy> DO STDOUT (DELIMITER '|');

Aby wyeksportować użytkownika tabeli do standardowego wyjścia:

KOPIUJ użytkownika DO STDOUT (DELIMITER '|');

Aby skopiować tabelę do pliku

KOPIUJ użytkownika Z '/ home / user / user_data' WITH DELIMITER '|';

Aby skopiować dane wyjściowe instrukcji SQL do pliku

COPY (instrukcja sql) TO '<nazwa pliku ze ścieżką>';

KOPIUJ (WYBIERZ * OD użytkownika, GDZIE nazwa_użytkownika JAK 'A%') DO '/ home / user / user_data';

Aby skopiować do skompresowanego pliku

KOPIUJ użytkownika DO PROGRAMU 'gzip> /home/user/user_data.gz';

Tutaj wykonywany jest program gzip do kompresji danych tabeli użytkowników.

Używanie psql do eksportowania danych

Dane można eksportować za pomocą polecenia kopiowania lub przy użyciu opcji wiersza polecenia polecenia psql.

Aby wyeksportować dane csv z użytkownika tabeli do pliku csv:

psql -p \<port> -U \<username> -d \<database> -A -F<delimiter> -c\<sql to execute> \> \<output filename with path>

psql -p 5432 -U postgres -d test_database -A -F, -c "select * from user" > /home/user/user_data.csv

Tutaj kombinacja -A i -F załatwia sprawę.

-F określa delimiter

-A or --no-align

Przełącza na tryb wyrównywania wyjścia. (Domyślny tryb wyjściowy jest w inny sposób wyrównany).



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow