Jak zaimportować istniejące pliki * .sql w PostgreSQL 8.4?

105

Używam PostgreSQL 8.4 i mam kilka plików * .sql do zaimportowania do bazy danych. Jak mogę to zrobić?

Badr
źródło

Odpowiedzi:

142

Z wiersza poleceń:

psql -f 1.sql
psql -f 2.sql

Z psqlmonitu:

\i 1.sql
\i 2.sql

Zwróć uwagę, że może być konieczne zaimportowanie plików w określonej kolejności (na przykład: definicja danych przed manipulacją danymi). Jeśli masz bashpowłokę (GNU / Linux, Mac OS X, Cygwin) i pliki mogą być importowane w kolejności alfabetycznej , możesz użyć tego polecenia:

for f in *.sql ; do psql -f $f ; done

Oto dokumentacja psqlaplikacji (dzięki, Frank): http://www.postgresql.org/docs/current/static/app-psql.html

Bolo
źródło
@moon Może nie masz praw dostępu do plików SQL? Na jakim systemie operacyjnym używasz?
Bolo
@moon Jest to hasło powiązane z użytkownikiem PostgreSQL (para przepustek użytkownika jest przechowywana w PostgreSQL).
Bolo
8
@moon Proponuję podzielić problem na trzy etapy: 1) upewnij się, że możesz zacząć psql. 2) upewnić się, że użytkownik ma odpowiednie uprawnienia do zapisu, takich jak: CREATE, INSERT, UPDATE, itd. 3) importować pliki SQL. O ile rozumiem, jesteś teraz na etapie 1.
Bolo
@Bolo: Czy umieściłbyś trzy etapy w odpowiedzi?
AH
@Bolo, Jak wspomniałeś, jestem teraz na trzecim etapie. ale jak mogę zaimportować plik .sql z mojego komputera lokalnego. Próbowałem \ i [pełna ścieżka z rozszerzeniem], ale pojawia się komunikat o błędzie .sql nie ma takiego pliku lub katalogu. Czy mógłbyś podać przykład.
75

w linii poleceń najpierw przejdź do katalogu, w którym znajduje się psql, a następnie napisz polecenia w ten sposób:

psql [database name] [username]

a następnie naciśnij enter psql pyta o hasło podaj hasło użytkownika:

następnie napisz

> \i [full path and file name with extension]

następnie naciśnij enter wstawianie gotowe.

Badr
źródło
Ja też tego używam. I to działa. Ale zmieniam dostarczone instrukcje SQL. Wcześniej istniejący * .sql nie używał żadnego znaku; jako zakończenie linii. Muszę też usunąć GO. Czy sądzisz, że skrypt sql nie jest skryptem psql?
swdev
Próbowałem użyć \ i [pełna ścieżka z rozszerzeniem], ale pojawia się komunikat o błędzie .sql nie ma takiego pliku lub katalogu. Czy mógłbyś przesłać przykład. Dzięki.
Jeśli \ i powie, że nie ma takiego pliku, oznacza to, że nie znaleziono pliku na tej pozycji. Najlepiej podać bezwzględny adres URL. U mnie w systemie Windows ta linia poleceń zadziałała: \ i /tmp/robert/test.sql oczywiście musisz mieć prawidłowe polecenia SQL w tym pliku.
shevy
36

Cóż, najkrótszy sposób, jaki znam, jest następujący:

psql -U {user_name} -d {database_name} -f {file_path} -h {host_name}

nazwa_bazy_danych: której bazy danych należy wstawić dane pliku.

ścieżka pliku: Bezwzględna ścieżka do pliku, przez który chcesz wykonać import.

nazwa_hosta: nazwa hosta. Dla celów programistycznych jest to głównielocalhost .

Po wprowadzeniu tego polecenia w konsoli zostaniesz poproszony o podanie hasła.

Arslan Ali
źródło
25

Uważaj na „/” i „\”. Nawet w systemie Windows polecenie powinno mieć postać:

\i c:/1.sql
Sofiane
źródło
1

Zawsze preferowane używanie pliku usługi połączeń (lookup / google „plik usługi połączenia psql”)

Następnie po prostu:

psql service={yourservicename} < {myfile.sql}

Gdzie yourservicenamejest nazwa sekcji z pliku usługi.

Ted Rybicki
źródło