Pokretanje postgresqla iz naredbenog retka. Instalacija PostgreSQL - Windows, Mac OS X, Linux. Primjeri izrade sigurnosnih kopija

06.08.2020 Recenzije

Prije nego što bilo tko može pristupiti bazi podataka, poslužitelj baze podataka prvo mora biti pokrenut. Poslužiteljski program zove se postgres. Kako bi radio, postgres program mora znati gdje pronaći podatke koje će koristiti. Opcija -D omogućuje vam da odredite ovu lokaciju. Dakle, najlakši način za pokretanje poslužitelja je pokretanje naredbe:

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

što će uzrokovati nastavak rada poslužitelja kao procesa u prvom planu. Ovu naredbu treba pokrenuti pod imenom račun PostgreSQL. Bez opcije -D, poslužitelj će pokušati koristiti direktorij podataka naveden u varijabla okoline PGDATA. Ako ova varijabla nije definirana, poslužitelj se neće pokrenuti.

Međutim, obično je bolje pokrenuti postgres pozadina. Da biste to učinili, možete koristiti uobičajenu sintaksu prihvaćenu u Unix ljusci:

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

Važno je negdje pohraniti informacije koje poslužitelj šalje u stdout i stderr, kao što je prikazano gore. Ovo je korisno i za svrhe revizije i za dijagnosticiranje problema. (Rad s datotekama dnevnika detaljnije je objašnjen u odjeljku 24.3.)

Postgres program također prihvaća nekoliko drugih parametara naredbeni redak. Za više informacija pogledajte stranicu za pomoć postgres i do sljedećeg poglavlja 19.

Ova mogućnost pokretanja može brzo postati nezgodna. Stoga, kako bismo pojednostavili takve zadatke, nudimo pomoćni program pg_ctl. Na primjer:

Pg_ctl start -l datoteka dnevnika

će pokrenuti poslužitelj u pozadini i usmjeriti izlazne poruke poslužitelja na navedenu datoteku dnevnika. Parametar -D ima isto značenje kao i za postgres program. Također možete zaustaviti poslužitelj koristeći pg_ctl.

Obično želite da se poslužitelj baze podataka sam pokrene prilikom dizanja sustava operacijski sustav. Skripte za automatsko pokretanje za različitim sustavima drugačiji, ali PostgreSQL nudi nekoliko standardnih skripti u direktoriju contrib/start-scripts. Da biste instalirali takvu skriptu na sustav, potrebna su root prava.

Različiti sustavi imaju različite konvencije za redoslijed pokretanja usluga tijekom procesa pokretanja. Na mnogim sustavima to se radi pomoću datoteke /etc/rc.local ili /etc/rc.d/rc.local. Drugi koriste direktorije init.d ili rc.d. Međutim, u svakom slučaju, poslužitelj mora biti pokrenut kao PostgreSQL korisnik, ali ne korijen ili bilo koji drugi korisnik. Stoga bi naredbu za pokretanje obično trebalo napisati u obliku su postgres -c "...". Na primjer:

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

Ispod su konkretniji prijedlozi za nekoliko glavnih operativnih sustava. (Umjesto vrijednosti predloška koje smo naveli, morate zamijeniti ispravan put do direktorija podataka i stvarno korisničko ime.)

    Za rad na FreeBSD-u koristite datoteku contrib/start-scripts/freebsd u stablu izvorni kod PostgreSQL.

    Na OpenBSD-u dodajte sljedeće retke u datoteku /etc/rc.local:

    Ako [ -x /usr/local/pgsql/bin/pg_ctl -a -x /usr/local/pgsql/bin/postgres ]; zatim 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

    U Linux sustavi možete ili dodati

    /usr/local/pgsql/bin/pg_ctl start -l logfile -D /usr/local/pgsql/data

    u /etc/rc.d/rc.local ili /etc/rc.local ili upotrijebite datoteku contrib/start-scripts/linux u PostgreSQL izvornom stablu.

    Koristeći systemd možete primijeniti sljedeću datoteku definicije usluge (npr. /etc/systemd/system/postgresql.service):

    Opis=PostgreSQL poslužitelj baze podataka Dokumentacija=man:postgres(1) Tip=obavijesti Korisnik=postgres ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data ExecReload=/bin/kill -HUP $ MAINPID KillMode=mješoviti KillSignal=SIGINT TimeoutSec=0 WantedBy=multi-user.target

    Korištenje Type=notify zahtijeva da poslužitelj bude kompajliran s configure --with-systemd.

    Vrijednost timeouta zaslužuje posebnu pozornost. U vrijeme pisanja, zadano vrijeme čekanja za systemd je 90 sekundi, tako da će proces koji ne prijavi da je spreman unutar tog vremena biti ubijen. Ali PostgreSQL poslužitelj će se možda trebati oporaviti od pada kada se pokrene, tako da će mu trebati puno više vremena da dostigne stanje spremnosti. Predložena vrijednost 0 onemogućuje logiku vremenskog ograničenja.

    Na NetBSD-u možete koristiti skriptu za pokretanje FreeBSD-a ili Linuxa, ovisno o vašim željama.

    Na Solarisu kreirajte datoteku pod nazivom /etc/init.d/postgresql koja sadrži sljedeći redak:

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

Kada poslužitelj radi, ID njegovog procesa (PID) pohranjuje se u datoteci postmaster.pid u direktoriju podataka. To vam omogućuje da izbjegnete pokretanje više instanci poslužitelja s istim direktorijem podataka, a također može biti korisno za gašenje poslužitelja.

18.3.1. Neuspješno pokretanje poslužitelja

Postoji nekoliko uobičajenih razloga zašto se poslužitelj možda neće pokrenuti. Da biste razumjeli što je uzrokovalo kvar, pogledajte datoteku dnevnika poslužitelja ili pokrenite poslužitelj ručno (bez preusmjeravanja njegovih standardnih izlaza i tokova grešaka) i ispitajte poruke koje izlaze. U nastavku ćemo detaljnije pogledati neke od najčešćih poruka o pogrešci.

DNEVNIK: nije moguće vezati IPv4 adresu "127.0.0.1": Adresa se već koristi SAVJET: Je li neki drugi upravitelj pošte već pokrenut na portu 5432? Ako ne, pričekajte nekoliko sekundi i pokušajte ponovno. KOBNO: nije moguće stvoriti nijednu TCP/IP utičnicu

To obično znači točno ono što piše: pokušavate pokrenuti poslužitelj na istom priključku na kojem drugi već radi. Međutim, ako poruka kernela nije Adresa već u uporabi ili slično, možda postoji drugi problem. Na primjer, kada pokušate pokrenuti poslužitelj s rezerviranim brojem porta, prikazat će se sljedeće poruke:

$ postgres -p 666 DNEVNIK: nije moguće vezati IPv4 adresu "127.0.0.1": Dozvola odbijena SAVJET: Je li neki drugi upravitelj pošte već pokrenut na portu 666? Ako ne, pričekajte nekoliko sekundi i pokušajte ponovno. KOBNO: nije moguće stvoriti nijednu TCP/IP utičnicu

Sljedeća poruka:

KOBNO: nije moguće stvoriti segment dijeljene memorije: Nevažeći argument DETALJ: Neuspjeli sistemski poziv bio je shmget(ključ=5440001, veličina=4011376640, 03600).

može značiti da je ograničenje zajedničke memorije vaše jezgre premalo za radni prostor koji PostgreSQL pokušava stvoriti (u u ovom primjeru 4011376640 bajtova). Također je moguće da vaša jezgra uopće ne podržava dijeljenu memoriju u stilu System-V. Kao zaobilazno rješenje, možete pokušati pokrenuti poslužitelj s manje međuspremnika (), ali na kraju ćete najvjerojatnije morati ponovno konfigurirati kernel i povećati dopuštenu veličinu dijeljene memorije. Također možete vidjeti ovu poruku kada pokušavate pokrenuti više poslužitelja na istom računalu ako je količina zajedničke memorije koju su zatražili veća od ovog ograničenja.

Poruka:

KOBNO: nije moguće stvoriti semafore: Nema više prostora na uređaju DETALJ: Neuspjeli sistemski poziv bio je semget(5440126, 17, 03600).

Ne znači da vam ponestaje prostora na disku. To znači da je ograničenje semafora System V vašeg kernela manje od broja semafora koje PostgreSQL pokušava stvoriti. Kao i u prethodnom slučaju, možete pokušati zaobići ovaj problem pokretanjem poslužitelja s manjim brojem dopuštenih veza (max_connections), ali na kraju ćete morati povećati ovo ograničenje u kernelu.

Ako dobijete grešku " ilegalni sistemski poziv"(nevažeći sistemski poziv), onda najvjerojatnije vaš kernel uopće ne podržava dijeljenu memoriju ili semafore. U ovom slučaju, sve što trebate učiniti je ponovno konfigurirati kernel i omogućiti njihovu podršku.

Postavljanje IPC alata u stilu System V opisano je u .

18.3.2. Problemi s klijentskim vezama

Iako se pogreške povezivanja koje se mogu pojaviti na strani klijenta jako razlikuju i razlikuju se ovisno o aplikaciji, nekoliko problema može biti izravno povezano s načinom na koji je poslužitelj pokrenut. Opise grešaka osim dolje opisanih treba pronaći u dokumentaciji odgovarajuće klijentske aplikacije.

Psql: ne može se spojiti na poslužitelj: Veza odbijena Radi li poslužitelj na hostu "server.joe.com" i prihvaća li TCP/IP veze na portu 5432?

Ovaj čest problem « Ne mogu pronaći poslužitelj i započeti interakciju s njim» . Gore prikazana poruka označava pokušaj uspostavljanja TCP/IP veze. Vrlo često se to objašnjava činjenicom da su jednostavno zaboravili konfigurirati poslužitelj za rad pomoću TCP/IP protokola.

Osim toga, kada pokušavate uspostaviti vezu s lokalni poslužitelj putem Unix utičnice možete primiti sljedeću poruku:

Psql: nije se mogao spojiti na poslužitelj: Nema takve datoteke ili direktorija Radi li poslužitelj lokalno i prihvaća li veze na utičnici Unix domene "/tmp/.s.PGSQL.5432"?

Putanja u zadnjem retku pomaže vam razumjeti pokušava li se klijent spojiti na ispravnu adresu. Ako poslužitelj zapravo ne prihvaća veze na ovoj adresi, obično će izdati gornju poruku kernela Veza odbijena ili Nema takve datoteke ili direktorija. (Važno je razumjeti da je Connection odbijen u ovom kontekstu Ne znači da je poslužitelj primio zahtjev za povezivanje i odbio ga. U tom slučaju bi se izdale druge poruke, kao što su one prikazane u odjeljku 20.4.) Druge poruke o pogrešci, kao što je Connection time out, mogu signalizirati fundamentalnije probleme, kao što su prekinute mrežne veze.

Ako ste prijavljeni kao root, umjesto pokretanja su - c naredbi poznatih iz prethodnih koraka, morat ćete se prijaviti kao postgres korisničko ime koje ste stvorili u prvom koraku. Nakon što se prijavite kao postgres, unesite naredbu prikazanu u ispisu 2.15.

Listing 2.15. Inicijalizacija baze podataka.

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

Ključ - D određuje direktorij u koji će podaci biti pohranjeni. Isto se može učiniti korištenjem varijable okoline PCDATA. Ako je navedena vrijednost varijable PCDATA, prekidač -D je opcionalan. Ako želite svoje podatkovne datoteke pohraniti u drugi direktorij, provjerite ima li postgres korisnik pristup za pisanje u taj direktorij. Primjer rezultata initdb inicijalizacije prikazan je u ispisu 2.16.

Listing 2.16. initdb izlaz.

$ /usr/local/pgsql/bin/intidb – D /usr/local/pgsql/data Ovaj sustav baze podataka bit će inicijaliziran s korisničkim imenom "postgres." Ovaj će korisnik posjedovati sve podatkovne datoteke i također mora posjedovati proces poslužitelja. Stvaranje direktorija /usr/pgsql/data Stvaranje direktorija /usr/pgsqi/data/case Stvaranje direktorija /usr/pgsql/data/global Stvaranje direktorija /usr/pgsql/pg_xlog Stvaranje tempiatel baze podataka u /usr/local/pgsql/data/base /l DEBUG: sustav baze podataka je ugašen u 2001-08-24 16:36:35 PDT DEBUG: Zapis kontrolne točke na (0. 8) DEBUG: Ponovi zapis na (0. 8): Poništi zapis na (0. 8) : Isključi TRUE DEBUG: NextTransactionld: 514; NextOid: 16384 DEBUG: sustav baze podataka je u proizvodnom stanju Stvaranje globalnih odnosa u /usr/local/pgsql/data/global DEBUG: sustav baze podataka je ugašen u 2001-08-24 16:36:38 PDT DEBUG: Zapis kontrolne točke u ( Q. 108) DEBUG: Ponovi zapis na (0. 108): Poništi zapis na (0. 0); Isključivanje TRUE DEBUG: NextTransactionld: 514: NextOid: 17199 DEBUG: sustav baze podataka je u proizvodnom stanju. Inicijalizacija pg_shadow Omogućivanje neograničene širine retka za sistemske tablice. Izrada prikaza sustava. Učitavanje pg_description. Postavljanje lastsysoida. Baza podataka o usisavanju. Kopiranje tempiatela u tempiateO. Uspjeh. Sada možete pokrenuti poslužitelj baze podataka koristeći: /usr/local/pgsql/bin/postmaster – D /usr/local/pgsql/data ili /usr/local/pgsql/bin/pg_ct1 – D /usr/local/pgsql/data – 1 početak log datoteke

Bilješka
Da biste koristili drugi direktorij podataka u PostgreSQL-u, navedite stazu do ovog direktorija pomoću ključa - O. Direktorij se prvo mora inicijalizirati naredbom initdb
.

Kraj izlaza naredbe initdb pruža informacije o dvije opcije za pokretanje PostgreSQL poslužitelja. U prvoj opciji, postmaster proces se pokreće u aktivni način rada. Nakon što unesete naredbu u ispisu 2.17, naredbeni redak postaje nedostupan dok se postmaster proces ne zaustavi pritiskom na CTRL+C.

Listing 2.17. Pokreni postmaster u aktivnom načinu rada.

$ /usr/local/pgsql/bin/postmaster – D /usr/local/pgsql/data OTKLANJANJE POGREŠKI: sustav baze podataka ugašen je 2001-10-12 23:11:00 PDT OTKLANJANJE POGREŠKI: Zapis kontrolne točke na (0. 1522064) DEBUG: Ponovi zapis u (0. 1522064): Poništi zapis u (0. 8): Isključi TRUE DEBUG: NextTransactionld: 615: NextOid: 18720 DEBUG: sustav baze podataka je u proizvodnom stanju

Obično nije potrebno pokrenuti PostgreSQL u aktivnom načinu rada. Autori preporučuju korištenje druge naredbe koja pokreće postmaster u pozadini. Kao što je prikazano u ispisu 2.18, proces se pokreće naredbom pg_ct1.

Listing 2.18. Pokreni postmaster u pozadini.

$ /usr/1ocal/pgsqVbin/pg_ctl – D /usr/local/pgsql/data – 1 /tmp/pgsql.log start postmaster uspješno pokrenut

Glavna razlika između ove dvije naredbe je u tome što u drugoj opciji postmaster radi u pozadini i sve informacije o otklanjanju pogrešaka šalju se u datoteku /tmp/pgsql.log. Tijekom normalnog rada općenito se preporuča pokrenuti postmaster u pozadini s omogućenim zapisivanjem.

Bilješka
Aplikacija pg_ctl pokreće i zaustavlja PostgreSQL poslužitelj. dodatne informacije o ovoj naredbi pogledajte poglavlje 9
.

Prije nego što bilo tko može pristupiti bazi podataka, poslužitelj baze podataka prvo mora biti pokrenut. Poslužiteljski program zove se postgres. Kako bi radio, postgres program mora znati gdje pronaći podatke koje će koristiti. Opcija -D omogućuje vam da odredite ovu lokaciju. Dakle, najlakši način za pokretanje poslužitelja je pokretanje naredbe:

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

što će uzrokovati nastavak rada poslužitelja kao procesa u prvom planu. Ovu naredbu treba pokrenuti pod imenom računa PostgreSQL. Bez opcije -D, poslužitelj će pokušati koristiti direktorij podataka naveden u varijabli okoline PGDATA. Ako ova varijabla nije definirana, poslužitelj se neće pokrenuti.

Međutim, obično je bolje pokrenuti postgres u pozadini. Da biste to učinili, možete koristiti uobičajenu sintaksu prihvaćenu u Unix ljusci:

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

Važno je negdje pohraniti informacije koje poslužitelj šalje u stdout i stderr, kao što je prikazano gore. Ovo je korisno i za svrhe revizije i za dijagnosticiranje problema. (Rad s datotekama dnevnika detaljnije je objašnjen u odjeljku 24.3.)

Program postgres također prihvaća nekoliko drugih opcija naredbenog retka. Za više informacija pogledajte stranicu za pomoć postgres i do sljedećeg poglavlja 19.

Ova mogućnost pokretanja može brzo postati nezgodna. Stoga, kako bismo pojednostavili takve zadatke, nudimo pomoćni program pg_ctl. Na primjer:

Pg_ctl start -l datoteka dnevnika

će pokrenuti poslužitelj u pozadini i usmjeriti izlazne poruke poslužitelja na navedenu datoteku dnevnika. Parametar -D ima isto značenje kao i za postgres program. Također možete zaustaviti poslužitelj koristeći pg_ctl.

Obično želite da se poslužitelj baze podataka sam pokrene kada se operativni sustav podigne. Skripte za automatsko pokretanje razlikuju se za različite sustave, ali PostgreSQL nudi nekoliko standardnih skripti u direktoriju contrib/start-scripts. Da biste instalirali takvu skriptu na sustav, potrebna su root prava.

Različiti sustavi imaju različite konvencije za redoslijed pokretanja usluga tijekom procesa pokretanja. Na mnogim sustavima to se radi pomoću datoteke /etc/rc.local ili /etc/rc.d/rc.local. Drugi koriste direktorije init.d ili rc.d. Međutim, u svakom slučaju, poslužitelj mora biti pokrenut kao PostgreSQL korisnik, ali ne korijen ili bilo koji drugi korisnik. Stoga bi naredbu za pokretanje obično trebalo napisati u obliku su postgres -c "...". Na primjer:

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

Ispod su konkretniji prijedlozi za nekoliko glavnih operativnih sustava. (Umjesto vrijednosti predloška koje smo naveli, morate zamijeniti ispravan put do direktorija podataka i stvarno korisničko ime.)

    Za rad na FreeBSD-u koristite datoteku contrib/start-scripts/freebsd u PostgreSQL izvornom stablu.

    Na OpenBSD-u dodajte sljedeće retke u datoteku /etc/rc.local:

    Ako [ -x /usr/local/pgsql/bin/pg_ctl -a -x /usr/local/pgsql/bin/postgres ]; zatim 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

    Na Linux sustavima možete dodati ili

    /usr/local/pgsql/bin/pg_ctl start -l logfile -D /usr/local/pgsql/data

    u /etc/rc.d/rc.local ili /etc/rc.local ili upotrijebite datoteku contrib/start-scripts/linux u PostgreSQL izvornom stablu.

    Koristeći systemd možete primijeniti sljedeću datoteku definicije usluge (npr. /etc/systemd/system/postgresql.service):

    Opis=PostgreSQL poslužitelj baze podataka Dokumentacija=man:postgres(1) Tip=obavijesti Korisnik=postgres ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data ExecReload=/bin/kill -HUP $ MAINPID KillMode=mješoviti KillSignal=SIGINT TimeoutSec=0 WantedBy=multi-user.target

    Korištenje Type=notify zahtijeva da poslužitelj bude kompajliran s configure --with-systemd.

    Vrijednost timeouta zaslužuje posebnu pozornost. U vrijeme pisanja, zadano vrijeme čekanja za systemd je 90 sekundi, tako da će proces koji ne prijavi da je spreman unutar tog vremena biti ubijen. Ali PostgreSQL poslužitelj će se možda trebati oporaviti od pada kada se pokrene, tako da će mu trebati puno više vremena da dostigne stanje spremnosti. Predložena vrijednost 0 onemogućuje logiku vremenskog ograničenja.

    Na NetBSD-u možete koristiti skriptu za pokretanje FreeBSD-a ili Linuxa, ovisno o vašim željama.

    Na Solarisu kreirajte datoteku pod nazivom /etc/init.d/postgresql koja sadrži sljedeći redak:

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

Kada poslužitelj radi, ID njegovog procesa (PID) pohranjuje se u datoteci postmaster.pid u direktoriju podataka. To vam omogućuje da izbjegnete pokretanje više instanci poslužitelja s istim direktorijem podataka, a također može biti korisno za gašenje poslužitelja.

18.3.1. Neuspješno pokretanje poslužitelja

Postoji nekoliko uobičajenih razloga zašto se poslužitelj možda neće pokrenuti. Da biste razumjeli što je uzrokovalo kvar, pogledajte datoteku dnevnika poslužitelja ili pokrenite poslužitelj ručno (bez preusmjeravanja njegovih standardnih izlaza i tokova grešaka) i ispitajte poruke koje izlaze. U nastavku ćemo detaljnije pogledati neke od najčešćih poruka o pogrešci.

DNEVNIK: nije moguće povezati IPv4 utičnicu: Adresa je već u upotrebi SAVJET: Je li drugi postmaster već pokrenut na portu 5432? Ako ne, pričekajte nekoliko sekundi i pokušajte ponovno. KOBNO: nije moguće stvoriti TCP/IP utičnicu za slušanje

To obično znači točno ono što piše: pokušavate pokrenuti poslužitelj na istom priključku na kojem drugi već radi. Međutim, ako poruka kernela nije Adresa već u uporabi ili slično, moguć je drugi problem. Na primjer, kada pokušate pokrenuti poslužitelj s rezerviranim brojem porta, prikazat će se sljedeće poruke:

$ postgres -p 666 DNEVNIK: nije moguće vezati IPv4 utičnicu: Dozvola odbijena SAVJET: Je li neki drugi upravitelj pošte već pokrenut na portu 666? Ako ne, pričekajte nekoliko sekundi i pokušajte ponovno. KOBNO: nije moguće stvoriti TCP/IP utičnicu za slušanje

Sljedeća poruka:

KOBNO: nije moguće stvoriti segment dijeljene memorije: Nevažeći argument DETALJ: Neuspjeli sistemski poziv bio je shmget(ključ=5440001, veličina=4011376640, 03600).

To bi moglo značiti da je ograničenje zajedničke memorije vašeg kernela premalo za radni prostor koji PostgreSQL pokušava stvoriti (4011376640 bajtova u ovom primjeru). Također je moguće da vaša jezgra uopće ne podržava dijeljenu memoriju u stilu System-V. Kao zaobilazno rješenje, možete pokušati pokrenuti poslužitelj s manje međuspremnika (), ali na kraju ćete najvjerojatnije morati ponovno konfigurirati kernel i povećati dopuštenu veličinu dijeljene memorije. Također možete vidjeti ovu poruku kada pokušavate pokrenuti više poslužitelja na istom računalu ako je količina zajedničke memorije koju su zatražili veća od ovog ograničenja.

Poruka:

KOBNO: nije moguće stvoriti semafore: Nema više prostora na uređaju DETALJ: Neuspjeli sistemski poziv bio je semget(5440126, 17, 03600).

Ne znači da vam ponestaje prostora na disku. To znači da je ograničenje semafora System V vašeg kernela manje od broja semafora koje PostgreSQL pokušava stvoriti. Kao i u prethodnom slučaju, možete pokušati zaobići ovaj problem pokretanjem poslužitelja s manjim brojem dopuštenih veza (max_connections), ali na kraju ćete morati povećati ovo ograničenje u kernelu.

Ako dobijete grešku " ilegalni sistemski poziv"(nevažeći sistemski poziv), onda najvjerojatnije vaš kernel uopće ne podržava dijeljenu memoriju ili semafore. U ovom slučaju, sve što trebate učiniti je ponovno konfigurirati kernel i omogućiti njihovu podršku.

Postavljanje IPC alata u stilu System V opisano je u .

18.3.2. Problemi s klijentskim vezama

Iako se pogreške povezivanja koje se mogu pojaviti na strani klijenta jako razlikuju i razlikuju se ovisno o aplikaciji, nekoliko problema može biti izravno povezano s načinom na koji je poslužitelj pokrenut. Opise grešaka osim dolje opisanih treba pronaći u dokumentaciji odgovarajuće klijentske aplikacije.

Psql: nije se mogao spojiti na poslužitelj: veza odbijena Radi li poslužitelj na hostu "server.joe.com" i prihvaća li TCP/IP veze na portu 5432?

Ovo je čest problem « Ne mogu pronaći poslužitelj i započeti interakciju s njim» . Gore prikazana poruka označava pokušaj uspostavljanja TCP/IP veze. Vrlo često se to objašnjava činjenicom da su jednostavno zaboravili konfigurirati poslužitelj za rad pomoću TCP/IP protokola.

Osim toga, kada pokušavate uspostaviti vezu s lokalnim poslužiteljem putem Unix utičnice, možete primiti sljedeću poruku:

Psql: nije se mogao spojiti na poslužitelj: Nema takve datoteke ili direktorija Radi li poslužitelj lokalno i prihvaća li veze na utičnici Unix domene "/tmp/.s.PGSQL.5432"?

Putanja u zadnjem retku pomaže vam razumjeti pokušava li se klijent spojiti na ispravnu adresu. Ako poslužitelj zapravo ne prihvaća veze na ovoj adresi, obično će izdati gornju poruku kernela Veza odbijena ili Nema takve datoteke ili direktorija. (Važno je razumjeti da je Connection odbijen u ovom kontekstu Ne znači da je poslužitelj primio zahtjev za povezivanje i odbio ga. U tom slučaju bi se izdale druge poruke, kao što su one prikazane u odjeljku 20.4.) Druge poruke o pogrešci, kao što je Connection time out, mogu signalizirati fundamentalnije probleme, kao što su prekinute mrežne veze.

Pozdrav svima, danas želim napraviti kratki podsjetnik o glavnim PostgreSQL naredbama. S PosgreSQL-om možete raditi i interaktivno i iz naredbenog retka. Program je psql. siguran sam u to ovaj popis Bit će vam vrlo koristan i uštedjet će vam vrijeme traženja raznih izvora. Dopustite mi da vas podsjetim da je ovo projekt otvorenog koda, temeljen na Postgres DBMS-u, objavljen 1986., razvija ga svjetska grupa PGDG programera, u biti 5-8 ljudi, ali unatoč tome, razvija se vrlo intenzivno , uvođenje novih funkcija i ispravljanje starih bugova i pogrešaka.

Osnovne PostgreSQL naredbe u interaktivnom načinu rada:

  • \connect db_name – povezivanje s bazom podataka pod imenom db_name
  • \du – popis korisnika
  • \dp (ili \z) – popis tablica, pogleda, nizova, prava pristupa njima
  • \di – indeksi
  • \ds – nizovi
  • \dt – popis tablica
  • \dt+ - popis svih tablica s opisima
  • \dt *s* - popis svih tablica koje sadrže s u nazivu
  • \dv – reprezentacije
  • \dS – sistemske tablice
  • \d+ – opis tablice
  • \o – poslati rezultate upita u datoteku
  • \l – popis baza podataka
  • \i – čitanje dolaznih podataka iz datoteke
  • \e – otvara trenutni sadržaj međuspremnika zahtjeva u uređivaču (osim ako nije drugačije navedeno u okruženju varijable EDITOR, vi će se koristiti prema zadanim postavkama)
  • \d “table_name” – opis tablice
  • \i pokrenuti naredbu iz vanjska datoteka, na primjer \i /my/directory/my.sql
  • \pset – naredba za konfiguriranje opcija oblikovanja
  • \echo – prikazuje poruku
  • \set – Postavlja vrijednost varijable okoline. Bez parametara, prikazuje popis trenutnih varijabli (\unset – briše).
  • \? – psql referenca
  • \help – SQL referenca
  • \q (ili Ctrl+D) – izlaz iz programa

Rad s PostgreSQL-om iz naredbenog retka:

  • -c (ili –command) – pokrenite SQL naredbu bez odlaska u interaktivni način rada
  • -f file.sql - izvršavanje naredbi iz datoteke file.sql
  • -l (ili –list) – prikazuje popis dostupne baze podataka podaci
  • -U (ili –username) – odredite korisničko ime (na primjer postgres)
  • -W (ili –password) – upit za lozinku
  • -d dbname - povezivanje s bazom podataka dbname
  • -h – ime hosta (poslužitelja)
  • -s – način rada korak po korak, odnosno morat ćete potvrditi sve naredbe
  • –S – jednolinijski način rada, odnosno prebacivanje na nova linija izvršit će upit (riješi se; na kraju SQL konstrukcije)
  • -V – verzija PostgreSQL-a bez ulaska u interaktivni mod

Primjeri:

psql -U postgres -d dbname -c “CREATE TABLE my(some_id serial PRIMARY KEY, some_text text);” - izvršavanje naredbe u bazi dbname.

psql -d dbname -H -c “SELECT * FROM my” -o my.html - izlaz rezultata upita u html datoteku.

PosgreSQL pomoćni programi (programi):

  • createdb i dropdb – stvaranje i ispuštanje baze podataka (respektivno)
  • createuser i dropuser – stvaranje i korisnik (odnosno)
  • pg_ctl – program dizajniran za rješavanje općih zadataka upravljanja (pokretanje, zaustavljanje, podešavanje parametara itd.)
  • postmaster – višekorisnički PostgreSQL poslužiteljski modul (konfiguriranje razina otklanjanja pogrešaka, portova, direktorija podataka)
  • initdb – stvaranje novih PostgreSQL klastera
  • initlocation – program za kreiranje direktorija za sekundarnu pohranu baze podataka
  • vacuumdb – fizička i analitička podrška bazi podataka
  • pg_dump – arhiviranje i vraćanje podataka
  • pg_dumpall – sigurnosna kopija cijeli PostgreSQL klaster
  • pg_restore – vraćanje baze podataka iz arhiva (.tar, .tar.gz)

Primjeri izrade sigurnosnih kopija:

Izrada sigurnosne kopije mydb baze podataka, u komprimiranom obliku

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

Izrada sigurnosne kopije mydb baze podataka, u obliku obične tekstualne datoteke, uključujući naredbu za kreiranje baze podataka

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

Izrada sigurnosne kopije mydb baze podataka, u komprimiranom obliku, s tablicama koje sadrže plaćanja u nazivu

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

Ispis podataka iz samo jedne, određene tablice. Ako je potrebno napraviti sigurnosnu kopiju više tablica, nazivi tablica navedeni su pomoću preklopke -t za svaku tablicu.

Pg_dump -a -t table_name -f file_name database_name

Izrada sigurnosne kopije s gz kompresijom

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

Popis najčešće korištenih opcija:

  • -h host - host, ako nije navedeno koristi se localhost ili vrijednost iz varijable okruženja PGHOST.
  • -p port - port; ako nije navedeno, koristi se 5432 ili vrijednost iz varijable okruženja PGPORT.
  • -u - korisnik, ako nije navedeno onda se koristi trenutni korisnik, vrijednost se također može navesti u varijabli okoline PGUSER.
  • -a, -data-only - ispis samo podataka; prema zadanim postavkama podaci i shema se spremaju.
  • -b - uključiti velike objekte (blogove) u dump.
  • -s, -schema-only - izbaci samo shemu.
  • -C, -create - dodaje naredbu za stvaranje baze podataka.
  • -c - dodaje naredbe za brisanje (ispuštanje) objekata (tablica, pogleda itd.).
  • -O - ​​​​ne dodavati naredbe za postavljanje vlasnika objekta (tablice, pogledi itd.).
  • -F, -format (c|t|p) - ispis izlaznog formata, prilagođenog, tar ili običnog teksta.
  • -t, -table=TABLE - odredite određenu tablicu za ispis.
  • -v, -verbose - izlaz detaljne informacije.
  • -D, -attribute-inserts - ispis pomoću naredbe INSERT s popisom naziva svojstava.

Sigurnosno kopirajte sve baze podataka pomoću naredbe pg_dumpall.

Pg_dumpall > all.sql

Vraćanje tablica iz sigurnosnih kopija:

psql - vraćanje sigurnosnih kopija koje su pohranjene u redovnom tekstualna datoteka(običan tekst);
pg_restore - vraćanje komprimiranih sigurnosnih kopija (tar);

Vraćanje cijele sigurnosne kopije uz ignoriranje pogrešaka

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

Vraćanje cijele sigurnosne kopije, zaustavljanje na prvoj pogrešci

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

Za vraćanje iz tar arhive, prvo moramo stvoriti bazu podataka koristeći CREATE DATABASE mydb; (ako opcija -C nije navedena prilikom izrade sigurnosne kopije) i vratiti

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

Vraćanje gz-komprimirane sigurnosne kopije baze podataka

psql -U postgres -d mydb -f mydb

Mislim da će vam postgresql baza podataka sada biti razumljivija. Nadam se da vam je ovaj popis PostgreSQL naredbi bio koristan.