Uruchom plik .sql PostgreSQL, używając argumentów wiersza poleceń

540

Mam kilka plików .sql z tysiącami instrukcji INSERT i muszę je wstawić w mojej bazie danych PostgreSQL, aby dodać je do tabeli. Pliki są tak duże, że nie można ich otworzyć i skopiować instrukcji INSERT do okna edytora i tam je uruchomić. W Internecie znalazłem, że możesz użyć następujących opcji, przechodząc do folderu bin instalacji PostgreSQL:

psql -d myDataBase -a -f myInsertFile

W moim przypadku:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

Następnie jestem proszony o podanie hasła dla mojego użytkownika, ale nie mogę nic wprowadzić, a po naciśnięciu klawisza Enter pojawia się następujący błąd:

psql: FATAL: uwierzytelnienie hasła nie powiodło się dla użytkownika „myUsername”

Dlaczego nie pozwoli mi wprowadzić hasła? Czy można to obejść, ponieważ bardzo ważne jest, aby uruchomić te skrypty?

Rozwiązałem ten problem, dodając nowy wpis do mojego pliku pg_hba.conf o następującej strukturze:

# IPv6 local connections:
host    myDbName    myUserName ::1/128    trust

Plik pg_hba.conf zwykle można znaleźć w folderze „data” instalacji PostgreSQL.

C Zaostrzony
źródło
6
Masz już swoją odpowiedź, ale na wszelki wypadek ... „Nic nie mogę wpisać”. Może mówisz o tym, że wpisanie hasła nic nie pokazuje? W tym przypadku jest to normalne, zwykle wpisanie hasła i naciśnięcie
klawisza
Miałem podobny problem z instalacją kopii ITIS ( itis.gov ). Baza danych nie istniała, więc nie mogłem użyć jej nazwy. Ze względu na sposób działania PostgreSQL mógłbym to zrobić: psql --port = 5554 --username = root --file = ITIS.sql template1
Cyberknight

Odpowiedzi:

157

Masz cztery możliwości podania hasła:

  1. Ustaw zmienną środowiskową PGPASSWORD. Aby uzyskać szczegółowe informacje, patrz instrukcja:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. Użyj pliku .pgpass, aby zapisać hasło. Szczegółowe informacje można znaleźć w instrukcji:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. Użyj „uwierzytelnienia zaufania” dla tego konkretnego użytkownika: http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. Od wersji PostgreSQL 9.1 możesz także użyć ciągu połączenia :
    https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING
koń bez imienia
źródło
Cześć. Teraz ustawiłem ustawienia jako zaufane, ale zauważam, że oprogramowanie próbuje użyć mojej nazwy użytkownika systemu Windows w celu zalogowania się. Chcę użyć roli, którą mam skonfigurowaną w mojej bazie danych Postgresql. Czy istnieje sposób na określenie, której roli użyć do uruchomienia polecenia?
CSharpened
2
@CSharpened: użyj -uparametru
opisanego
# 2 jest niezwykle prosty. Wystarczy dodać jeden wiersz zawierający host: port: db: użytkownik: przekazać do pliku i gotowe. Dobra robota.
Kriil
494

Oczywiście pojawi się błąd krytyczny podczas uwierzytelniania, ponieważ nie podasz nazwy użytkownika ...

Spróbuj tego, jest dla mnie OK :)

psql -U username -d myDataBase -a -f myInsertFile

Jeśli baza danych jest zdalna, użyj tego samego polecenia z hostem

psql -h host -U username -d myDataBase -a -f myInsertFile
pmverma
źródło
4
Pamiętaj, że podana nazwa użytkownika musi być prawidłową rolą postgres. Domyślnie jest to aktualnie zalogowany użytkownik.
matthias krull
8
Dlaczego warto -a?
AlikElzin-kilaka
5
@ AlikElzin-kilaka -anie jest tutaj potrzebny. Jest to „Drukuj wszystkie niepuste linie wejściowe na standardowe wyjście podczas ich odczytywania”
mjspier
To powinna być zaakceptowana odpowiedź.
Kostanos
316

Powinieneś to zrobić w ten sposób:

\i path_to_sql_file

Widzieć:

Wpisz opis zdjęcia tutaj

Rachid O
źródło
2
DostajęPermission denied
Zac
4
po chmod 777 myfilepopełnieniu błędu Permission deniedzostał naprawiony
Ulug'bek Ro'zimboyev 10.04.17
5
@Zac, jeśli odmowa dostępu wydarzyła się na komputerze z systemem Windows, być może używasz niewłaściwych ukośników.
pgsandstrom
2
Miałem ten błąd w systemie Windows i okazało się, że to ukośniki, jak wspomniałem @pgsandstrom. Błędne ukośniki = zamiast tego użyj ukośników do przodu i bez cudzysłowu na ścieżce. \ ic: /dev/script.sql
Dave
50

Użyj tego do uruchomienia plików * .sql, gdy serwer PostgreSQL znajduje się w innym miejscu:

psql -h localhost -d userstoreis -U admin -p 5432 -a -q -f /home/jobs/Desktop/resources/postgresql.sql

-h PostgreSQL server IP address
-d database name
-U user name
-p port which PostgreSQL server is listening on
-f path to SQL script
-a all echo
-q quiet

Następnie zostaniesz poproszony o podanie hasła użytkownika.

EDYCJA: zaktualizowano na podstawie komentarza dostarczonego przez @zwacky

GPrathap
źródło
5
@ ChickenWing24 -a: wszystkie echo ,: -qcichy -f
,:
Ten rozwiązał mój problem, świetnie
Temi „Topsy” Bello
45
export PGPASSWORD=<password>
psql -h <host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql
vishu9219
źródło
1
jak mogę to zrobić bez wyjścia
Lu32
2
psql -h <host> -d <baza danych> -U <nazwa_użytkownika> -p <port> -a -q -w -f <plik> .sql
vishu9219
3
@ Lu32 Można również pominąć flagę -a (co oznacza „Drukuj wszystkie niepuste linie wejściowe na standardowe wyjście podczas ich odczytywania”). EDYCJA przetestowana, bez -a drukuje mniej, ale wciąż za dużo informacji. Tak więc flaga -q jest poprawna, jak powiedział vishu9219.
Rauni Lillemets
41

Jeśli jesteś zalogowany do psql w powłoce Linux, polecenie to:

\i fileName.sql

dla absolutnej ścieżki i

\ir filename.sql

dla względnej ścieżki, z której wywołałeś psql.

Florian
źródło
Jak mówi @Florian, po zalogowaniu możesz wykonać plik. Pamiętaj, aby zaznaczyć dowolne wiersze komentarza w swoim SQL jako jeden z dwóch sposobów ... - komentarz do końca linii a) - komentarz do jednej linii LUB b) / * komentarz do wielu linii * /
Sumit S
26

Za pomocą terminala zaloguj się do bazy danych i spróbuj:

database-# >@pathof_mysqlfile.sql

lub

database-#>-i pathof_mysqlfile.sql

lub

database-#>-c pathof_mysqlfile.sql
Satish Sharma
źródło
to rozwiązanie jest bardziej solidne jak dla mnie; nie ten oznaczony jako odpowiedź
AlexG
17

Możesz podać zarówno nazwę użytkownika, jak i HASŁO w samym wierszu poleceń.

   psql "dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql
Deepu Sahni
źródło
Działa to, jeśli nie chcesz ustawiać zmiennych środowiskowych lub używać dziwnych plików pass. =)
martin
to powinna być zaakceptowana odpowiedź, dziękuję
witaj
13

możesz to zrobić w ten sposób:

sudo -u postgres psql -d myDataBase -a -f myInsertFile

Jeśli masz sudodostęp na komputerze i nie jest to zalecane w przypadku skryptów produkcyjnych tylko do testowania na własnym komputerze, jest to najłatwiejszy sposób.

MDK
źródło
9

Zobacz, jak uruchomić SQL w wierszu poleceń dla PostgreSQL w systemie Linux:

Otwórz terminal i upewnij się, że możesz uruchomić psqlpolecenie:

psql --version
which psql

Mój jest wersja 9.1.6 znajduje się w /bin/psql.

Utwórz zwykły plik tekstowy o nazwie mysqlfile.sql

Edytuj ten plik, umieść tam jeden wiersz:

select * from mytable;

Uruchom tę komendę w wierszu poleceń (podstawiając swoją nazwę użytkownika i nazwę bazy danych na pgadmin i kurz_prod):

psql -U pgadmin -d kurz_prod -a -f mysqlfile.sql

Oto wynik, który otrzymuję na terminalu (nie pojawia się monit o hasło):

select * from mytable;

test1
--------
hi
me too

(2 rows)
Eric Leschinski
źródło
Jak skonfigurować użytkownika? Po raz pierwszy instaluję i uruchamiam -f na nowym pliku .sql. Zawsze mówi złe hasło
mKane
4

Możesz otworzyć wiersz polecenia i uruchomić jako administrator. Następnie wpisz

../bin>psql -f c:/...-h localhost -p 5432 -d databasename -U "postgres"

Password for user postgres: pokaże się.

Wpisz swoje hasło i wprowadź. Nie mogłem zobaczyć hasła, które wpisałem, ale tym razem, kiedy nacisnąłem Enter, zadziałało. W rzeczywistości ładowałem dane do bazy danych.

Początkujący
źródło
Myślę, że masz na myśli-d "postgres"
amfetamachinę
@amphetamachine -d dla nazwy bazy danych, sprawdźpsql --help
Yaz
1

Zrozumiałem, że napisałem (znajduje się w katalogu, w którym znajduje się mój skrypt)

::someguy@host::$sudo -u user psql -d my_database -a -f file.sql 

gdzie -u user jest rola, która jest właścicielem bazy danych, gdzie chcę, aby wykonać skrypt następnie psqlłączy się z psqlkonsolą po że -d my_databaseładunku mną w mydatabasekońcu -a -f file.sqlgdzie -aecho wszystkie dane wejściowe ze skryptu i -fwykonanie poleceń file.sqldo mydatabase, a następnie wyjścia.

Używam: psql (PostgreSQL) 10.12 na (Ubuntu 10.12-0ubuntu0.18.04.1)

Znaki
źródło