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.
źródło
Odpowiedzi:
Masz cztery możliwości podania hasła:
http://www.postgresql.org/docs/current/static/libpq-envars.html
http://www.postgresql.org/docs/current/static/libpq-pgpass.html
https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING
źródło
-u
parametruOczywiście pojawi się błąd krytyczny podczas uwierzytelniania, ponieważ nie podasz nazwy użytkownika ...
Spróbuj tego, jest dla mnie OK :)
Jeśli baza danych jest zdalna, użyj tego samego polecenia z hostem
źródło
-a
?-a
nie jest tutaj potrzebny. Jest to „Drukuj wszystkie niepuste linie wejściowe na standardowe wyjście podczas ich odczytywania”Powinieneś to zrobić w ten sposób:
Widzieć:
źródło
Permission denied
chmod 777 myfile
popełnieniu błęduPermission denied
został naprawionyUżyj tego do uruchomienia plików * .sql, gdy serwer PostgreSQL znajduje się w innym miejscu:
Następnie zostaniesz poproszony o podanie hasła użytkownika.
EDYCJA: zaktualizowano na podstawie komentarza dostarczonego przez @zwacky
źródło
-a
: wszystkie echo ,:-q
cichy-f
źródło
Jeśli jesteś zalogowany do psql w powłoce Linux, polecenie to:
dla absolutnej ścieżki i
dla względnej ścieżki, z której wywołałeś psql.
źródło
Za pomocą terminala zaloguj się do bazy danych i spróbuj:
lub
lub
źródło
Możesz podać zarówno nazwę użytkownika, jak i HASŁO w samym wierszu poleceń.
źródło
możesz to zrobić w ten sposób:
Jeśli masz
sudo
dostę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.źródło
Zobacz, jak uruchomić SQL w wierszu poleceń dla PostgreSQL w systemie Linux:
Otwórz terminal i upewnij się, że możesz uruchomić
psql
polecenie: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:
Uruchom tę komendę w wierszu poleceń (podstawiając swoją nazwę użytkownika i nazwę bazy danych na pgadmin i kurz_prod):
Oto wynik, który otrzymuję na terminalu (nie pojawia się monit o hasło):
źródło
Możesz otworzyć wiersz polecenia i uruchomić jako administrator. Następnie wpisz
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.
źródło
-d "postgres"
-d
dla nazwy bazy danych, sprawdźpsql --help
Zrozumiałem, że napisałem (znajduje się w katalogu, w którym znajduje się mój skrypt)
gdzie
-u user
jest rola, która jest właścicielem bazy danych, gdzie chcę, aby wykonać skrypt następniepsql
łączy się zpsql
konsolą po że-d my_database
ładunku mną wmydatabase
końcu-a -f file.sql
gdzie-a
echo wszystkie dane wejściowe ze skryptu i-f
wykonanie poleceńfile.sql
domydatabase
, a następnie wyjścia.Używam: psql (PostgreSQL) 10.12 na (Ubuntu 10.12-0ubuntu0.18.04.1)
źródło