PostgreSQL funkcije. LXXX. PostgreSQL karakteristike Veličina baze podataka

Standardna biblioteka predložaka ( Standardna biblioteka šablona , STL) je uključen u standardnu ​​biblioteku jezika C++. Uključuje implementacije najčešće korišćenih kontejnera i algoritama, što programere spašava od rutine njihovog ponovnog pisanja iznova i iznova. Prilikom razvoja kontejnera i algoritama koji se na njih primjenjuju (kao što je uklanjanje identičnih elemenata, sortiranje, pretraživanje itd.), često se moraju žrtvovati ili svestranost ili performanse. Međutim, STL programeri su sebi postavili zadatak da biblioteku učine efikasnom i univerzalnom. Za rješavanje ovog problema korištena su univerzalna sredstva jezika C++ kao što su šabloni i preopterećenje operatora. U sljedećoj prezentaciji ćemo se osloniti na STL implementaciju koju je isporučio Microsoft zajedno sa Visual C++ 6.0 kompajlerom. Međutim, većina gore navedenog će važiti i za STL implementacije od strane drugih kompajlera.

Glavni koncepti u STL-u su koncepti kontejner (kontejner), algoritam (algoritam) i iterator (iterator).

Kontejnerje skladište objekata (i ugrađenih i korisnički definiranih tipova). Kontejneri se obično implementiraju kao predlošci klasa. Najjednostavniji tipovi kontejnera (statički i dinamički nizovi) ugrađeni su direktno u jezik C++. Osim toga, standardna biblioteka uključuje implementacije kontejnera kao što su vektor, lista, red čekanja, mapa, skup i neke druge.

Algoritamje funkcija za manipulaciju objektima sadržanim u kontejneru. Tipični primjeri algoritama su sortiranje i pretraživanje. STL implementira oko 60 algoritama koji se mogu primijeniti na različite kontejnere, uključujući nizove ugrađene u C++ jezik.

Iteratorje apstrakcija pokazivača, odnosno objekta koji se može odnositi na druge objekte sadržane u kontejneru. Glavne funkcije iteratora su da omogući pristup objektu na koji se odnosi (dereferenciranje) i da pređe sa jednog elementa kontejnera na drugi (iteracija, otuda i naziv iterator). Za ugrađene kontejnere, regularni pokazivači se koriste kao iteratori. U slučaju složenijih kontejnera, iteratori se implementiraju kao klase sa skupom preopterećenih operatora.

Pored označenih elemenata u STL-u postoji i broj pomoćni pojmovi ; Trebalo bi i da upoznate neke od njih.

Alocator(alokator) je objekt odgovoran za dodjelu memorije za elemente kontejnera. Alokator je pridružen svakom standardnom kontejneru (njegov tip se prosljeđuje kao jedan od parametara šablona). Ako neki algoritam treba da dodijeli memoriju za elemente, to mora učiniti preko alokatora. U tom slučaju možete biti sigurni da će distribuirani objekti biti ispravno uništeni.

STL uključuje standardnu ​​klasu alokatora (opisanu u xmemory datoteci). To je ono što svi kontejneri implementirani u STL-u koriste po defaultu. Međutim, korisnik može implementirati svoju vlastitu klasu. Ovo je vrlo rijetko potrebno, ali se ponekad može učiniti u svrhu efikasnosti ili otklanjanja grešaka.

Zaustavimo se detaljnije na razmatranju uvedenih pojmova.

Kontejneri . Svaki kontejner pruža striktno definirano sučelje kroz koje će algoritmi komunicirati s njim. Iteratori specifični za kontejner pružaju ovaj interfejs. Važno je naglasiti da se ne koriste dodatne funkcije člana za interakciju između algoritama i kontejnera. Ovo se radi zato što standardni algoritmi moraju raditi, uključujući ugrađene kontejnere jezika C++, koji imaju iteratore (pokazivače), ali ništa drugo. Stoga, kada kreirate svoj vlastiti kontejner, implementacija iteratora je minimum.

Svaki kontejner implementira određeni tip iteratora. Ovo bira najfunkcionalniji tip iteratora koji se može efikasno implementirati za dati kontejner. "Efikasan" znači da brzina izvođenja operacija na iteratoru ne treba da zavisi od broja elemenata u kontejneru. Na primjer, iterator slučajnog pristupa je implementiran za vektor, a dvosmjerni iterator je implementiran za listu. Budući da je brzina operacije liste linearna s njenom dužinom, iterator slučajnog pristupa za listu nije implementiran.

Bez obzira na stvarnu organizaciju kontejnera (vektor, lista, stablo), elementi pohranjeni u njemu mogu se smatrati nizom. Iterator prvog elementa u ovom nizu vraća funkcija begin(), a iterator elementa koji slijedi nakon zadnjeg vraća end() funkcija. Ovo je veoma važno, budući da svi algoritmi u STL-u rade precizno sa sekvencama koje su specificirane od strane početnih i krajnjih iteratora.

Pored regularnih iteratora u STL-u, postoje i obrnuti iteratori ( obrnuti iterator ). Obrnuti iterator se razlikuje po tome što ponavlja niz elemenata u kontejneru obrnutim redoslijedom. Drugim riječima, operacije + i - su obrnute. Ovo omogućava da se algoritmi primjenjuju i na direktne i na reverzne sekvence elemenata. Na primjer, koristeći funkciju pronalaženja, možete tražiti elemente i s "početka" i s "kraja" kontejnera.

U STL-u, kontejneri su podijeljeni u tri glavne grupe (Tablica 2): kontejneri sekvenci, asocijativni kontejneri i adapteri kontejnera. Prve dvije grupe su objedinjene u prvoklasne kontejnere.

tabela 2

Klasa kontejnera STL

Opis

Kontejneri sekvenci

vektor

Dinamički niz

deque

Dvosmjerni red čekanja

lista

Dvosmjerna linearna lista

Asocijativni kontejneri

Asocijativni kontejner sa jedinstvenim ključevima

multiset

Asocijativni kontejner koji dozvoljava duple ključeve

Asocijativni kontejner za skupove jedinstvenih elemenata

multimap

Asocijativni kontejner za skupove sa dupliranim elementima

Adapteri za kontejnere

stog

Standardni stog

queue

Standardni red

priority_queue

Prioritetni red

Svaka klasa kontejnera implementirana u STL , opisuje skup tipova povezanih sa kontejnerom. Trebali biste slijediti istu praksu kada pišete vlastite kontejnere. Evo liste najvažnijih tipova:

value_type - tip elementa;

size_type - tip za pohranjivanje broja elemenata (obično size_t);

iterator - iterator za elemente kontejnera;

tip_ključa - tip ključa (u asocijativnom kontejneru).

Osim tipova, možemo razlikovati skup funkcija koje implementira gotovo svaki kontejner u STL-u (Tablica 3). Nisu potrebni za interakciju s algoritmima, ali njihova implementacija poboljšava zamjenjivost kontejnera u programu. STL je dizajniran tako da kontejneri pružaju sličnu funkcionalnost.

Tabela 3

Uobičajene metode svih STL kontejnera

Opis

default konstruktor

Zadani konstruktor. Obično kontejner ima nekoliko dizajneri

konstruktor kopiranja

Konstruktor kopiranja

destructor

Destructor

prazan

Vraća true ako u kontejneru nema elemenata, u suprotnom false

max_size

Vraća maksimalni broj elemenata za kontejner

veličina

Vraća broj elemenata u kontejneru u trenutnom trenutku

operator =

Dodjeljuje jedan kontejner drugom

operater<

Vraća true ako je prvi kontejner manji od drugog, a u suprotnom false

operater<=

Vraća true ako prvi kontejner nije veći od drugog, a u suprotnom false

operater >

Vraća true ako je prvi kontejner veći od drugog, u suprotnom netočno

operator >=

Vraća true ako prvi kontejner nije manji od drugog, u suprotnom netočno

operator ==

Vraća true ako su upoređeni spremnici jednaki, a u suprotnom netočno

operator !=

Vraća true ako upoređeni kontejneri nisu jednaki, a u suprotnom false

swap

Zamjenjuje elemente dva kontejnera

Karakteristike dostupne samo u prvoklasnim kontejnerima

početi

Dvije verzije ove funkcije vraćaju ili iterator ili const_iterator, koji se odnosi na prvi element spremnika

Dvije verzije ove funkcije vraćaju ili iterator ili const_iterator, koji se odnosi na sljedeću poziciju nakon kraja spremnika

rbegin

Vraćaju se i dvije verzije ove funkcije reverse_iterator ili reverse_const_iterator , koji se odnosi na posljednji element kontejnera

rend

Dvije verzije ove funkcije vraćaju ili reverse_iterator ili reverse_const_iterator, koji se odnosi na poziciju prije prvog elementa spremnika

umetnuti, obrisati,

Omogućava vam da umetnete ili uklonite element(e) u sredini niza

Kraj stola 3

jasno

Uklanja sve elemente iz kontejnera

napred, nazad

push_back, pop_back

Omogućava vam da dodate ili uklonite posljednji element u nizu

push_front, pop_front

Omogućava vam da dodate ili uklonite prvi element u nizu

Iteratori se obično kreiraju kao prijatelji klasa na kojima rade, omogućavajući direktan pristup privatnim podacima tih klasa. Jedan kontejner može imati više iteratora povezanih s njim, od kojih svaki održava vlastite “pozicijske informacije” (tabela 4).

Tabela 4

Tip iteratora

Pristup

Dereferenciranje

Iteracija

Poređenje

Izlazni iterator

(izlazni iterator)

Samo snimanje

Input Iterator

(ulazni iterator)

Samo čitanje

*, ->

==, !=

Iterator naprijed

(naprijed iterator)

Citaj i pisi

*, ->

==, !=

Dvosmjerni iterator(dvosmjerni iterator)

Citaj i pisi

*, ->

++, --

==, !=

Iterator slučajnog pristupa

(nasumično - pristupni iterator)

Citaj i pisi

*, ->,

++, --, +, -, +=, -=

==, !=, <, <=, >, >=

pg_update (resurs $connection , string $table_name , niz $data , niz $stanje [, int $options = PGSQL_DML_EXEC ])

pg_update() zamjenjuje zapise u tabeli koji ispunjavaju uslove stanje podaci podaci. Ako je dat argument opcije, podaci će biti transformirani pomoću funkcije pg_convert(), kojem će biti proslijeđeni parametri iz ovog argumenta.

Lista parametara

Resurs za povezivanje PostgreSQL baze podataka.

Table_name

Ime tabele u kojoj se ažuriraju zapisi.

Niz( niz), čiji ključevi odgovaraju imenima kolona tablice table_name, a vrijednosti će zamijeniti podatke u tim stupcima.

Stanje

Niz( niz), čiji ključevi odgovaraju imenima kolona tablice ime_tablice. Biće ažurirani samo oni redovi čije vrednosti polja odgovaraju vrednostima niza.

Opcije

Jedna od konstanti PGSQL_CONV_OPTS, PGSQL_DML_NO_CONV, PGSQL_DML_ESCAPE, PGSQL_DML_EXEC, PGSQL_DML_ASYNC ili PGSQL_DML_STRING, ili njihova kombinacija. Ako opcije sadrži PGSQL_DML_STRING, funkcija će vratiti string. Ako je instaliran PGSQL_DML_NO_CONV ili PGSQL_DML_ESCAPE, zatim funkciju pg_convert() nije interno pozvan.

Povratne vrijednosti

Povratak ISTINITO po uspješnom završetku ili FALSE u slučaju greške. Funkcija će vratiti string ( string), ako je konstantan PGSQL_DML_STRING sadržano u opcijama.

Primjeri

Primjer #1 Primjer upotrebe pg_update()

$db = pg_connect("dbname=foo" );
$data = array("field1" => "AA" , "field2" => "BB");

// Ovo je sigurno jer se $_POST automatski konvertuje
$res = pg_update ($db, "post_log", $_POST, $data);
if ($res) (
echo "Podaci ažurirani:$res\n" ;
) drugo (
echo "Mora da su poslani nevažeći podaci\n";
}
?>

pg_update (resurs $connection , string $table_name , niz $data , niz $stanje [, int $options = PGSQL_DML_EXEC ])

pg_update() zamjenjuje zapise u tabeli koji ispunjavaju uslove stanje podaci podaci. Ako je dat argument opcije, podaci će biti transformirani pomoću funkcije pg_convert(), kojem će biti proslijeđeni parametri iz ovog argumenta.

Lista parametara

Resurs za povezivanje PostgreSQL baze podataka.

Table_name

Ime tabele u kojoj se ažuriraju zapisi.

Niz( niz), čiji ključevi odgovaraju imenima kolona tablice table_name, a vrijednosti će zamijeniti podatke u tim stupcima.

Stanje

Niz( niz), čiji ključevi odgovaraju imenima kolona tablice ime_tablice. Biće ažurirani samo oni redovi čije vrednosti polja odgovaraju vrednostima niza.

Opcije

Jedna od konstanti PGSQL_CONV_OPTS, PGSQL_DML_NO_CONV, PGSQL_DML_ESCAPE, PGSQL_DML_EXEC, PGSQL_DML_ASYNC ili PGSQL_DML_STRING, ili njihova kombinacija. Ako opcije sadrži PGSQL_DML_STRING, funkcija će vratiti string. Ako je instaliran PGSQL_DML_NO_CONV ili PGSQL_DML_ESCAPE, zatim funkciju pg_convert() nije interno pozvan.

Povratne vrijednosti

Povratak ISTINITO po uspješnom završetku ili FALSE u slučaju greške. Funkcija će vratiti string ( string), ako je konstantan PGSQL_DML_STRING sadržano u opcijama.

Primjeri

Primjer #1 Primjer upotrebe pg_update()

$db = pg_connect("dbname=foo" );
$data = array("field1" => "AA" , "field2" => "BB");

// Ovo je sigurno jer se $_POST automatski konvertuje
$res = pg_update ($db, "post_log", $_POST, $data);
if ($res) (
echo "Podaci ažurirani:$res\n" ;
) drugo (
echo "Mora da su poslani nevažeći podaci\n";
}
?>

Postgres, koji je prvobitno razvio Odsjek za kompjuterske nauke UC Berkeley, bio je pionir mnogih objektno orijentiranih koncepata koji su sada dostupni u nekim komercijalnim bazama podataka. Pruža podršku za jezik SQL92/SQL99, integritet transakcije i proširivost tipa. PostgreSQL je potomak originalnog Berkeley koda otvorenog koda.

PostgreSQL je proizvod dostupan besplatno. Da biste koristili podršku za PostgreSQL, potreban vam je PostgreSQL 6.5 ili noviji. PostgreSQL 7.0 ili noviji - za sve funkcije PostgreSQL modula. PostgreSQL podržava mnoga kodiranja znakova, uključujući i višebajtna kodiranja znakova. Trenutnu verziju i informacije o PostgreSQL-u možete pronaći na http://www.postgresql.org/.

Da biste omogućili podršku za PostgreSQL, potrebna je opcija --with-pgsql[=DIR] prilikom kompajliranja PHP-a. Ako je modul dijeljenih objekata dostupan, PostgreSQL modul se može učitati korištenjem direktive ekstenzije u datoteci php.ini ili funkcije dl(). Podržane ini direktive su opisane u datoteci php.ini-dist isporučenoj uz izvorni kod distribucije.

Tabela 1. Promjena naziva funkcije
Staro imeNovo ime
pg_exec() pg_query()
pg_getlastoid() pg_last_oid()
pg_cmdtuples() pg_affected_rows()
pg_numrows() pg_num_rows()
pg_numfields() pg_num_fields()
pg_fieldname() pg_field_name()
pg_fieldsize() pg_field_size()
pg_fieldnum() pg_field_num()
pg_fieldprtlen() pg_field_prtlen()
pg_fieldisnull() pg_field_is_null()
pg_freeresult() pg_free_result()
pg_result() pg_fetch_result()
pg_loreadall() pg_lo_read_all()
pg_locreate() pg_lo_create()
pg_lounlink() pg_lo_unlink()
pg_loopen() pg_lo_open()
pg_loclose() pg_lo_close()
pg_loread() pg_lo_read()
pg_lowrite() pg_lo_write()
pg_loimport() pg_lo_import()
pg_loexport() pg_lo_export()

Nisu sve funkcije podržane u svim verzijama. Ovo zavisi od verzije vašeg libpq-a (PostgreSQL C klijent interfejs) i načina na koji je libpq preveden. Ako nedostaje funkcija, libpq ne podržava mogućnosti koje zahtijeva ta funkcija.

Takođe je važno da koristite libpq koji je noviji od PostgreSQL servera na koji se povezujete. Ako koristite libpq koji je stariji nego što PostgreSQL Server očekuje, imat ćete problema.

Od verzije 6.3 (02/03/1998), PostgreSQL podrazumevano koristi unix domensku utičnicu. TCP port NIJE otvoren prema zadanim postavkama. Tabela opisuje ove nove opcije povezivanja. Ovaj socket se može naći u /tmp/.s.PGSQL.5432. Ova opcija se može omogućiti sa "-i" zastavicom za upravnik pošte, a njegova vrijednost će biti: "slušajte TCP/IP utičnice kao i Unix domenske utičnice."

Tabela 2. Postmaster i PHP

Veza sa PostgreSQL serverom može se uspostaviti sa sljedećim parovima vrijednosti na komandnoj liniji: $conn = pg_connect("host=myHost port=myPort tty=myTTY options=myOptions dbname=myDB korisnik=mojakorisnička lozinka=moja lozinka ");

Prethodna sintaksa: $conn = pg_connect("host", "port", "options", "tty", "dbname") se više ne preporučuje.

Promenljive okruženja utiču na ponašanje PostgreSQL servera/klijenta. Na primjer, PostgreSQL modul će tražiti varijablu okruženja PGHOST ako ime hosta nije u nizu veze. Podržane varijable okruženja razlikuju se između verzija. Pogledajte Priručnik za PostgreSQL programera (libpq - varijable okruženja) za detalje.

Obavezno postavite varijable okruženja za odgovarajućeg korisnika. Koristite $_ENV ili getenv() da provjerite koje su varijable okruženja dostupne trenutnom procesu.

Počevši od PostgreSQL 7.1.0, možete pohraniti 1 GB u tekstualno polje. Starije verzije mogu imati ograničenja veličine bloka (podrazumevano je bilo 8 KB, maksimalno 32 KB, utvrđeno u vrijeme kompajliranja).

Da biste koristili sučelje velikog objekta (lo), morate uključiti lo funkcije unutar transakcijskog bloka. Transakcioni blok počinje SQL naredbom POČNI, i ako je transakcija bila ispravna, završava COMMIT ili KRAJ. Ako transakcija ne uspije, mora se zatvoriti sa ROLLBACK ili ABORT.

Ne biste trebali zatvoriti vezu sa PostgreSQL serverom prije zatvaranja velikog objekta.

Sadržaj pg_affeded_rows - vraća broj uključenih unosa (steam/torke) pg_cancel_query - otkazuje async zahtjev pg_client_encoding - prima kodiranje korisnika pg_close - zatvara postgreSQL konekciju PG_ConNNECT - otvara posteg Rescl konekciju bez obzira da li je pg. konekcija (ponovno povezivanje) pg_connection_status - dobiva status veze pg_convert - pretvara vrijednost asocijativnog niza u vrijednost prikladnu za SQL izraz pg_copy_from - umeće zapise u tablicu iz niza pg_copy_to - kopira tablicu u niz pg_dbname - dobiva ime baze podataka pg_delete - briše zapise pg_end_copy - sinkronizira se sa PostgreSQL pozadinom pg_escape_bytea - mnemonizira /escape binarni za tip bytea pg_escape_string - mnemonizira string za tip text/char pg_fetch_array - kao aranžman preuzima pg_fetch_array - kao aranžer preuzima pg_trieject kao objekt pg_reject fetch_result - vraća vrijednosti iz rezultirajućeg resursa pg_fetch_row - preuzima red kao niz koji se može prebrojati pg_field_is_null - provjerava da li je polje NULL pg_field_name - vraća ime polja pg_field_num - vraća broj imenovanog polja pg_field_prtlen - vraća veličinu za ispis pg_field_size - vraća veličinu interne memorije imenovanog polja pg_field_type - vraća naziv tipa za odgovarajući broj polja

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

pg_convert — Pretvara vrijednosti asocijativnog niza u prihvatljive vrijednosti za korištenje u SQL upitima

Opis

pg_convert (resurs $connection , string $table_name , niz $assoc_array [, int $options = 0]) : niz

pg_convert() provjerava i pretvara vrijednosti iz assoc_array u one prihvatljive za SQL server. Tablica table_name mora postojati, a broj stupaca u njoj ne smije biti manji od vrijednosti u nizu assoc_array. Imena kolona u tabeli table_name moraju odgovarati ključevima niza assoc_array, a tipovi podataka vrednosti niza takođe moraju odgovarati tipovima podataka odgovarajućih kolona. Ako je konverzija uspješna, funkcija vraća niz konvertiranih vrijednosti, u suprotnom vraća FALSE.

Komentar:

Od PHP 5.6.0, logičke vrijednosti su dozvoljene. Konvertuju se u PostgreSQL boolean tip. Podržane su i reprezentacije nizova logičke vrijednosti. NULL se konvertuje u PostgreSQL NULL.

Prije PHP 5.6.0, ako tablica table_name sadrži boolean polja, nemojte koristiti konstantu ISTINITO kao vrijednost polja table_name za ova polja. Biće konvertovan u string "TRUE", što je nevažeća vrednost za logička polja u PostgreSQL-u. Koristite vrijednosti "t", "true", "1", "y", "yes".

Lista parametara

Resurs za povezivanje PostgreSQL baze podataka.

Table_name

Ime tabele baze podataka.

Assoc_array

Podaci za konverziju.

Opcije

Jedna od konstanti PGSQL_CONV_IGNORE_DEFAULT, PGSQL_CONV_FORCE_NULL ili PGSQL_CONV_IGNORE_NOT_NULL, ili njihova kombinacija.

Povratne vrijednosti

Niz( niz), koji sadrži konvertirane podatke, ili FALSE u slučaju greške.

Primjeri

Primjer #1 Primjer upotrebe pg_convert()

$dbconn = pg_connect ( "dbname=foo");

$tmp = niz (
"author" => "Joe Thackery" ,
"godina" => 2005,
"title" => "Moj život, Joe Thackery"
);

$vals = pg_convert ($dbconn, "autori", $tmp);
?>