Postgres pozwala na użycie dowolnej istniejącej bazy danych na serwerze jako szablonu podczas tworzenia nowej bazy danych. Nie jestem pewien, czy pgAdmin daje ci opcję w oknie dialogowym tworzenia bazy danych, ale jeśli nie, powinieneś być w stanie wykonać następujące czynności w oknie zapytania:
CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
Mimo to możesz uzyskać:
ERROR: source database "originaldb" is being accessed by other users
Aby odłączyć wszystkich innych użytkowników od bazy danych, możesz użyć tego zapytania:
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();
Servers
-> (mój serwer) ->Databases
, kliknąć prawym przyciskiem myszy Bazy danych i wybrać „Nowa baza danych”. Jedną z opcji jest szablon, a SQL użyty do utworzenia bazy danych jest równoważny. Jest o wiele szybszy niż zrzut / przywracanie na tym samym serwerze.Wersja odpowiedzi Bell'a z wiersza poleceń :
Powinno to być uruchamiane z uprawnieniami administratora bazy danych, zwykle postgres.
źródło
createdb: database creation failed: ERROR: source database "conf" is being accessed by other users
jeśli spróbujesz to zrobić na produkcyjnej bazie danych i zgodnie z oczekiwaniami nie chcesz go wyłączać, aby utworzyć kopię.Aby sklonować istniejącą bazę danych z postgres, możesz to zrobić
IT zabije wszystkie połączenia ze źródłową bazą danych, unikając błędu
źródło
procpid
zepid
to zadziałałoW środowisku produkcyjnym, w którym oryginalna baza danych jest obciążona ruchem, po prostu używam:
źródło
pg_dump -s
? postgresql.org/docs/current/static/app-pgdump.html$ createdb newdb
Nie wiem o pgAdmin, ale
pgdump
daje zrzut bazy danych w SQL. Musisz tylko utworzyć bazę danych o tej samej nazwie i zrobićaby przywrócić wszystkie tabele i ich dane oraz wszystkie uprawnienia dostępu.
źródło
pg_dump -U postgres sourcedb | psql -U postgres newdb
chociaż skuteczność tej techniki może być wątpliwa (ponieważ prawdopodobnie kończysz się przełączaniem kontekstu między odczytami i zapisami)ssh dbserver pg_dump DBNAME | psql NEWDB
... lubpg_dump DBNAME | ssh otherserver pgsql NEWDB
... Uprawnienia i uwierzytelnianie oczywiście muszą być obsługiwane bez względu na to, jak chcesz je obsłużyć.Po pierwsze,
sudo
jako użytkownik bazy danych:Przejdź do wiersza polecenia PostgreSQL:
Utwórz nową bazę danych, nadaj uprawnienia i wyjdź:
Skopiuj strukturę i dane ze starej bazy danych do nowej:
źródło
\l+
. Dlaczego różnica wielkości?Połączyłem to podejście z przykładami z góry. Pracuję na serwerze „pod obciążeniem” i dostałem błąd, gdy spróbowałem podejść z @zbyszek. Ja też szukałem rozwiązania „tylko z linii poleceń”.
createdb: database creation failed: ERROR: source database "exampledb" is being accessed by other users
.Oto, co zadziałało dla mnie ( Polecenia poprzedzone
nohup
przeniesieniem danych wyjściowych do pliku i zabezpieczeniem przed rozłączeniem serwera ):nohup pg_dump exampledb > example-01.sql
createdb -O postgres exampledbclone_01
nohup psql exampledbclone_01 < example-01.sql
źródło
W pgAdmin możesz wykonać kopię zapasową z oryginalnej bazy danych, a następnie po prostu utworzyć nową bazę danych i przywrócić z utworzonej kopii zapasowej:
źródło
Jaki jest prawidłowy sposób skopiowania całej bazy danych (jej struktury i danych) do nowej w pgAdmin?
Odpowiedź:
Wypróbowany i przetestowany.
źródło
Z dokumentacji nie zaleca się używania
createdb
lub używaniaCREATE DATABASE
szablonów:pg_dump
lubpg_dumpall
jest dobrym sposobem na skopiowanie bazy danych i wszystkich danych. Jeśli używasz GUI, takiego jak pgAdmin, te polecenia są wywoływane za kulisami podczas wykonywania polecenia tworzenia kopii zapasowej. Kopiowanie do nowej bazy danych odbywa się w dwóch etapach: Kopia zapasowa i Przywracaniepg_dumpall
zapisuje wszystkie bazy danych w klastrze PostgreSQL. Wadą tego podejścia jest to, że powstaje potencjalnie bardzo duży plik tekstowy pełen kodu SQL wymagany do utworzenia bazy danych i zapełnienia danych. Zaletą tego podejścia jest to, że otrzymujesz wszystkie role (uprawnienia) dla klastra za darmo. Aby zrzucić wszystkie bazy danych, zrób to z konta administratorai przywrócić
pg_dump
ma kilka opcji kompresji, które dają znacznie mniejsze pliki. Mam produkcyjną bazę danych, której kopię zapasową tworzę dwa razy dziennie przy użyciu zadania crongdzie
compress
jest poziomem kompresji (od 0 do 9) icreate
każepg_dump
dodawać polecenia, aby utworzyć bazę danych. Przywróć (lub przenieś do nowego klastra) za pomocągdzie newdb to nazwa bazy danych, której chcesz użyć.
Inne rzeczy do przemyślenia
PostgreSQL używa ROLES do zarządzania uprawnieniami. Nie są one kopiowane przez
pg_dump
. Ponadto nie zajmowaliśmy się ustawieniami w postgresql.conf i pg_hba.conf (jeśli przenosisz bazę danych na inny serwer). Musisz samodzielnie skonfigurować ustawienia conf. Ale właśnie odkryłem sztuczkę polegającą na tworzeniu kopii zapasowych ról. Role są zarządzane na poziomie klastra i można poprosićpg_dumpall
o wykonanie kopii zapasowej tylko ról za pomocą--roles-only
przełącznika wiersza polecenia.źródło
PostgreSQL 9.1.2:
źródło
CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
w rezultacie wymaga, aby oryginalna baza danych była bezczynna (brak połączeń z dostępem do zapisu), a wszelkie nowe połączenia z oryginalną bazą danych były blokowane podczas kopiowania. Jeśli jesteś z tego zadowolony, to działa.Dla tych, którzy są nadal zainteresowani, opracowałem skrypt bash, który robi (mniej więcej) to, czego chciał autor. Musiałem wykonać codzienną kopię biznesowej bazy danych w systemie produkcyjnym, ten skrypt wydaje się załatwić sprawę. Pamiętaj o zmianie wartości nazwy bazy danych / użytkownika / pw.
źródło
Aby utworzyć zrzut bazy danych
Aby ponownie zrzucić zrzut bazy danych
źródło
Oto cały proces tworzenia kopii w bazie danych przy użyciu tylko GUI pgadmin4 (poprzez tworzenie kopii zapasowych i przywracanie)
Postgres jest dostarczany z Pgadmin4. Jeśli używasz systemu macOS, możesz nacisnąć
CMD
+SPACE
i wpisać,pgadmin4
aby go uruchomić. Spowoduje to otwarcie karty przeglądarki w chrome.Kroki do kopiowania
1. Utwórz kopię zapasową
Zrób to, klikając bazę danych prawym przyciskiem myszy -> „kopia zapasowa”
2. Nadaj plikowi nazwę.
Jak
test12345
. Kliknij kopię zapasową. Tworzy to zrzut pliku binarnego, nie ma.sql
formatu3. Zobacz, gdzie został pobrany
W prawym dolnym rogu ekranu powinno być wyskakujące okienko. Kliknij stronę „więcej szczegółów”, aby zobaczyć, gdzie została pobrana kopia zapasowa
4. Znajdź lokalizację pobranego pliku
W tym przypadku tak jest
/users/vincenttang
5. Przywróć kopię zapasową z pgadmin
Zakładając, że poprawnie wykonałeś kroki od 1 do 4, będziesz mieć plik binarny przywracania. Może się zdarzyć, że Twój współpracownik będzie chciał użyć pliku przywracania na swoim komputerze lokalnym. Powiedz tej osobie, aby poszła do pgadmin i przywróciła
Zrób to, klikając bazę danych prawym przyciskiem myszy -> „przywróć”
6. Wybierz wyszukiwarkę plików
Pamiętaj, aby ręcznie wybrać lokalizację pliku, NIE przeciągaj i nie upuszczaj pliku na pola programu przesyłającego w pgadmin. Ponieważ napotkasz uprawnienia do błędu. Zamiast tego znajdź właśnie utworzony plik:
7. Znajdź wspomniany plik
Może być konieczna zmiana filtra u dołu na „Wszystkie pliki”. Znajdź plik od kroku 4. Teraz naciśnij prawy przycisk „Wybierz”, aby potwierdzić
8. Przywróć wspomniany plik
Ponownie zobaczysz tę stronę z wybraną lokalizacją pliku. Śmiało i przywróć go
9. Sukces
Jeśli wszystko jest w porządku, w prawym dolnym rogu powinien wyskoczyć wskaźnik pokazujący udane przywracanie. Możesz przejść do swoich tabel, aby sprawdzić, czy dane zostały przywrócone dla każdej tabeli.
10. Jeśli to się nie powiedzie:
Jeśli krok 9 nie powiedzie się, spróbuj usunąć stary schemat publiczny z bazy danych. Przejdź do „Narzędzia do wysyłania zapytań”
Wykonaj ten blok kodu:
Teraz spróbuj ponownie wykonać kroki od 5 do 9, powinno się to udać
EDYCJA - Kilka dodatkowych uwag. Zaktualizuj PGADMIN4, jeśli podczas przesyłania wystąpi błąd z czymś podobnym do „nieobsługiwanej wersji archiwizatora nagłówka 1.14” podczas przywracania
źródło
Jeśli baza danych ma otwarte połączenia, ten skrypt może pomóc. Używam tego do tworzenia testowej bazy danych z kopii zapasowej bazy danych produkcji na żywo każdej nocy. Zakłada się, że masz plik kopii zapasowej .SQL z produkcyjnej bazy danych (robię to w webmin).
źródło
Za pomocą pgAdmin odłącz bazę danych, której chcesz użyć jako szablonu. Następnie wybierasz go jako szablon do utworzenia nowej bazy danych, co pozwala uniknąć błędu już używanego.
źródło
Jeśli chcesz skopiować cały schemat, możesz wykonać zrzut pg za pomocą następującego polecenia:
pg_dump -h database.host.com -d database_name -n schema_name -U database_user --password
A kiedy chcesz zaimportować ten zrzut, możesz użyć:
psql "host=database.host.com user=database_user password=database_password dbname=database_name options=--search_path=schema_name" -f sql_dump_to_import.sql
Więcej informacji na temat parametrów połączenia: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
Lub po prostu łącząc go w jedną wkładkę:
źródło
Odłącz „szablonową” bazę danych, której chcesz użyć jako szablonu.
Uruchom 2 zapytania, jak poniżej
(Powyższa instrukcja SQL zakończy wszystkie aktywne sesje z TemplateDB, a następnie możesz ją teraz wybrać jako szablon do utworzenia nowej bazy danych TargetDB, co pozwoli uniknąć błędu już używanego).
źródło
Spróbuj tego:
gl XD
źródło