Lansarea postgresql din linia de comandă. Instalarea PostgreSQL - Windows, Mac OS X, Linux. Exemple de creare de copii de rezervă

06.08.2020 Recenzii

Înainte ca cineva să poată accesa baza de date, serverul bazei de date trebuie mai întâi să ruleze. Programul server se numește postgres. Pentru a funcționa, programul postgres trebuie să știe unde să găsească datele pe care le va folosi. Opțiunea -D vă permite să specificați această locație. Deci, cel mai simplu mod de a porni serverul este să rulați comanda:

$ postgres -D /usr/local/pgsql/data

ceea ce va face ca serverul să continue să ruleze ca proces în prim-plan. Această comandă ar trebui să fie executată sub numele cont PostgreSQL. Fără opțiunea -D, serverul va încerca să folosească directorul de date specificat în variabilă de mediu PGDATA. Dacă această variabilă nu este definită, serverul nu va porni.

Cu toate acestea, de obicei este mai bine să rulați postgres în fundal. Pentru a face acest lucru, puteți utiliza sintaxa obișnuită acceptată în shell-ul Unix:

$ postgres -D /usr/local/pgsql/data >logfile 2>&1 &

Este important să stocați informațiile pe care serverul le trimite la stdout și stderr undeva, așa cum se arată mai sus. Acest lucru este util atât în ​​scopuri de audit, cât și pentru diagnosticarea problemelor. (Lucrul cu fișierele jurnal este tratat mai detaliat în Secțiunea 24.3.)

Programul postgres acceptă și alți câțiva parametri Linie de comanda. Pentru mai multe informații, consultați pagina de ajutor postgresși la următorul capitol 19.

Această opțiune de lansare poate deveni rapid incomod. Prin urmare, pentru a simplifica astfel de sarcini, oferim un program auxiliar pg_ctl. De exemplu:

Pg_ctl start -l fișier jurnal

va porni serverul în fundal și va direcționa mesajele de ieșire ale serverului către fișierul jurnal specificat. Parametrul -D are aceeași semnificație ca și pentru programul postgres. De asemenea, puteți opri serverul folosind pg_ctl.

De obicei, doriți ca serverul de baze de date să pornească singur la pornire sistem de operare. Scripturi de executare automată pentru sisteme diferite diferit, dar PostgreSQL oferă mai multe scripturi standard în directorul contrib/start-scripts. Pentru a instala un astfel de script pe sistem, sunt necesare drepturi de root.

Sistemele diferite au convenții diferite pentru ordinea în care sunt pornite serviciile în timpul procesului de pornire. Pe multe sisteme, acest lucru se face folosind fișierul /etc/rc.local sau /etc/rc.d/rc.local. Alții folosesc directoarele init.d sau rc.d. Cu toate acestea, în orice caz, serverul trebuie să fie pornit ca utilizator PostgreSQL, dar nu rădăcină sau orice alt utilizator. Prin urmare, comanda de pornire ar trebui să fie scrisă de obicei sub forma su postgres -c „...”. De exemplu:

Su postgres -c "pg_ctl start -D /usr/local/pgsql/data -l serverlog"

Mai jos sunt sugestii mai specifice pentru mai multe sisteme de operare majore. (În locul valorilor șablonului pe care le-am specificat, trebuie să înlocuiți calea corectă către directorul de date și numele de utilizator real.)

    Pentru a rula pe FreeBSD, utilizați fișierul contrib/start-scripts/freebsd din arbore cod sursa PostgreSQL.

    Pe OpenBSD, adăugați următoarele linii în fișierul /etc/rc.local:

    Dacă [ -x /usr/local/pgsql/bin/pg_ctl -a -x /usr/local/pgsql/bin/postgres ]; apoi su -l postgres -c "/usr/local/pgsql/bin/pg_ctl start -s -l /var/postgresql/log -D /usr/local/pgsql/data" echo -n "postgresql" fi

    ÎN sisteme Linux puteți fie să adăugați

    /usr/local/pgsql/bin/pg_ctl start -l fișier jurnal -D /usr/local/pgsql/data

    în /etc/rc.d/rc.local sau /etc/rc.local , sau utilizați fișierul contrib/start-scripts/linux din arborele sursă PostgreSQL.

    Folosind systemd puteți aplica următorul fișier de definire a serviciului (de exemplu, /etc/systemd/system/postgresql.service):

    Descriere=Serverul bazei de date PostgreSQL Documentation=man:postgres(1) Type=notify User=postgres ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data ExecReload=/bin/kill -HUP $ MAINPID KillMode=mixt KillSignal=SIGINT TimeoutSec=0 WantedBy=multi-user.target

    Utilizarea Type=notify necesită ca serverul să fie compilat cu configure --with-systemd .

    Valoarea timeout-ului merită o atenție specială. La momentul scrierii, timpul de expirare implicit al systemd este de 90 de secunde, astfel încât un proces care nu raportează că este gata în acest timp va fi oprit. Dar serverul PostgreSQL poate avea nevoie să se recupereze după o blocare atunci când pornește, așa că poate dura mult mai mult pentru a ajunge la starea de pregătire. Valoarea sugerată de 0 dezactivează logica de timeout.

    Pe NetBSD, puteți utiliza scriptul de pornire FreeBSD sau Linux, în funcție de preferințele dvs.

    Pe Solaris, creați un fișier numit /etc/init.d/postgresql care conține următoarea linie:

    Su - postgres -c "/usr/local/pgsql/bin/pg_ctl start -l logfile -D /usr/local/pgsql/data"

Când un server rulează, ID-ul său de proces (PID) este stocat în fișierul postmaster.pid din directorul de date. Acest lucru vă permite să evitați rularea mai multor instanțe de server cu același director de date și poate fi util și pentru închiderea serverului.

18.3.1. Eșecuri la pornirea serverului

Există mai multe motive comune pentru care un server nu poate porni. Pentru a înțelege ce a cauzat defecțiunea, priviți fișierul jurnal al serverului sau porniți serverul manual (fără a redirecționa fluxurile de ieșire standard și de eroare) și examinați mesajele care apar. Mai jos vom analiza mai detaliat unele dintre cele mai frecvente mesaje de eroare.

Jurnal: nu s-a putut lega adresa IPv4 „127.0.0.1”: Adresă deja utilizată SUGESTIE: Un alt postmaster rulează deja pe portul 5432? Dacă nu, așteptați câteva secunde și încercați din nou. FATAL: nu a putut crea niciun socket TCP/IP

Aceasta înseamnă, de obicei, exact ceea ce scrie: încercați să porniți un server pe același port pe care rulează deja altul. Cu toate acestea, dacă mesajul nucleului nu este Adresă deja utilizată sau similar, poate exista o altă problemă. De exemplu, când încercați să porniți un server cu un număr de port rezervat, vor fi afișate următoarele mesaje:

$ postgres -p 666 Jurnal: nu s-a putut lega adresa IPv4 „127.0.0.1”: Permisiune refuzată SUGESTIE: Un alt postmaster rulează deja pe portul 666? Dacă nu, așteptați câteva secunde și încercați din nou. FATAL: nu a putut crea niciun socket TCP/IP

Următorul mesaj:

FATAL: nu s-a putut crea un segment de memorie partajată: argument nevalid DETALII: Apelul de sistem eșuat a fost shmget(key=5440001, size=4011376640, 03600).

poate însemna că limita de memorie partajată a nucleului dvs. este prea mică pentru spațiul de lucru pe care PostgreSQL încearcă să îl creeze (în în acest exemplu 4011376640 octeți). De asemenea, este posibil ca nucleul dumneavoastră să nu accepte deloc memoria partajată în stil System-V. Ca o soluție, puteți încerca să rulați serverul cu mai puține buffere (), dar în cele din urmă va trebui, cel mai probabil, să reconfigurați nucleul și să măriți dimensiunea permisă a memoriei partajate. Este posibil să vedeți acest mesaj și atunci când încercați să rulați mai multe servere pe același computer, dacă cantitatea de memorie partajată pe care au solicitat-o ​​depășește această limită.

Mesaj:

FATAL: nu s-au putut crea semafore: nu a mai rămas spațiu pe dispozitiv DETALII: Apelul de sistem eșuat a fost semget(5440126, 17, 03600).

Nuînseamnă că rămâneți fără spațiu pe disc. Aceasta înseamnă că limita de semafor System V a nucleului dvs. este mai mică decât numărul de semafore pe care PostgreSQL încearcă să le creeze. Ca și în cazul precedent, puteți încerca să ocoliți această problemă rulând serverul cu un număr mai mic de conexiuni permise (max_connections), dar în cele din urmă va trebui să creșteți această limită în nucleu.

Daca primesti eroarea " apel de sistem ilegal"(apel de sistem nevalid), atunci cel mai probabil kernel-ul dvs. nu acceptă deloc memoria partajată sau semafoare. În acest caz, tot ce trebuie să faceți este să reconfigurați nucleul și să activați suportul acestora.

Configurarea instrumentelor IPC în stil System V este descrisă în .

18.3.2. Probleme cu conexiunile clientului

Deși erorile de conectare care pot apărea pe partea clientului variază foarte mult și variază în funcție de aplicație, câteva probleme pot fi legate direct de modul în care a fost pornit serverul. Descrierile erorilor, altele decât cele descrise mai jos, trebuie găsite în documentația aplicației client corespunzătoare.

Psql: nu s-a putut conecta la server: Conexiune refuzată Serverul rulează pe gazda „server.joe.com” și acceptă conexiuni TCP/IP pe portul 5432?

Acest o problemă comună « Nu pot găsi serverul și încep să interacționez cu el» . Mesajul prezentat mai sus indică o încercare de a stabili o conexiune TCP/IP. Foarte des acest lucru se explică prin faptul că pur și simplu au uitat să configureze serverul să funcționeze folosind protocolul TCP/IP.

În plus, atunci când încercați să stabiliți o conexiune la server local printr-un socket Unix puteți primi următorul mesaj:

Psql: nu s-a putut conecta la server: Nu există un astfel de fișier sau director. Serverul rulează local și acceptă conexiuni pe socket-ul domeniului Unix „/tmp/.s.PGSQL.5432”?

Calea din ultima linie vă ajută să înțelegeți dacă clientul încearcă să se conecteze la adresa corectă. Dacă serverul nu acceptă de fapt conexiuni la această adresă, de obicei va emite mesajul Conexiune refuzată sau Nu există un astfel de fișier sau director kernel de mai sus. (Este important de înțeles că Connection a refuzat în acest context Nuînseamnă că serverul a primit o cerere de conectare și a respins-o. În acest caz, vor fi emise alte mesaje, cum ar fi cele prezentate în Secțiunea 20.4.) Alte mesaje de eroare, cum ar fi Conexiune expirată, pot semnala probleme mai fundamentale, cum ar fi conexiunile de rețea întrerupte.

Dacă sunteți autentificat ca root, în loc să rulați comenzile su - c familiare din pașii anteriori, va trebui să vă conectați ca nume de utilizator postgres pe care l-ați creat la pasul unu. După ce v-ați conectat ca postgres, introduceți comanda afișată în Listarea 2.15.

Lista 2.15. Inițializarea bazei de date.

$ /usr/local/pgsql/bin/initdb – D /usr/1ocal/pgsql/data

Tasta - D specifică directorul în care vor fi stocate datele. Același lucru se poate face folosind variabila de mediu PCDATA. Dacă este specificată valoarea variabilei PCDATA, comutatorul -D este opțional. Dacă preferați să stocați fișierele de date într-un alt director, asigurați-vă că utilizatorul postgres are acces de scriere la acel director. Un exemplu de rezultat al inițializării initdb este prezentat în Lista 2.16.

Lista 2.16. ieșire initdb.

$ /usr/local/pgsql/bin/intidb – D /usr/local/pgsql/data Acest sistem de bază de date va fi inițializat cu numele de utilizator „postgres”. Acest utilizator va deține toate fișierele de date și trebuie să dețină și procesul serverului. Crearea directorului /usr/pgsql/data Crearea directorului /usr/pgsqi/data/case Crearea directorului /usr/pgsql/data/global Crearea directorului /usr/pgsql/pg_xlog Crearea bazei de date tempiatel în /usr/local/pgsql/data/base /l DEBUG: sistemul de baze de date a fost oprit la 2001-08-24 16:36:35 PDT DEBUG: Înregistrare punct de control la (0.8) DEBUG: Reface înregistrarea la (0.8): Anulează înregistrarea la (0.8) : Închidere TRUE DEBUG: NextTransactionld: 514; NextOid: 16384 DEBUG: sistemul de baze de date este în stare de producție Crearea de relații globale în /usr/local/pgsql/data/global DEBUG: sistemul de baze de date a fost oprit la 2001-08-24 16:36:38 PDT DEBUG: Înregistrarea punctului de control la ( Î. 108) DEBUG: Reface înregistrarea la (0. 108): Anulează înregistrarea la (0. 0); Închidere TRUE DEBUG: NextTransactionld: 514: NextOid: 17199 DEBUG: sistemul de bază de date este în stare de producție Inițializarea pg_shadow Activarea lățimii de rând nelimitate pentru tabelele de sistem. Crearea vederilor de sistem. Se încarcă pg_description. Setarea lastsysoid. Aspirarea bazei de date. Copierea tempiatel în tempiateO. Succes. Acum puteți porni serverul de baze de date folosind: /usr/local/pgsql/bin/postmaster – D /usr/local/pgsql/data sau /usr/local/pgsql/bin/pg_ct1 – D /usr/local/pgsql/data – 1 pornire de fișier jurnal

Notă
Pentru a utiliza un alt director de date în PostgreSQL, specificați calea către acest director cu cheia - O. Directorul trebuie mai întâi inițializat cu comanda initdb
.

Sfârșitul ieșirii comenzii initdb oferă informații despre două opțiuni pentru pornirea serverului PostgreSQL. În prima opțiune, procesul de postmaster este început în modul activ. După ce introduceți comanda în Lista 2.17, promptul de comandă devine indisponibil până când procesul de postmaster este oprit prin apăsarea CTRL+C.

Lista 2.17. Rulați postmaster în modul activ.

$ /usr/local/pgsql/bin/postmaster – D /usr/local/pgsql/data DEBUG: sistemul de baze de date a fost oprit la 2001-10-12 23:11:00 PDT DEBUG: Înregistrare punct de control la (0. 1522064) DEBUG: Reface înregistrarea la (0. 1522064): Anulează înregistrarea la (0. 8): Shutdown TRUE DEBUG: NextTransactionld: 615: NextOid: 18720 DEBUG: sistemul de baze de date este în stare de producție

De obicei, nu este necesar să rulați PostgreSQL în modul activ. Autorii recomandă utilizarea unei a doua comenzi care rulează postmaster în fundal. După cum se arată în Lista 2.18, procesul este pornit cu comanda pg_ct1.

Lista 2.18. Rulați postmaster în fundal.

$ /usr/1ocal/pgsqVbin/pg_ctl – D /usr/local/pgsql/data – 1 /tmp/pgsql.log start postmaster a început cu succes

Principala diferență dintre aceste două comenzi este că, în a doua opțiune, postmaster rulează în fundal și toate informațiile de depanare sunt trimise în fișierul /tmp/pgsql.log. În timpul funcționării normale, se recomandă, în general, să rulați postmaster în fundal, cu înregistrarea activată.

Notă
Aplicația pg_ctl pornește și oprește serverul PostgreSQL. Informații suplimentare despre această comandă, consultați capitolul 9
.

Înainte ca cineva să poată accesa baza de date, serverul bazei de date trebuie mai întâi să ruleze. Programul server se numește postgres. Pentru a funcționa, programul postgres trebuie să știe unde să găsească datele pe care le va folosi. Opțiunea -D vă permite să specificați această locație. Deci, cel mai simplu mod de a porni serverul este să rulați comanda:

$ postgres -D /usr/local/pgsql/data

ceea ce va face ca serverul să continue să ruleze ca proces în prim-plan. Această comandă ar trebui să fie rulată sub numele de cont PostgreSQL. Fără opțiunea -D, serverul va încerca să folosească directorul de date specificat în variabila de mediu PGDATA. Dacă această variabilă nu este definită, serverul nu va porni.

Cu toate acestea, de obicei este mai bine să rulați postgres în fundal. Pentru a face acest lucru, puteți utiliza sintaxa obișnuită acceptată în shell-ul Unix:

$ postgres -D /usr/local/pgsql/data >logfile 2>&1 &

Este important să stocați informațiile pe care serverul le trimite la stdout și stderr undeva, așa cum se arată mai sus. Acest lucru este util atât în ​​scopuri de audit, cât și pentru diagnosticarea problemelor. (Lucrul cu fișierele jurnal este tratat mai detaliat în Secțiunea 24.3.)

Programul postgres acceptă și alte câteva opțiuni de linie de comandă. Pentru mai multe informații, consultați pagina de ajutor postgresși la următorul capitol 19.

Această opțiune de lansare poate deveni rapid incomod. Prin urmare, pentru a simplifica astfel de sarcini, oferim un program auxiliar pg_ctl. De exemplu:

Pg_ctl start -l fișier jurnal

va porni serverul în fundal și va direcționa mesajele de ieșire ale serverului către fișierul jurnal specificat. Parametrul -D are aceeași semnificație ca și pentru programul postgres. De asemenea, puteți opri serverul folosind pg_ctl.

De obicei, doriți ca serverul de baze de date să pornească singur atunci când sistemul de operare pornește. Scripturile de pornire automată sunt diferite pentru sisteme diferite, dar PostgreSQL oferă mai multe scripturi standard în directorul contrib/start-scripts. Pentru a instala un astfel de script pe sistem, sunt necesare drepturi de root.

Sistemele diferite au convenții diferite pentru ordinea în care sunt pornite serviciile în timpul procesului de pornire. Pe multe sisteme, acest lucru se face folosind fișierul /etc/rc.local sau /etc/rc.d/rc.local. Alții folosesc directoarele init.d sau rc.d. Cu toate acestea, în orice caz, serverul trebuie să fie pornit ca utilizator PostgreSQL, dar nu rădăcină sau orice alt utilizator. Prin urmare, comanda de pornire ar trebui să fie scrisă de obicei sub forma su postgres -c „...”. De exemplu:

Su postgres -c "pg_ctl start -D /usr/local/pgsql/data -l serverlog"

Mai jos sunt sugestii mai specifice pentru mai multe sisteme de operare majore. (În locul valorilor șablonului pe care le-am specificat, trebuie să înlocuiți calea corectă către directorul de date și numele de utilizator real.)

    Pentru a rula pe FreeBSD, utilizați fișierul contrib/start-scripts/freebsd din arborele sursă PostgreSQL.

    Pe OpenBSD, adăugați următoarele linii în fișierul /etc/rc.local:

    Dacă [ -x /usr/local/pgsql/bin/pg_ctl -a -x /usr/local/pgsql/bin/postgres ]; apoi su -l postgres -c "/usr/local/pgsql/bin/pg_ctl start -s -l /var/postgresql/log -D /usr/local/pgsql/data" echo -n "postgresql" fi

    Pe sistemele Linux puteți fie să adăugați

    /usr/local/pgsql/bin/pg_ctl start -l fișier jurnal -D /usr/local/pgsql/data

    în /etc/rc.d/rc.local sau /etc/rc.local , sau utilizați fișierul contrib/start-scripts/linux din arborele sursă PostgreSQL.

    Folosind systemd puteți aplica următorul fișier de definire a serviciului (de exemplu, /etc/systemd/system/postgresql.service):

    Descriere=Serverul bazei de date PostgreSQL Documentation=man:postgres(1) Type=notify User=postgres ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data ExecReload=/bin/kill -HUP $ MAINPID KillMode=mixt KillSignal=SIGINT TimeoutSec=0 WantedBy=multi-user.target

    Utilizarea Type=notify necesită ca serverul să fie compilat cu configure --with-systemd .

    Valoarea timeout-ului merită o atenție specială. La momentul scrierii, timpul de expirare implicit al systemd este de 90 de secunde, astfel încât un proces care nu raportează că este gata în acest timp va fi oprit. Dar serverul PostgreSQL poate avea nevoie să se recupereze după o blocare atunci când pornește, așa că poate dura mult mai mult pentru a ajunge la starea de pregătire. Valoarea sugerată de 0 dezactivează logica de timeout.

    Pe NetBSD, puteți utiliza scriptul de pornire FreeBSD sau Linux, în funcție de preferințele dvs.

    Pe Solaris, creați un fișier numit /etc/init.d/postgresql care conține următoarea linie:

    Su - postgres -c "/usr/local/pgsql/bin/pg_ctl start -l logfile -D /usr/local/pgsql/data"

Când un server rulează, ID-ul său de proces (PID) este stocat în fișierul postmaster.pid din directorul de date. Acest lucru vă permite să evitați rularea mai multor instanțe de server cu același director de date și poate fi util și pentru închiderea serverului.

18.3.1. Eșecuri la pornirea serverului

Există mai multe motive comune pentru care un server nu poate porni. Pentru a înțelege ce a cauzat defecțiunea, priviți fișierul jurnal al serverului sau porniți serverul manual (fără a redirecționa fluxurile de ieșire standard și de eroare) și examinați mesajele care apar. Mai jos vom analiza mai detaliat unele dintre cele mai frecvente mesaje de eroare.

Jurnal: nu s-a putut lega socket-ul IPv4: Adresă deja utilizată SUGESTIE: Un alt postmaster rulează deja pe portul 5432? Dacă nu, așteptați câteva secunde și încercați din nou. FATAL: nu s-a putut crea soclul de ascultare TCP/IP

Aceasta înseamnă, de obicei, exact ceea ce scrie: încercați să porniți un server pe același port pe care rulează deja altul. Cu toate acestea, dacă mesajul nucleului nu este Adresă deja utilizată sau similar, este posibilă o altă problemă. De exemplu, când încercați să porniți un server cu un număr de port rezervat, vor fi afișate următoarele mesaje:

$ postgres -p 666 Jurnal: nu s-a putut lega socket-ul IPv4: Permisiune refuzată SUGESTIE: Un alt postmaster rulează deja pe portul 666? Dacă nu, așteptați câteva secunde și încercați din nou. FATAL: nu s-a putut crea soclul de ascultare TCP/IP

Următorul mesaj:

FATAL: nu s-a putut crea un segment de memorie partajată: argument nevalid DETALII: Apelul de sistem eșuat a fost shmget(key=5440001, size=4011376640, 03600).

Acest lucru ar putea însemna că limita de memorie partajată a nucleului dvs. este prea mică pentru spațiul de lucru pe care PostgreSQL încearcă să îl creeze (4011376640 octeți în acest exemplu). De asemenea, este posibil ca nucleul dumneavoastră să nu accepte deloc memoria partajată în stil System-V. Ca o soluție, puteți încerca să rulați serverul cu mai puține buffere (), dar în cele din urmă va trebui, cel mai probabil, să reconfigurați nucleul și să măriți dimensiunea permisă a memoriei partajate. Este posibil să vedeți acest mesaj și atunci când încercați să rulați mai multe servere pe același computer, dacă cantitatea de memorie partajată pe care au solicitat-o ​​depășește această limită.

Mesaj:

FATAL: nu s-au putut crea semafore: nu a mai rămas spațiu pe dispozitiv DETALII: Apelul de sistem eșuat a fost semget(5440126, 17, 03600).

Nuînseamnă că rămâneți fără spațiu pe disc. Aceasta înseamnă că limita de semafor System V a nucleului dvs. este mai mică decât numărul de semafore pe care PostgreSQL încearcă să le creeze. Ca și în cazul precedent, puteți încerca să ocoliți această problemă rulând serverul cu un număr mai mic de conexiuni permise (max_connections), dar în cele din urmă va trebui să creșteți această limită în nucleu.

Daca primesti eroarea " apel de sistem ilegal"(apel de sistem nevalid), atunci cel mai probabil kernel-ul dvs. nu acceptă deloc memoria partajată sau semafoare. În acest caz, tot ce trebuie să faceți este să reconfigurați nucleul și să activați suportul acestora.

Configurarea instrumentelor IPC în stil System V este descrisă în .

18.3.2. Probleme cu conexiunile clientului

Deși erorile de conectare care pot apărea pe partea clientului variază foarte mult și variază în funcție de aplicație, câteva probleme pot fi legate direct de modul în care a fost pornit serverul. Descrierile erorilor, altele decât cele descrise mai jos, trebuie găsite în documentația aplicației client corespunzătoare.

Psql: nu s-a putut conecta la server: Conexiune refuzată Serverul rulează pe gazda „server.joe.com” și acceptă conexiuni TCP/IP pe portul 5432?

Aceasta este o problemă comună « Nu pot găsi serverul și încep să interacționez cu el» . Mesajul prezentat mai sus indică o încercare de a stabili o conexiune TCP/IP. Foarte des acest lucru se explică prin faptul că pur și simplu au uitat să configureze serverul să funcționeze folosind protocolul TCP/IP.

În plus, atunci când încercați să stabiliți o conexiune la un server local printr-un socket Unix, este posibil să primiți următorul mesaj:

Psql: nu s-a putut conecta la server: Nu există un astfel de fișier sau director. Serverul rulează local și acceptă conexiuni pe socket-ul domeniului Unix „/tmp/.s.PGSQL.5432”?

Calea din ultima linie vă ajută să înțelegeți dacă clientul încearcă să se conecteze la adresa corectă. Dacă serverul nu acceptă de fapt conexiuni la această adresă, de obicei va emite mesajul Conexiune refuzată sau Nu există un astfel de fișier sau director kernel de mai sus. (Este important de înțeles că Connection a refuzat în acest context Nuînseamnă că serverul a primit o cerere de conectare și a respins-o. În acest caz, vor fi emise alte mesaje, cum ar fi cele prezentate în Secțiunea 20.4.) Alte mesaje de eroare, cum ar fi Conexiune expirată, pot semnala probleme mai fundamentale, cum ar fi conexiunile de rețea întrerupte.

Bună ziua tuturor, astăzi vreau să vă fac un scurt memento despre principalele comenzi PostgreSQL. Puteți lucra cu PosgreSQL atât interactiv, cât și din linia de comandă. Programul este psql. Sunt sigur că această listăÎți va fi foarte util și va economisi timp căutând prin diverse resurse. Permiteți-mi să vă reamintesc că acesta este un proiect open-source, bazat pe Postgres DBMS, lansat în 1986, este dezvoltat de un grup mondial de dezvoltatori PGDG, în esență 5-8 persoane, dar, în ciuda acestui fapt, se dezvoltă foarte intens. , introducerea de noi funcții și remedierea erorilor și erorilor vechi.

Comenzi de bază PostgreSQL în modul interactiv:

  • \connect db_name – conectați-vă la baza de date numită db_name
  • \du – lista de utilizatori
  • \dp (sau \z) – listă de tabele, vizualizări, secvențe, drepturi de acces la acestea
  • \di – indici
  • \ds – secvențe
  • \dt – lista de tabele
  • \dt+ - lista tuturor tabelelor cu descrieri
  • \dt *s* - lista tuturor tabelelor care conțin s în nume
  • \dv – reprezentări
  • \dS – tabele de sistem
  • \d+ – descrierea tabelului
  • \o – trimite rezultatele interogării într-un fișier
  • \l – lista bazelor de date
  • \i – citește datele primite dintr-un fișier
  • \e – deschide conținutul curent al bufferului de solicitare în editor (dacă nu se specifică altfel în mediul variabilei EDITOR, vi va fi folosit implicit)
  • \d „nume_tabel” – descrierea tabelului
  • \ execut comanda de la fișier extern, de exemplu \i /my/directory/my.sql
  • \pset – comandă pentru a configura opțiunile de formatare
  • \echo – afișează un mesaj
  • \set – Setează valoarea unei variabile de mediu. Fără parametri, afișează o listă de variabile curente (\unset – șterge).
  • \? – referință psql
  • \help – referință SQL
  • \q (sau Ctrl+D) – ieșiți din program

Lucrul cu PostgreSQL din linia de comandă:

  • -c (sau –command) – rulează o comandă SQL fără a intra în modul interactiv
  • -f file.sql - executa comenzi din fisierul file.sql
  • -l (sau –list) – afișează o listă baze de date disponibile date
  • -U (sau –username) – specificați numele de utilizator (de exemplu, postgres)
  • -W (sau –parolă) – solicitarea parolei
  • -d dbname - se conectează la baza de date dbname
  • -h – numele gazdei (server)
  • -s – modul pas cu pas, adică va trebui să confirmați toate comenzile
  • –S – modul cu o singură linie, adică trecerea la linie nouă va executa interogarea (scapa de; la sfârșitul construcției SQL)
  • -V – versiunea PostgreSQL fără a intra în modul interactiv

Exemple:

psql -U postgres -d dbname -c „CREATE TABLE my(some_id serial PRIMARY KEY, some_text text);” - executarea unei comenzi în baza de date dbname.

psql -d dbname -H -c „SELECT * FROM my” -o my.html - scoateți rezultatul interogării într-un fișier html.

Utilitare PosgreSQL (programe):

  • createb și dropdb – crearea și eliminarea unei baze de date (respectiv)
  • createuser și dropuser – creație și utilizator (respectiv)
  • pg_ctl – un program conceput pentru a rezolva sarcini generale de control (pornire, oprire, setarea parametrilor etc.)
  • postmaster – modul de server PostgreSQL multi-utilizator (configurarea nivelurilor de depanare, porturi, directoare de date)
  • initdb – crearea de noi clustere PostgreSQL
  • initlocation – un program pentru crearea de directoare pentru stocarea secundară a bazei de date
  • vacuumdb – suport pentru baze de date fizice și analitice
  • pg_dump – arhivarea și restaurarea datelor
  • pg_dumpall – backupîntregul cluster PostgreSQL
  • pg_restore – restaurarea bazei de date din arhive (.tar, .tar.gz)

Exemple de creare de copii de rezervă:

Crearea unei copii de rezervă a bazei de date mydb, în ​​formă comprimată

Pg_dump -h localhost -p 5440 -U someuser -F c -b -v -f mydb.backup mydb

Crearea unei copii de rezervă a bazei de date mydb, sub forma unui fișier text obișnuit, inclusiv comanda de creare a bazei de date

Pg_dump -h localhost -p 5432 -U someuser -C -F p -b -v -f mydb.backup mydb

Crearea unei copii de siguranță a bazei de date mydb, în ​​formă comprimată, cu tabele care conțin plăți în nume

Pg_dump -h localhost -p 5432 -U someuser -F c -b -v -t *payments* -f payment_tables.backup mydb

Eliminați datele dintr-un singur tabel specific. Dacă este nevoie de backup pentru mai multe tabele, numele tabelelor sunt listate folosind comutatorul -t pentru fiecare tabel.

Pg_dump -a -t nume_tabel -f nume_fișier nume_bază

Crearea unei copii de rezervă cu compresie gz

Pg_dump -h localhost -O -F p -c -U postgres mydb | gzip -c > mydb.gz

Lista celor mai frecvent utilizate opțiuni:

  • -h gazdă - gazdă, dacă nu este specificată atunci este utilizată localhost sau valoarea din variabila de mediu PGHOST.
  • -p port - port; dacă nu este specificat, se utilizează 5432 sau valoarea din variabila de mediu PGPORT.
  • -u - utilizator, dacă nu este specificat, atunci utilizat utilizator curent, valoarea poate fi specificată și în variabila de mediu PGUSER.
  • -a, -data-only - descărcați numai datele; implicit, datele și schema sunt salvate.
  • -b - include obiecte mari (bloguri) în gunoi.
  • -s, -schema-only - descărcați numai schema.
  • -C, -create - adaugă o comandă pentru a crea o bază de date.
  • -c - adaugă comenzi pentru a șterge (elimina) obiecte (tabele, vizualizări etc.).
  • -O - ​​​​nu adăugați comenzi pentru a seta proprietarul unui obiect (tabele, vizualizări etc.).
  • -F, -format (c|t|p) - format de descărcare de ieșire, personalizat, tar sau text simplu.
  • -t, -table=TABLE - specifică un tabel specific pentru dump.
  • -v, -verbose - ieșire informatii detaliate.
  • -D, -attribute-inserts - dump folosind comanda INSERT cu o listă de nume de proprietăți.

Faceți backup pentru toate bazele de date utilizând comanda pg_dumpall.

Pg_dumpall > all.sql

Restaurarea tabelelor din copii de rezervă:

psql - restabilirea copiilor de rezervă care sunt stocate într-un mod obișnuit fisier text(text simplu);
pg_restore - restaurarea backup-urilor comprimate (tar);

Restaurarea unei întregi copii de rezervă ignorând erorile

Psql -h localhost -U someuser -d dbname -f mydb.sql

Restaurarea unei întregi copii de rezervă, oprirea la prima eroare

Psql -h localhost -U someuser -set ON_ERROR_STOP=on -f mydb.sql

Pentru a restaura dintr-o arhivă tar, mai întâi trebuie să creăm o bază de date folosind CREATE DATABASE mydb; (dacă nu a fost specificată opțiunea -C la crearea copiei de rezervă) și restaurați

Pg_restore -dbname=mydb -jobs=4 -verbose mydb.backup

Restaurarea unei copii de rezervă a bazei de date comprimate în gz

psql -U postgres -d mydb -f mydb

Cred că baza de date postgresql va fi acum mai ușor de înțeles pentru tine. Sper că această listă de comenzi PostgreSQL v-a fost utilă.