PostgreSQL funkcie. LXXX. Funkcie PostgreSQL Veľkosť databázy

Štandardná knižnica šablón (Štandardná knižnica šablón , STL) je súčasťou štandardnej knižnice jazyka C++. Zahŕňa implementácie najbežnejšie používaných kontajnerov a algoritmov, čo šetrí programátorov od rutiny ich opätovného prepisovania. Pri vývoji kontajnerov a algoritmov, ktoré sa na ne vzťahujú (ako je odstraňovanie identických prvkov, triedenie, vyhľadávanie atď.), je často potrebné obetovať všestrannosť alebo výkon. Vývojári STL si však dali za úlohu urobiť knižnicu efektívnou a univerzálnou. Na vyriešenie tohto problému boli použité také univerzálne prostriedky jazyka C++ ako šablóny a preťaženie operátorov. V nasledujúcej prezentácii sa budeme spoliehať na implementáciu STL dodanú spoločnosťou Microsoft spolu s kompilátorom Visual C++ 6.0. Väčšina z vyššie uvedeného však bude platiť aj pre implementácie STL inými kompilátormi.

Hlavnými pojmami v STL sú pojmy kontajner (kontajner), algoritmus (algoritmus) a iterátor (iterátor).

Kontajnerje úložisko objektov (vstavané aj používateľom definované typy). Typicky sú kontajnery implementované ako šablóny tried. Najjednoduchšie typy kontajnerov (statické a dynamické polia) sú zabudované priamo v jazyku C++. Okrem toho štandardná knižnica obsahuje implementácie kontajnerov, ako sú vektor, zoznam, front, mapa, množina a niektoré ďalšie.

Algoritmusje funkcia na manipuláciu s objektmi obsiahnutými v kontajneri. Typickými príkladmi algoritmov sú triedenie a vyhľadávanie. STL implementuje asi 60 algoritmov, ktoré možno použiť na rôzne kontajnery, vrátane polí zabudovaných do jazyka C++.

Iterátorje abstrakcia ukazovateľa, teda objektu, ktorý môže odkazovať na iné objekty obsiahnuté v kontajneri. Hlavnými funkciami iterátora je poskytnúť prístup k objektu, na ktorý odkazuje (dereferencovanie) a presunúť sa z jedného prvku kontajnera do druhého (iterácia, odtiaľ názov iterátor). Pre vstavané kontajnery sa ako iterátory používajú bežné ukazovatele. V prípade zložitejších kontajnerov sú iterátory implementované ako triedy s množinou preťažených operátorov.

Okrem označených prvkov v STL existuje množstvo pomocné pojmy ; Niektoré z nich by ste mali spoznať aj vy.

Prideľovač(allocator) je objekt zodpovedný za prideľovanie pamäte pre prvky kontajnera. Ku každému štandardnému kontajneru je priradený alokátor (jeho typ sa odovzdáva ako jeden z parametrov šablóny). Ak nejaký algoritmus potrebuje alokovať pamäť pre prvky, musí to urobiť prostredníctvom alokátora. V tomto prípade si môžete byť istí, že distribuované objekty budú správne zničené.

STL obsahuje štandardnú triedu alokátora (popísanú v súbore xmemory). Toto štandardne používajú všetky kontajnery implementované v STL. Používateľ však môže implementovať svoju vlastnú triedu. Toto je veľmi zriedka potrebné, ale niekedy sa to dá urobiť na účely efektívnosti alebo ladenia.

Zastavme sa podrobnejšie pri úvahách o predstavených pojmoch.

Kontajnery . Každý kontajner poskytuje presne definované rozhranie, prostredníctvom ktorého s ním budú interagovať algoritmy. Toto rozhranie poskytujú iterátory špecifické pre kontajnery. Je dôležité zdôrazniť, že na interakciu medzi algoritmami a kontajnermi sa nepoužívajú žiadne ďalšie členské funkcie. Je to spôsobené tým, že musia fungovať štandardné algoritmy, vrátane vstavaných kontajnerov jazyka C++, ktoré majú iterátory (ukazovatele), ale nič iné. Pri vytváraní vlastného kontajnera je teda implementácia iterátora úplným minimom.

Každý kontajner implementuje špecifický typ iterátora. Týmto sa vyberie najfunkčnejší typ iterátora, ktorý možno efektívne implementovať pre daný kontajner. „Efektívny“ znamená, že rýchlosť vykonávania operácií na iterátore by nemala závisieť od počtu prvkov v kontajneri. Napríklad iterátor náhodného prístupu je implementovaný pre vektor a obojsmerný iterátor je implementovaný pre zoznam. Pretože rýchlosť operácie zoznamu je lineárna s jeho dĺžkou, iterátor náhodného prístupu pre zoznam nie je implementovaný.

Bez ohľadu na skutočnú organizáciu kontajnera (vektor, zoznam, strom) možno prvky v ňom uložené považovať za postupnosť. Iterátor prvého prvku v tejto sekvencii vráti funkcia begin() a iterátor prvku nasledujúceho za posledným vráti funkcia end(). To je veľmi dôležité, pretože všetky algoritmy v STL pracujú presne so sekvenciami určenými iterátormi začiatku a konca.

Okrem bežných iterátorov v STL existujú reverzné iterátory ( reverzný iterátor ). Spätný iterátor sa líši v tom, že iteruje sekvenciou prvkov v kontajneri v opačnom poradí. Inými slovami, operácie + a - sú obrátené. To umožňuje, aby sa algoritmy aplikovali na priame aj reverzné sekvencie prvkov. Napríklad pomocou funkcie find môžete vyhľadávať prvky zo „začiatku“ aj „konca“ kontajnera.

V STL sú kontajnery rozdelené do troch hlavných skupín (tabuľka 2): sekvenčné kontajnery, asociatívne kontajnery a adaptéry kontajnerov. Prvé dve skupiny sú spojené do kontajnerov prvej triedy.

tabuľka 2

Kontajnerová trieda STL

Popis

Sekvenčné kontajnery

vektor

Dynamické pole

deque

Obojsmerný rad

zoznam

Obojsmerný lineárny zoznam

Asociatívne kontajnery

Asociačný kontajner s jedinečnými kľúčmi

multiset

Asociačný kontajner umožňujúci duplicitné kľúče

Asociačný kontajner pre sady jedinečných prvkov

multimapa

Asociačný kontajner pre sady s duplicitnými prvkami

Kontajnerové adaptéry

stoh

Štandardný zásobník

frontu

Štandardný rad

prioritný_front

Prioritný rad

Každá trieda kontajnera implementovaná v STL , popisuje množinu typov spojených s kontajnerom. Rovnaký postup by ste mali dodržiavať aj pri písaní vlastných kontajnerov. Tu je zoznam najdôležitejších typov:

value_type - typ prvku;

size_type - typ na uloženie počtu prvkov (zvyčajne size_t);

iterátor - iterátor pre prvky kontajnera;

key_type - typ kľúča (v asociatívnom kontajneri).

Okrem typov môžeme rozlíšiť množinu funkcií, ktoré implementuje takmer každý kontajner v STL (tabuľka 3). Nie sú potrebné na interakciu s algoritmami, ale ich implementácia zlepšuje zameniteľnosť kontajnerov v programe. STL je navrhnutý tak, aby kontajnery poskytovali podobnú funkčnosť.

Tabuľka 3

Spoločné metódy všetkých STL kontajnerov

Popis

predvolený konštruktor

Predvolený konštruktor. Typicky má kontajner niekoľko dizajnérov

kopírovať konštruktor

Kopírovať konštruktor

deštruktor

Deštruktor

prázdny

Ak v kontajneri nie sú žiadne prvky, vráti hodnotu true, v opačnom prípade vráti hodnotu false

max_size

Vráti maximálny počet prvkov pre kontajner

veľkosť

Vráti počet prvkov v kontajneri v aktuálnom čase

operátor =

Priraďuje jeden kontajner druhému

operátor<

Vráti hodnotu true, ak je prvý kontajner menší ako druhý, v opačnom prípade vráti hodnotu false

operátor<=

Vráti hodnotu true, ak prvý kontajner nie je väčší ako druhý, v opačnom prípade vráti hodnotu false

operátor >

Vráti hodnotu true, ak je prvý kontajner väčší ako druhý, v opačnom prípade vráti hodnotu false

operátor >=

Vráti hodnotu true, ak prvý kontajner nie je menší ako druhý, v opačnom prípade vráti hodnotu false

operátor ==

Vráti hodnotu true, ak sú porovnávané kontajnery rovnaké, v opačnom prípade vráti hodnotu false

operátor !=

Ak porovnávané kontajnery nie sú rovnaké, vráti hodnotu true, v opačnom prípade vráti hodnotu false

vymeniť

Vymieňa prvky dvoch kontajnerov

Funkcie dostupné iba v kontajneroch prvej triedy

začať

Dve verzie tejto funkcie vracajú buď iterátor alebo const_iterator, ktorý odkazuje na prvý prvok kontajnera

Dve verzie tejto funkcie vracajú buď iterátor alebo const_iterator, ktorý odkazuje na ďalšiu pozíciu po konci kontajnera

začať

Dve verzie tejto funkcie vrátia buď reverse_iterator alebo reverse_const_iterator , ktorý odkazuje na posledný prvok kontajnera

pretrhnúť

Dve verzie tejto funkcie vracajú buď reverse_iterator alebo reverse_const_iterator, ktorý odkazuje na pozíciu pred prvým prvkom kontajnera

vložiť, vymazať,

Umožňuje vložiť alebo odstrániť prvok (prvky) uprostred sekvencie

Koncová tabuľka 3

jasný

Odstráni všetky prvky z kontajnera

vpredu, vzadu

push_back, pop_back

Umožňuje pridať alebo odstrániť posledný prvok v sekvencii

push_front, pop_front

Umožňuje pridať alebo odstrániť prvý prvok v poradí

Iterátory sa zvyčajne vytvárajú ako priatelia tried, na ktorých pracujú, čo umožňuje priamy prístup k súkromným údajom týchto tried. K jednému kontajneru môže byť priradených viacero iterátorov, z ktorých každý si uchováva svoje vlastné „pozičné informácie“ (tabuľka 4).

Tabuľka 4

Typ iterátora

Prístup

Dereferencovanie

Iterácia

Porovnanie

Iterátor výstupu

(výstupný iterátor)

Iba nahrávanie

Iterátor vstupu

(Iterátor vstupu)

Iba čítanie

*, ->

==, !=

Dopredný iterátor

(dopredný iterátor)

Čítaj a píš

*, ->

==, !=

Obojsmerný iterátor(obojsmerný iterátor)

Čítaj a píš

*, ->

++, --

==, !=

Iterátor náhodného prístupu

(náhodný iterátor)

Čítaj a píš

*, ->,

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

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

pg_update (zdroj $pripojenie , reťazec $názov_tabuľky , pole $data , pole $stav [, int $options = PGSQL_DML_EXEC ])

pg_update() nahrádza záznamy v tabuľke, ktoré spĺňajú podmienky staveúdajov údajov. Ak je daný argument možnosti, budú údaje transformované funkciou pg_convert(), ktorému budú odovzdané parametre z tohto argumentu.

Zoznam parametrov

Zdroj pripojenia k databáze PostgreSQL.

Table_name

Názov tabuľky, v ktorej sa aktualizujú záznamy.

Pole( pole), ktorých kľúče zodpovedajú názvom stĺpcov tabuľky table_name a hodnoty nahradia údaje v týchto stĺpcoch.

Podmienka

Pole( pole), ktorého kľúče zodpovedajú názvom stĺpcov tabuľky názov_tabuľky . Aktualizované budú iba tie riadky, ktorých hodnoty polí sa zhodujú s hodnotami poľa.

možnosti

Jedna zo stálic PGSQL_CONV_OPTS, PGSQL_DML_NO_CONV, PGSQL_DML_ESCAPE, PGSQL_DML_EXEC, PGSQL_DML_ASYNC alebo PGSQL_DML_STRING alebo ich kombináciou. Ak možnosti obsahujú PGSQL_DML_STRING, funkcia vráti reťazec. Ak je nainštalovaný PGSQL_DML_NO_CONV alebo PGSQL_DML_ESCAPE, potom funkciu pg_convert() nevolané interne.

Návratové hodnoty

Návraty PRAVDA po úspešnom absolvovaní resp FALSE v prípade chyby. Funkcia vráti reťazec ( reťazec), ak je konštantná PGSQL_DML_STRING obsiahnuté v možnostiach.

Príklady

Príklad #1 Príklad použitia pg_update()

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

// Toto je bezpečné, pretože $_POST sa automaticky konvertuje
$res = pg_update ($db, "post_log", $_POST, $data);
ak ($res) (
ozvena "Údaje aktualizované:$res\n" ;
) inak (
ozvena "Museli byť odoslané neplatné údaje\n";
}
?>

pg_update (zdroj $pripojenie , reťazec $názov_tabuľky , pole $data , pole $stav [, int $options = PGSQL_DML_EXEC ])

pg_update() nahrádza záznamy v tabuľke, ktoré spĺňajú podmienky staveúdajov údajov. Ak je daný argument možnosti, budú údaje transformované funkciou pg_convert(), ktorému budú odovzdané parametre z tohto argumentu.

Zoznam parametrov

Zdroj pripojenia k databáze PostgreSQL.

Table_name

Názov tabuľky, v ktorej sa aktualizujú záznamy.

Pole( pole), ktorých kľúče zodpovedajú názvom stĺpcov tabuľky table_name a hodnoty nahradia údaje v týchto stĺpcoch.

Podmienka

Pole( pole), ktorého kľúče zodpovedajú názvom stĺpcov tabuľky názov_tabuľky . Aktualizované budú iba tie riadky, ktorých hodnoty polí sa zhodujú s hodnotami poľa.

možnosti

Jedna zo stálic PGSQL_CONV_OPTS, PGSQL_DML_NO_CONV, PGSQL_DML_ESCAPE, PGSQL_DML_EXEC, PGSQL_DML_ASYNC alebo PGSQL_DML_STRING alebo ich kombináciou. Ak možnosti obsahujú PGSQL_DML_STRING, funkcia vráti reťazec. Ak je nainštalovaný PGSQL_DML_NO_CONV alebo PGSQL_DML_ESCAPE, potom funkciu pg_convert() nevolané interne.

Návratové hodnoty

Návraty PRAVDA po úspešnom absolvovaní resp FALSE v prípade chyby. Funkcia vráti reťazec ( reťazec), ak je konštantná PGSQL_DML_STRING obsiahnuté v možnostiach.

Príklady

Príklad #1 Príklad použitia pg_update()

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

// Toto je bezpečné, pretože $_POST sa automaticky konvertuje
$res = pg_update ($db, "post_log", $_POST, $data);
ak ($res) (
ozvena "Údaje aktualizované:$res\n" ;
) inak (
ozvena "Museli byť odoslané neplatné údaje\n";
}
?>

Postgres, pôvodne vyvinutý oddelením počítačovej vedy UC Berkeley, bol priekopníkom mnohých objektovo orientovaných konceptov, ktoré sú teraz dostupné v niektorých komerčných databázach. Poskytuje podporu pre jazyk SQL92/SQL99, integritu transakcií a rozšíriteľnosť typov. PostgreSQL je open source potomok pôvodného kódu Berkeley.

PostgreSQL je produkt dostupný zadarmo. Ak chcete používať podporu PostgreSQL, potrebujete PostgreSQL 6.5 alebo novší. PostgreSQL 7.0 alebo novší – pre všetky funkcie modulu PostgreSQL. PostgreSQL podporuje mnoho kódovaní znakov, vrátane viacbajtových kódovaní znakov. Aktuálnu verziu a informácie o PostgreSQL nájdete na http://www.postgresql.org/.

Ak chcete povoliť podporu PostgreSQL, pri kompilácii PHP je potrebná voľba --with-pgsql[=DIR]. Ak je dostupný modul zdieľaných objektov, modul PostgreSQL je možné načítať pomocou direktívy rozšírenia v súbore php.ini alebo funkcie dl(). Podporované direktívy ini sú popísané v súbore php.ini-dist dodávanom so zdrojovým kódom distribúcie.

Stôl 1. Zmeny názvu funkcie
Staré menoNové meno
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()

Nie všetky funkcie sú podporované vo všetkých zostavách. Závisí to od verzie vašej knižnice libpq (rozhranie klienta PostgreSQL C) a od spôsobu kompilácie knižnice libpq. Ak funkcia chýba, libpq nepodporuje schopnosti požadované touto funkciou.

Je tiež dôležité, aby ste používali knižnicu libpq, ktorá je novšia ako server PostgreSQL, ku ktorému sa pripájate. Ak používate libpq, ktorý je starší ako PostgreSQL Server očakáva, budete mať problémy.

Od verzie 6.3 (02/03/1998) PostgreSQL štandardne používa soket domény unix. TCP port NIE JE štandardne otvorený. Tabuľka popisuje tieto nové možnosti pripojenia. Tento socket možno nájsť v /tmp/.s.PGSQL.5432. Táto možnosť môže byť povolená pomocou príznaku "-i". vedúci pošty, a jeho hodnota bude: "počúvať TCP/IP sockety ako aj unixové doménové sockety."

Tabuľka 2. Postmaster a PHP

Pripojenie k serveru PostgreSQL je možné vytvoriť pomocou nasledujúcich párov hodnôt na príkazovom riadku: $conn = pg_connect("host=myHost port=myPort tty=mojeTTY options=myOptions dbname=myDB user=moje heslo používateľa=moje heslo ");

Predchádzajúca syntax: $conn = pg_connect("hostiteľ", "port", "možnosti", "tty", "názov databázy") sa už neodporúča.

Premenné prostredia ovplyvňujú správanie servera/klienta PostgreSQL. Napríklad modul PostgreSQL bude hľadať premennú prostredia PGHOST, ak názov hostiteľa nie je v reťazci pripojenia. Podporované premenné prostredia sa medzi verziami líšia. Podrobnosti nájdete v Príručke programátora PostgreSQL (libpq - Environment Variables).

Uistite sa, že ste nastavili premenné prostredia pre príslušného používateľa. Použite $_ENV alebo getenv() aby ste skontrolovali, ktoré premenné prostredia sú dostupné pre aktuálny proces.

Počnúc PostgreSQL 7.1.0 môžete uložiť 1 GB do textového poľa. Staršie verzie môžu mať obmedzenia veľkosti bloku (predvolená hodnota bola 8 KB, maximum bolo 32 KB, určené v čase kompilácie).

Ak chcete použiť rozhranie veľkých objektov (lo), musíte do transakčného bloku zahrnúť funkcie lo. Transakčný blok začína príkazom SQL ZAČAŤ a ak bola transakcia správna, skončí ZAMESTNAŤ SA alebo KONIEC. Ak transakcia zlyhá, musí sa uzavrieť s ROLLBACK alebo PRERUŠIŤ.

Pred zatvorením veľkého objektu by ste nemali zatvoriť pripojenie k serveru PostgreSQL.

Obsah pg_affeded_rows - vráti počet zapojených záznamov (steam/n-tice) pg_cancel_query - zruší asynchrónnu požiadavku pg_client_encoding - prijme zákaznícke kódovanie pg_close - zatvorí postgreSQL pripojenie PG_ConNNECT - otvorí posteg pripojenie Rescl PG_ConNECTION_BUSY -s obnoví, či je pripojenie zatvorené alebo nie connection (reconnect) pg_connection_status - získa stav pripojenia pg_convert - prevedie hodnotu asociatívneho poľa na hodnotu vhodnú pre príkaz SQL pg_copy_from - vloží záznamy do tabuľky z poľa pg_copy_to - skopíruje tabuľku do poľa pg_dbname - získa názov databázy pg_delete - vymaže záznamy pg_end_copy - synchronizuje sa s backendom PostgreSQL pg_escape_bytea - mnemonizuje /escape binárne pre typ bytea pg_escape_string - mnemonizuje reťazec pre typ text/char pg_fetch_array - načíta riadok ako pole pg_fetch_object návratový objekt ako pole pfetch ​​Hodnoty načítanie pfet z výsledného zdroja pg_fetch_row - získa riadok ako spočítateľné pole pg_field_is_null - skontroluje, či je pole NULOVÝ pg_field_name - vráti názov poľa pg_field_num - vráti číslo pomenovaného poľa pg_field_prtlen - vráti veľkosť pre tlač pg_field_size - vráti veľkosť vnútorného úložiska pomenovaného poľa pg_field_type - vráti názov typu pre zodpovedajúce číslo poľa

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

pg_convert — Konvertuje hodnoty asociatívneho poľa na prijateľné hodnoty na použitie v dotazoch SQL

Popis

pg_convert (zdroj $pripojenie , reťazec $názov_tabuľky , pole $assoc_array [, int $options = 0]): pole

pg_convert() kontroluje a konvertuje hodnoty z assoc_array na hodnoty prijateľné pre SQL server. Tabuľka table_name musí existovať a počet stĺpcov v nej nesmie byť menší ako hodnoty v poli assoc_array. Názvy stĺpcov v tabuľke table_name sa musia zhodovať s kľúčmi poľa assoc_array a typy údajov hodnôt poľa sa tiež musia zhodovať s typmi údajov zodpovedajúcich stĺpcov. Ak je konverzia úspešná, funkcia vráti pole konvertovaných hodnôt, inak vráti FALSE.

Komentujte:

Od PHP 5.6.0 sú povolené boolovské hodnoty. Sú konvertované na booleovský typ PostgreSQL. Podporované sú aj reťazcové reprezentácie boolovskej hodnoty. NULOVÝ je skonvertovaný na PostgreSQL NULL.

Pred PHP 5.6.0, ak tabuľka table_name obsahuje boolovské polia, nepoužívajte konštantu PRAVDA ako hodnotu poľa názov_tabulky pre tieto polia. Skonvertuje sa na reťazec „TRUE“, čo je neplatná hodnota pre boolovské polia v PostgreSQL. Použite hodnoty „t“, „true“, „1“, „y“, „yes“.

Zoznam parametrov

Zdroj pripojenia k databáze PostgreSQL.

Table_name

Názov databázovej tabuľky.

Assoc_array

Údaje na konverziu.

možnosti

Jedna zo stálic PGSQL_CONV_IGNORE_DEFAULT, PGSQL_CONV_FORCE_NULL alebo PGSQL_CONV_IGNORE_NOT_NULL alebo ich kombináciou.

Návratové hodnoty

Pole( pole), obsahujúci konvertované údaje, príp FALSE v prípade chyby.

Príklady

Príklad #1 Príklad použitia pg_convert()

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

$tmp = pole(
"autor" => "Joe Thackery" ,
"rok" => 2005,
"title" => "Môj život, od Joe Thackery"
);

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