Rularea unui fișier PostgreSQL .sql utilizând argumente în linia de comandă (Programare, Postgresql, Linie De Comandă, Psql)

CSharpened a intrebat.

Am câteva fișiere .sql cu mii de instrucțiuni INSERT în ele și trebuie să execut aceste inserții în baza de date PostgreSQL pentru a le adăuga la un tabel. Fișierele sunt atât de mari încât este imposibil să le deschid și să copiez instrucțiunile INSERT într-o fereastră de editor și să le execut acolo. Am găsit pe Internet că puteți utiliza următoarele, navigând în folderul bin al instalației PostgreSQL:

psql -d myDataBase -a -f myInsertFile

În cazul meu:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

Apoi mi se cere o parolă pentru utilizatorul meu, dar nu pot introduce nimic și când apăs enter primesc această eroare:

psql: FATAL: autentificarea parolei a eșuat pentru utilizatorul „myUsername”

De ce nu mă lasă să introduc o parolă. Există o modalitate de a ocoli acest lucru, deoarece este esențial să pot rula aceste scripturi?

Am rezolvat această problemă adăugând o nouă intrare în fișierul meu pg_hba.conf cu următoarea structură:

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

Fișierul pg_hba.conf se găsește, de obicei, în folderul „data” al instalației PostgreSQL.

Comentarii

  • Ați primit deja răspunsul, dar pentru orice eventualitate… „Nu pot introduce nimic”, s-ar putea să vă referiți la faptul că tastarea parolei nu afișează nimic? Este normal în acest caz, în mod normal, în mod normal, tastând parola și apăsând Enter ar trebui să funcționa… –  > Por Évelyne Lachance.
  • Am avut o problemă similară la instalarea unei copii a ITIS (itis.gov). Baza de date nu exista, așa că nu am putut folosi numele ei. Datorită modului în care funcționează PostgreSQL, am putut face acest lucru: psql –port=5554 –username=root –file=ITIS.sql template1 –  > Por Cyberknight.
  • Răspunde acest lucru la întrebarea dumneavoastră? Cum pot specifica o parolă pentru ‘psql’ în mod non-interactiv? –  > Por rogerdpack.
13 răspunsuri
a_calul_cu_nu_nume

Aveți patru opțiuni pentru a furniza o parolă:

  1. Setați variabila de mediu PGPASSWORD. Pentru detalii, consultați manualul:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. Utilizați un fișier .pgpass pentru a stoca parola. Pentru detalii, consultați manualul:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. Utilizați „trust authentication” pentru acel utilizator specific: http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. Începând cu PostgreSQL 9.1 puteți, de asemenea, să folosiți un șir de conexiune:
    https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING

Comentarii

  • Bună ziua, acum am setat setările pe încredere, dar am observat că software-ul încearcă să folosească numele meu de utilizator Windows pentru a se conecta. Eu vreau să folosesc un rol pe care l-am configurat în baza de date Postgresql. Există o modalitate de a-i spune ce rol să folosească pentru a rula comanda? –  > Por CSharpened.
  • @CSharpened: utilizați rolul -u așa cum este documentat în manual –  > Por a_horse_with_no_no_name.
  • #2 este extrem de simplu. Trebuie doar să adăugați o linie care să conțină host:port:db:user:pass într-un fișier și ați terminat. Bună treabă. –  > Por Kriil.
pmverma

Desigur, veți primi o eroare fatală pentru autentificare, deoarece nu includeți un nume de utilizator…

Încearcă asta, pentru mine este OK 🙂

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

Dacă baza de date este la distanță, utilizați aceeași comandă cu host

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

Comentarii

  • Rețineți că numele de utilizator furnizat trebuie să fie un rol postgres valid. Valoarea implicită este utilizatorul conectat în mod curent. –  > Por matthias krull.
  • De ce trebuie să se folosească -a param? –  > Por AlikElzin-kilaka.
  • @AlikElzin-kilaka -a nu este necesar aici. Este vorba de „Imprimă toate liniile de intrare care nu sunt goale pe ieșirea standard pe măsură ce sunt citite” –  > Por mjspier.
Rachid O

Ar trebui să o faci așa:

i path_to_sql_file

A se vedea:

Comentarii

  • Primesc Permission denied –  > Por Zac.
  • după ce am făcut chmod 777 myfile eroare Permission denied a fost reparată –  > Por Ulug’bek Ro’zimboyev.
  • @Zac dacă Permission denied s-a întâmplat pe o mașină Windows, s-ar putea să folosești slash-uri greșite. –  > Por pgsandstrom.
  • Am avut această eroare pe windows și s-a dovedit a fi vorba de slashes, așa cum a menționat @pgsandstrom. Slashes greșite = folosiți în schimb slash-uri înainte și fără ghilimele pe cale. i c:/dev/script.sql –  > Por Dave.
GPrathap

Folosiți acest lucru pentru a executa fișiere *.sql atunci când serverul PostgreSQL este localizat într-un loc diferit:

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

Apoi vi se cere să introduceți parola utilizatorului.

EDIT: actualizat pe baza comentariului furnizat de @zwacky

Comentarii

  • @ChickenWing24 -a: all echo, -q: liniște, -f: fișier –  > Por Simon Wicki.
Florian

Dacă sunteți logat în psql pe shell-ul Linux, comanda este:

i fileName.sql

pentru o cale absolută și

ir filename.sql

pentru calea relativă de unde ați apelat psql.

Comentarii

  • După cum spune @Florian, odată logat poți executa un fișier. Nu uitați să marcați orice linie de comentariu în SQL-ul dvs. în două moduri …– comentariu la sfârșitul liniei a) — comentariu pe o singură linie SAU b) /* comentarii pe mai multe linii */ – -.  > Por Sumit S.
vishu9219
export PGPASSWORD=<password>
psql -h <host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql

Comentarii

  • cum pot să fac asta fără ieșire –  > Por Lu32.
  • psql -h <host> -d <database> -U <user_name> -p <port> -a -q -w -f <file>.sql –  > Por vishu9219.
  • @Lu32 De asemenea, ați putea omite indicatorul -a (care înseamnă „Imprimă toate liniile de intrare nevide pe ieșirea standard pe măsură ce sunt citite”). EDIT a testat, fără -a tipărește mai puține informații, dar tot prea multe. Deci, steagul -q este corect, așa cum a spus vishu9219. –  > Por Rauni Lillemets.
Satish Sharma

Prin intermediul terminalului, conectați-vă la baza de date și încercați acest lucru:

database-# >@pathof_mysqlfile.sql

sau

database-#>-i pathof_mysqlfile.sql

sau

database-#>-c pathof_mysqlfile.sql

Comentarii

  • această soluție este mai solidă ca pentru mine; nu cea marcată ca fiind answe –  > Por AlexG.
Deepu Sahni

Puteți da atât numele de utilizator, cât și PASSSWORD chiar în linia de comandă.

   psql "dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql

Comentarii

  • Acest lucru funcționează dacă nu doriți să setați variabile de mediu sau să utilizați fișiere de trecere ciudate. =) –  > Por martin.
  • acesta ar fi trebuit să fie răspunsul acceptat, vă mulțumesc – -.  > Por grepit.
MDK

ai putea chiar să o faci în acest fel:

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

Dacă aveți sudo acces pe mașină și nu este recomandat pentru scripturi de producție, doar pentru testare pe propria mașină este cea mai ușoară cale.

Eric Leschinski

Prezentare generală a modului de a rula un SQL în linia de comandă pentru PostgreSQL în Linux:

Deschideți un terminal și asigurați-vă că puteți rula comanda psql comanda:

psql --version
which psql

A mea este versiunea 9.1.6 situată în /bin/psql.

Creați un fișier text simplu numit mysqlfile.sql

Editați acel fișier și introduceți o singură linie acolo:

select * from mytable;

Rulați această comandă în linia de comandă (înlocuind numele dvs. de utilizator și numele bazei de date cu pgadmin și kurz_prod):

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

Următorul este rezultatul pe care îl obțin pe terminal (nu mi se cere o parolă):

select * from mytable;

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

(2 rows)

Comentarii

  • Cum se configurează un utilizator? Este prima dată când instalez și execut -f pe un fișier .sql nou. Întotdeauna îmi spune că am greșit parola –  > Por mKane.
abeginner

Puteți deschide un prompt de comandă și rula ca administrator. Apoi tastați

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

Password for user postgres: se va afișa.

Introduceți parola și introduceți. Nu am putut vedea parola ce am tastat, dar de data aceasta când am apăsat enter a funcționat. De fapt, încărcam date în baza de date.

Comentarii

  • Cred că vă referiți la -d "postgres" –  > Por amphetamachine.
  • @amphetamachine -d pentru numele bazei de date , verificați psql --help –  > Por Yaz.
Caractere

Am obținut că a scris (situat în directorul în care este script-ul meu)

::[email protected]::$sudo -u user psql -d my_database -a -f file.sql 

unde -u user este rolul care deține baza de date în care vreau să execut scriptul, apoi rolul psql se conectează la psql consola după care -d my_database mă încarcă în mydatabase în cele din urmă -a -f file.sql unde -a echo all input from the script and -f execută comenzile din file.sql în mydatabase, apoi ieșiți.

Folosesc:psql (PostgreSQL) 10.12 pe (Ubuntu 10.12-0ubuntu0.18.04.1)

wingman__7

Soluție 2021

dacă baza de date PostgreSQL se află pe sistemul dvs. local.

psql dbname < sqldump.sql username

Dacă este găzduită online

psql -h hostname dbname < sqldump.sql username

Dacă aveți nelămuriri sau întrebări, vă rugăm să le puneți în comentarii.

Comentarii

  • este dependent de sistemul de operare? –  > Por BingLi224.
  • @BingLi224 Eu folosesc un sistem Windows și sunt destul de sigur că nu depinde de sistemul de operare. –  > Por wingman__7.