Kopiowanie bazy danych PostgreSQL na inny serwer

Szukam kopii produkcyjnej bazy danych PostgreSQL na serwer programistyczny. Jaki jest najszybszy i najłatwiejszy sposób na zrobienie tego?

Author: A-B-B, 2009-08-06

9 answers

Nie musisz tworzyć pliku pośredniego. You can do

pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname

Lub

pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname

Używanie psql lub pg_dump do łączenia się ze zdalnym hostem.

Z dużą bazą danych lub wolnym połączeniem, wyrzucanie pliku i przesyłanie skompresowanego pliku może być szybsze.

Jak powiedział Kornel nie ma potrzeby zrzutu do pośredniego pliku, jeśli chcesz pracować skompresowany możesz użyć skompresowanego tunelu

pg_dump -C dbname | bzip2 | ssh  remoteuser@remotehost "bunzip2 | psql dbname"

Lub

pg_dump -C dbname | ssh -C remoteuser@remotehost "psql dbname"

Ale To rozwiązanie wymaga również, aby uzyskać sesja w obu końcach.

 533
Author: Ferran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-21 20:36:24
pg_dump the_db_name > the_backup.sql

Następnie skopiuj kopię zapasową na serwer programistyczny, Przywróć za pomocą:

psql the_new_dev_db < the_backup.sql
 105
Author: unmounted,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-06 09:12:34

Użyj pg_dump, a później psqllub pg_restore - w zależności od tego, czy wybierzesz opcję-Fp lub-Fc do pg_dump.

Przykład użycia:

ssh production
pg_dump -C -Fp -f dump.sql -U postgres some_database_name
scp dump.sql development:
rm dump.sql
ssh development
psql -U postgres -f dump.sql
 36
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-06 10:05:25

Jeśli szukasz migracji między wersjami (np. zaktualizowałeś postgres i masz 9.1 na localhost: 5432 i 9.3 na localhost:5434) możesz uruchomić:

pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434

Sprawdź migration docs .

 18
Author: Eric H.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-20 00:58:40

pg_basebackup wydaje się, że jest to teraz lepszy sposób, szczególnie w przypadku dużych baz danych.

 12
Author: Reshad user2701173,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-19 17:06:14

Uruchom to polecenie z nazwą bazy danych, chcesz wykonać kopię zapasową, aby zrobić zrzut DB.

 pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}

 eg. pg_dump -U postgres mydbname -f mydbnamedump.sql

Teraz scp ten plik zrzutu do zdalnej maszyny, gdzie chcesz skopiować DB.

eg. scp mydbnamedump.sql user01@remotemachineip:~/some/folder/

Na zdalnym komputerze uruchom następujące polecenie w ~ / some / folder, aby przywrócić DB.

 psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}

 eg. psql -U postgres -d mynewdb -f mydbnamedump.sql
 4
Author: user01,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-16 06:45:23

Walczyłem dość dużo i w końcu metoda, która pozwoliła mi to zrobić z Rails 4 Była:

Na Twoim starym serwerze

sudo su - postgres
pg_dump -c --inserts old_db_name > dump.sql

Musiałem użyć użytkownika Postgres linux, aby utworzyć zrzut. musiałem również użyć -c, aby wymusić utworzenie bazy danych na nowym serwerze. -- insert mówi mu, aby używał składni INSERT (), która w przeciwnym razie nie działałaby dla mnie: (

Następnie, na nowym serwerze, simpy:

sudo su - postgres
psql new_database_name < dump.sql

Aby przenieść zrzut.plik sql pomiędzy serwerem po prostu użyłem "kot", aby wydrukować zawartość, a następnie "nano", aby odtworzyć ją copypasting treści.

Również rola, której używałem w dwóch bazach danych, była inna, więc musiałem znaleźć-wymienić wszystkie nazwy właściciela na wysypisku.

 3
Author: pastullo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-13 22:15:45

Pozwól mi udostępnić skrypt powłoki Linuksa, aby skopiować dane tabeli z jednego serwera na inny serwer PostgreSQL.

Odniesienie zaczerpnięte z tego bloga:

Skrypt powłoki Linux Bash do migracji danych pomiędzy serwerami PostgreSQL:

#!/bin/bash
psql \
    -X \
    -U user_name \
    -h host_name1 \
    -d database_name \
    -c "\\copy tbl_Students to stdout" \
| \
psql \
    -X \
    -U user_name \
    -h host_name2 \
    -d database_name \
    -c "\\copy tbl_Students from stdin"

Właśnie migruję dane; Proszę utworzyć pustą tabelę na docelowym / drugim serwerze bazy danych.

Jest to skrypt użytkowy. Co więcej, możesz zmodyfikować skrypt pod kątem użycia generycznego, dodając parametry dla host_name, database_name, table_name i innych

 2
Author: Anvesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-02 20:18:09

Wyrzuć swoją bazę danych: pg_dump database_name_name > backup.sql


Importuj bazę danych z powrotem: psql db_name < backup.sql

 0
Author: MisterJoyson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-10 09:02:21