Zaimportuj zrzut SQL do bazy danych PostgreSQL

451

Zmieniamy hosty, a stary udostępnił zrzut SQL bazy danych PostgreSQL naszej witryny.

Teraz próbuję skonfigurować to na lokalnym serwerze WAMP, aby to przetestować.

Jedynym problemem jest to, że nie mam pojęcia, jak zaimportować tę bazę danych do PostgreSQL 9, który skonfigurowałem.

Próbowałem pgAdmin III, ale nie mogę znaleźć funkcji „importowania”. Więc właśnie otworzyłem edytor SQL i wkleiłem tam zawartość zrzutu i wykonałem go, tworzy on tabele, ale ciągle wyświetla mi błędy, gdy próbuje umieścić w nim dane.

ERROR:  syntax error at or near "t"
LINE 474: t 2011-05-24 16:45:01.768633 2011-05-24 16:45:01.768633 view...

The lines:
COPY tb_abilities (active, creation, modtime, id, lang, title, description) FROM stdin;
t   2011-05-24 16:45:01.768633  2011-05-24 16:45:01.768633  view    nl ...  

Próbowałem również to zrobić za pomocą wiersza polecenia, ale nie mogę znaleźć polecenia, którego potrzebuję.

Jeśli zrobię

psql mydatabase < C:/database/db-backup.sql;

Dostaję błąd

ERROR:  syntax error at or near "psql"
LINE 1: psql mydatabase < C:/database/db-backu...
        ^

Jaki jest najlepszy sposób na zaimportowanie bazy danych?

olśnić
źródło
Miałem podobny błąd do pierwszego: ERROR: syntax error at or near "t". Okazało się, że zaimportowałem tylko częściowy schemat, dlatego CREATE TABLEnie udało się wypowiedzieć wcześniej w skrypcie. Przejrzyj pełne dane wyjściowe importu, aby je znaleźć.
owensmartin,

Odpowiedzi:

732
psql databasename < data_base_dump

To polecenie, którego szukasz.

Uwaga: databasenamenależy utworzyć przed importem. Wystarczy popatrzeć na PostgreSQL Docs Rozdział 23. Kopia zapasowa i przywracanie .

Jakub
źródło
1
Próbowałem tej psql mydatabase <C: \ database \ db-backup.sql, ale pojawia się błąd Niepoprawne polecenie \ baza danych. Próbowałem też z „” wokół tego.
dazz
23
@Dazz Musisz wykonać to polecenie z wiersza polecenia (Start -> Uruchom -> cmd), a nie z wiersza polecenia postgres.
Jacob
2
jeśli uruchomię go z cmd, dostanę operator „<” jest zarezerwowany do użycia w przyszłości. ”
oszołomić
3
@Dazz: Możesz również użyć -fprzełącznika (lub --file)
Grzegorz Szpetkowski
47
psql --username = postgres nazwa bazy danych <data_base_dump.sql
Maxence
356

Oto polecenie, którego szukasz.

psql -h hostname -d databasename -U username -f file.sql
Gabriel Ramirez
źródło
29
Dobrze, ale lepiej dołączyć również parametr „-L logfile.log”, aby zarejestrować dane wyjściowe w pliku.
zerologiko
2
uzyskanie tego „Dane wejściowe to zrzut niestandardowego formatu PostgreSQL. Użyj klienta wiersza polecenia pg_restore, aby przywrócić ten zrzut do bazy danych”.
Wajdan Ali,
3
Możesz także:pg_restore -h hostname -d dbname -U username filename.sql
Fábio Araújo,
114

Wierzę, że chcesz uruchomić w psql:

\i C:/database/db-backup.sql
Arran Ubels
źródło
Musiałem tego użyć, ponieważ skorupa Emacsa nie obsługuje przekierowywania danych wejściowych. Dzięki.
duma
3
Najpierw pamiętaj o przejściu do bazy danych za pomocą \ c <
nazwa_bazy_danych
53

To działało dla mnie:

sudo -u postgres psql db_name < 'file_path'
ivanacorovic
źródło
49

Nie jestem pewien, czy to działa w sytuacji OP, ale stwierdziłem, że uruchomienie następującego polecenia w interaktywnej konsoli było dla mnie najbardziej elastycznym rozwiązaniem:

\i 'path/to/file.sql'

Upewnij się tylko, że jesteś już podłączony do właściwej bazy danych. To polecenie wykonuje wszystkie polecenia SQL z określonego pliku.

rockusbacchus
źródło
1
To rozwiązanie działało dla mnie, a najczęściej wybierane rozwiązanie dawało błąd „stdin nie jest tty”.
김민준
Właśnie tego szukałem - sposób na wykonanie skryptu z poziomu psqlwiersza poleceń. Dzięki!
vatsug
Chciałem ci tylko za to podziękować. Powinny być zawarte we właściwej odpowiedzi.
PKHunter
jest to poprawne, nie używaj ukośników na ścieżce w systemie Windows!
Erdinc Ay
także w systemie Windows potrzebujesz podwójnych ukośników
CMAS
44

Działa całkiem dobrze, w wierszu poleceń wymagane są wszystkie argumenty, -W to hasło

psql -h localhost -U user -W -d database_name -f path/to/file.sql
Feuda
źródło
22

Tylko dla miłośników, jeśli twój zrzut jest skompresowany, możesz zrobić coś takiego

gunzip -c filename.gz | psql dbname

Jak wspomniał Jacob, dokumenty PostgreSQL opisują to wszystko całkiem dobrze.

alan
źródło
7

Używam:

cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>

Mam nadzieję, że to komuś pomoże.

Vajira Lasantha
źródło
4

Możesz to zrobić w pgadmin3. Upuść schematy, które zawiera zrzut. Następnie kliknij bazę danych prawym przyciskiem myszy i wybierz Przywróć. Następnie możesz wyszukać plik zrzutu.

Vanessa MacDougal
źródło
2
Ale przycisku „przywróć” nie można kliknąć, nawet po wybraniu pliku .sql. Wydaje się, że to oprogramowanie potrzebuje innego rodzaju pliku - jednego z formatem * .backup. Kliknięcie „pomocy” w tym polu importu odnosi się do pg_restore - „... narzędzie do przywracania bazy danych PostgreSQL z archiwum utworzonego przez pg_dump w jednym z formatów innych niż zwykły tekst”. Plik SQL, do którego odnosi się OP, jest formatem zwykłego tekstu.
JosephK
4

Zauważyłem, że wiele przykładów jest zbyt skomplikowanych dla hosta lokalnego, gdzie w wielu przypadkach istnieje tylko użytkownik postgres bez hasła:

psql -d db_name -f dump.sql
Kiryl Plyashkevich
źródło
4

upewnij się, że baza danych, do której chcesz zaimportować, została utworzona, a następnie możesz zaimportować zrzut

sudo -u postgres -i psql testdatabase < db-structure.sql

Jeśli chcesz zastąpić całą bazę danych, najpierw usuń bazę danych

# be sure you drop the right database !!!
#sudo -u postgres -i psql -c "drop database testdatabase;"

a następnie odtwórz go za pomocą

sudo -u postgres -i psql -c "create database testdatabase;"
rubo77
źródło
2

Próbowałem wielu różnych rozwiązań do przywracania kopii zapasowej Postgres. Natknąłem się na odmowę zgody na MacOS, żadne rozwiązanie nie działało.

Oto jak udało mi się to uruchomić:

Postgres jest dostarczany z Pgadmin4. Jeśli używasz systemu macOS, możesz nacisnąć CMD+ SPACEi wpisać, pgadmin4aby go uruchomić. Spowoduje to otwarcie karty przeglądarki w chrome.

Jeśli wystąpią błędy przy uruchamianiu pgadmin4, spróbuj killall pgAdmin4w swoim terminalu, a następnie spróbuj ponownie.


Kroki do uzyskania kopii zapasowej / przywracania pgadmin4 +

1. Utwórz kopię zapasową

Zrób to, klikając bazę danych prawym przyciskiem myszy -> „kopia zapasowa”

wprowadź opis zdjęcia tutaj

2. Nadaj plikowi nazwę.

Jak test12345. Kliknij kopię zapasową. Tworzy to zrzut pliku binarnego, nie ma .sqlformatu

wprowadź opis zdjęcia tutaj

3. 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

wprowadź opis zdjęcia tutaj

4. Znajdź lokalizację pobranego pliku

W tym przypadku tak jest /users/vincenttang

wprowadź opis zdjęcia tutaj

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óć”

wprowadź opis zdjęcia tutaj

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:

wprowadź opis zdjęcia tutaj

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ć

wprowadź opis zdjęcia tutaj

8. Przywróć wspomniany plik

Ponownie zobaczysz tę stronę z wybraną lokalizacją pliku. Śmiało i przywróć go

wprowadź opis zdjęcia tutaj

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ń”

wprowadź opis zdjęcia tutaj

Wykonaj ten blok kodu:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

wprowadź opis zdjęcia tutaj

Teraz spróbuj ponownie wykonać kroki od 5 do 9, powinno się to udać

Podsumowanie

W ten sposób musiałem wykonać kopię zapasową / przywrócić kopię zapasową na Postgres, gdy miałem problemy z uprawnieniami do błędów i nie mogłem zalogować się jako administrator. Lub ustaw poświadczenia do odczytu / zapisu przy użyciu chmodfolderów. Ten przepływ pracy działa dla domyślnego zrzutu pliku binarnego „Niestandardowy” z pgadmin. Zakładam, że .sqljest tak samo, ale jeszcze tego nie przetestowałem

Vincent Tang
źródło