PostgreSQL függvények. LXXX. A PostgreSQL szolgáltatások adatbázis mérete

Szabványos sablonkönyvtár ( Szabványos sablonkönyvtár , STL) szerepel a C++ nyelv szabványos könyvtárában. Tartalmazza a leggyakrabban használt konténerek és algoritmusok implementációit, ami megkíméli a programozókat az újra és újra átírási rutintól. A konténerek és a rájuk alkalmazott algoritmusok fejlesztésekor (például azonos elemek eltávolítása, rendezés, keresés stb.) gyakran fel kell áldozni a sokoldalúságot vagy a teljesítményt. Az STL fejlesztői azonban azt a feladatot tűzték ki maguk elé, hogy a könyvtárat egyszerre tegyék hatékonnyá és univerzálissá. A probléma megoldására a C++ nyelv olyan univerzális eszközeit alkalmazták, mint a sablonok és az operátor túlterhelés. A következő előadásban a Microsoft által biztosított STL implementációra, valamint a Visual C++ 6.0 fordítóra fogunk támaszkodni. A fentiek többsége azonban más fordítók STL-megvalósításaira is igaz.

Az STL fő fogalmai a konténer (container), az algoritmus (algoritmus) és az iterátor (iterátor) fogalmak.

Tartályobjektumok tárolója (beépített és felhasználó által definiált típusok egyaránt). A konténereket általában osztálysablonként valósítják meg. A legegyszerűbb konténertípusok (statikus és dinamikus tömbök) közvetlenül a C++ nyelvbe vannak beépítve. Ezenkívül a szabványos könyvtár olyan konténerek megvalósítását tartalmazza, mint a vektor, lista, várólista, térkép, halmaz és néhány más.

Algoritmusegy tárolóban lévő objektumok manipulálására szolgáló funkció. Tipikus példák az algoritmusokra a rendezés és a keresés. Az STL mintegy 60 algoritmust valósít meg, amelyek különféle konténerekre alkalmazhatók, beleértve a C++ nyelvbe épített tömböket is.

Iterátoregy mutató absztrakciója, vagyis egy olyan objektum, amely a tárolóban lévő más objektumokra hivatkozhat. Az iterátor fő funkciója, hogy hozzáférést biztosítson ahhoz az objektumhoz, amelyre hivatkozik (hivatkozás megszüntetése), valamint az egyik konténerelemről a másikra való átlépés (iteráció, innen az iterátor név). A beépített tárolóknál a szokásos mutatókat használjuk iterátorként. Bonyolultabb konténerek esetén az iterátorokat túlterhelt operátorokkal rendelkező osztályokként valósítják meg.

Az STL-ben megjelölt elemeken kívül van egy szám is segédfogalmak ; Néhányat meg is kell ismernie.

Allokátor(allokátor) egy objektum, amely a tárolóelemek memóriafoglalásáért felelős. Minden szabványos tárolóhoz hozzá van rendelve egy allokátor (a típusát a rendszer a sablonparaméterek egyikeként adja át). Ha valamilyen algoritmusnak memóriát kell lefoglalnia az elemekhez, akkor ezt egy allokátoron keresztül kell megtennie. Ebben az esetben biztos lehet benne, hogy az elosztott objektumok megfelelően megsemmisülnek.

Az STL tartalmaz egy szabványos allokátor osztályt (leírása az xmemory fájlban található). Alapértelmezés szerint az STL-ben implementált összes tároló ezt használja. A felhasználó azonban megvalósíthatja saját osztályát. Erre nagyon ritkán van szükség, de néha megtehető hatékonyság vagy hibakeresés céljából.

Foglalkozzunk részletesebben a bevezetett fogalmak mérlegelésével.

Konténerek . Minden tároló egy szigorúan meghatározott felületet biztosít, amelyen keresztül az algoritmusok kölcsönhatásba lépnek vele. Ezt a felületet a tárolóspecifikus iterátorok biztosítják. Fontos hangsúlyozni, hogy nem használnak további tagfüggvényeket az algoritmusok és a tárolók közötti interakcióhoz. Ez azért van így, mert a szabványos algoritmusoknak működniük kell, beleértve a C++ nyelv beépített konténereit is, amelyekben iterátorok (mutatók) vannak, de semmi más. Így saját konténer létrehozásakor az iterátor megvalósítása a minimum.

Minden tároló egy adott típusú iterátort valósít meg. Ez kiválasztja a legfunkcionálisabb iterátortípust, amely hatékonyan megvalósítható egy adott tárolóhoz. A „hatékony” azt jelenti, hogy az iterátoron végzett műveletek sebessége nem függhet a tárolóban lévő elemek számától. Például egy véletlen hozzáférésű iterátor van megvalósítva egy vektorhoz, és egy kétirányú iterátor egy listához. Mivel egy listaművelet sebessége lineáris a hosszával, a lista véletlen elérésű iterátora nincs megvalósítva.

A tároló tényleges felépítésétől (vektor, lista, fa) függetlenül a benne tárolt elemek sorozatnak tekinthetők. A sorozat első elemének iterátorát a begin() függvény, az utolsót követő elem iterátorát pedig az end() függvény adja vissza. Ez nagyon fontos, mivel az STL összes algoritmusa pontosan a kezdő és záró iterátorok által meghatározott szekvenciákkal működik.

Az STL-ben a szokásos iterátorok mellett vannak fordított iterátorok ( fordított iterátor ). A fordított iterátor abban különbözik, hogy fordított sorrendben iterálja végig a tároló elemeinek sorozatát. Más szóval, a + és - műveletek felcserélődnek. Ez lehetővé teszi az algoritmusok alkalmazását mind közvetlen, mind fordított elemek sorozatára. Például a kereső funkcióval egy tároló „elejétől” és „végétől” is kereshet elemeket.

Az STL-ben a tárolók három fő csoportra oszthatók (2. táblázat): sorozattárolók, asszociatív tárolók és tárolóadapterek. Az első két csoportot első osztályú konténerekké egyesítik.

2. táblázat

Konténer osztály STL

Leírás

Sorozattárolók

vektor

Dinamikus tömb

deque

Kétirányú sor

lista

Kétirányú lineáris lista

Asszociatív konténerek

Asszociatív tároló egyedi kulcsokkal

multiset

Asszociatív tároló, amely lehetővé teszi a kulcsok megkettőzését

Asszociatív tároló egyedi elemek halmazaihoz

multimap

Asszociatív tároló duplikált elemeket tartalmazó készletekhez

Konténer adapterek

Kazal

Szabványos verem

sorban

Normál sor

prioritás_sor

Elsőbbségi sor

Minden tárolóosztály implementálva STL , leírja a tárolóhoz társított típuskészletet. Ugyanezt a gyakorlatot kell követnie a saját konténerek írásakor. Íme a legfontosabb típusok listája:

érték_típus - elem típusa;

méret típus - egy típus az elemek számának tárolására (általában size_t);

iterátor - konténerelemek iterátora;

kulcs_típus - kulcstípus (asszociatív tárolóban).

A típusokon kívül megkülönböztethetünk egy olyan funkciókészletet, amelyet szinte minden STL konténer megvalósít (3. táblázat). Nem szükségesek az algoritmusokkal való interakcióhoz, de megvalósításuk javítja a konténerek felcserélhetőségét a programban. Az STL-t úgy tervezték, hogy a konténerek hasonló funkcionalitást biztosítsanak.

3. táblázat

Az összes STL-tároló közös módszerei

Leírás

alapértelmezett konstruktor

Alapértelmezett konstruktor. Egy konténerben általában több is van tervezők

másolat konstruktor

Konstruktor másolása

pusztító

Pusztító

üres

Igaz értéket ad vissza, ha nincsenek elemek a tárolóban, ellenkező esetben false értéket ad vissza

max_size

Egy tároló elemeinek maximális számát adja vissza

méret

A tárolóban lévő elemek számát adja vissza az aktuális időpontban

operátor =

Egy tárolót hozzárendel a másikhoz

operátor<

Igaz értéket ad vissza, ha az első tároló kisebb, mint a második, egyébként false értéket ad vissza

operátor<=

Igaz értéket ad vissza, ha az első tároló nem nagyobb, mint a második, egyébként false értéket ad vissza

operátor >

Igaz értéket ad vissza, ha az első tároló nagyobb, mint a második, ellenkező esetben false értéket ad vissza

operátor >=

Igaz értéket ad vissza, ha az első tároló nem kisebb, mint a második, egyébként false értéket ad vissza

operátor ==

Igaz értéket ad vissza, ha az összehasonlított tárolók egyenlőek, hamis értéket egyébként

operátor !=

Igaz értéket ad vissza, ha az összehasonlított tárolók nem egyenlőek, egyébként hamis értéket ad vissza

csere

Felcseréli két konténer elemeit

A funkciók csak első osztályú konténerekben érhetők el

kezdődik

A függvény két változata egy iterátort vagy egy const_iteratort ad vissza, ami a tároló első elemére utal

A függvény két változata egy iterátort vagy egy const_iteratort ad vissza, ami a tároló vége után következő pozícióra utal

rbegin

Ennek a függvénynek két verziója is visszatér reverse_iterator vagy reverse_const_iterator , amely a tároló utolsó elemére utal

rend

Ennek a függvénynek két változata a reverse_iterator vagy a reverse_const_iterator értéket adja vissza, ami a tároló első eleme előtti pozícióra utal.

beszúrni, törölni,

Lehetővé teszi elem(ek) beszúrását vagy eltávolítását a sorozat közepén

Vég táblázat 3

egyértelmű

Eltávolítja az összes elemet a tárolóból

eleje hátulja

push_back, pop_back

Lehetővé teszi a sorozat utolsó elemének hozzáadását vagy eltávolítását

push_front, pop_front

Lehetővé teszi a sorozat első elemének hozzáadását vagy eltávolítását

Az iterátorok jellemzően az általuk működtetett osztályok barátaiként jönnek létre, lehetővé téve a közvetlen hozzáférést ezen osztályok privát adataihoz. Egyetlen tárolóhoz több iterátor is társítható, amelyek mindegyike megőrzi a saját „pozíciós információit” (4. táblázat).

4. táblázat

Iterátor típus

Hozzáférés

Hivatkozás megszüntetése

Ismétlés

Összehasonlítás

Kimeneti iterátor

(kimeneti iterátor)

Csak felvétel

Bemeneti iterátor

(beviteli iterátor)

Csak olvasni

*, ->

==, !=

Továbbító iterátor

(további iterátor)

Olvass és írj

*, ->

==, !=

Kétirányú iterátor(kétirányú iterátor)

Olvass és írj

*, ->

++, --

==, !=

Véletlen hozzáférésű iterátor

(véletlenszerű hozzáférésű iterátor)

Olvass és írj

*, ->,

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

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

pg_update (erőforrás $kapcsolat , string $tábla_neve , tömb $adat , tömb $feltétel [, int $opciók = PGSQL_DML_EXEC ])

pg_update() lecseréli a táblázatban a feltételeknek megfelelő rekordokat feltétel adat adat. Ha egy érvet adnak lehetőségek, az adatokat a függvény átalakítja pg_convert(), amelyre az argumentum paraméterei kerülnek átadásra.

A paraméterek listája

PostgreSQL adatbázis-kapcsolati erőforrás.

Táblázat_neve

A tábla neve, amelyben a rekordok frissülnek.

Sor( sor), amelynek kulcsai megfelelnek a táblázat_neve tábla oszlopainak nevének, és az értékek lecserélik az ezekben az oszlopokban lévő adatokat.

Feltétel

Sor( sor), melynek kulcsai a táblanév tábla oszlopainak nevének felelnek meg. Csak azok a sorok frissülnek, amelyek mezőértékei egyeznek a tömbértékekkel.

Lehetőségek

Az egyik állandó PGSQL_CONV_OPTS, PGSQL_DML_NO_CONV, PGSQL_DML_ESCAPE, PGSQL_DML_EXEC, PGSQL_DML_ASYNC vagy PGSQL_DML_STRING, vagy ezek kombinációja. Ha az opciók tartalmazzák PGSQL_DML_STRING, a függvény egy karakterláncot ad vissza. Ha telepítve van PGSQL_DML_NO_CONV vagy PGSQL_DML_ESCAPE, majd a függvény pg_convert() belsőleg nem hívják.

Visszatérési értékek

Visszatér IGAZ sikeres teljesítése esetén ill HAMIS hiba esetén. A függvény visszaadja a karakterláncot ( húr), ha állandó PGSQL_DML_STRING opciók tartalmazzák.

Példák

1. példa Használati példa pg_update()

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

// Ez biztonságos, mivel a $_POST automatikusan konvertálódik
$res = pg_update ($db, "post_log", $_POST, $data);
if ($res) (
visszhang "Az adatok frissítve:$res\n" ;
) más (
visszhang "Érvénytelen adatot kellett küldeni\n";
}
?>

pg_update (erőforrás $kapcsolat , string $tábla_neve , tömb $adat , tömb $feltétel [, int $opciók = PGSQL_DML_EXEC ])

pg_update() lecseréli a táblázatban a feltételeknek megfelelő rekordokat feltétel adat adat. Ha egy érvet adnak lehetőségek, az adatokat a függvény átalakítja pg_convert(), amelyre az argumentum paraméterei kerülnek átadásra.

A paraméterek listája

PostgreSQL adatbázis-kapcsolati erőforrás.

Táblázat_neve

A tábla neve, amelyben a rekordok frissülnek.

Sor( sor), amelynek kulcsai megfelelnek a táblázat_neve tábla oszlopainak nevének, és az értékek lecserélik az ezekben az oszlopokban lévő adatokat.

Feltétel

Sor( sor), melynek kulcsai a táblanév tábla oszlopainak nevének felelnek meg. Csak azok a sorok frissülnek, amelyek mezőértékei egyeznek a tömbértékekkel.

Lehetőségek

Az egyik állandó PGSQL_CONV_OPTS, PGSQL_DML_NO_CONV, PGSQL_DML_ESCAPE, PGSQL_DML_EXEC, PGSQL_DML_ASYNC vagy PGSQL_DML_STRING, vagy ezek kombinációja. Ha az opciók tartalmazzák PGSQL_DML_STRING, a függvény egy karakterláncot ad vissza. Ha telepítve van PGSQL_DML_NO_CONV vagy PGSQL_DML_ESCAPE, majd a függvény pg_convert() belsőleg nem hívják.

Visszatérési értékek

Visszatér IGAZ sikeres teljesítése esetén ill HAMIS hiba esetén. A függvény visszaadja a karakterláncot ( húr), ha állandó PGSQL_DML_STRING opciók tartalmazzák.

Példák

1. példa Használati példa pg_update()

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

// Ez biztonságos, mivel a $_POST automatikusan konvertálódik
$res = pg_update ($db, "post_log", $_POST, $data);
if ($res) (
visszhang "Az adatok frissítve:$res\n" ;
) más (
visszhang "Érvénytelen adatot kellett küldeni\n";
}
?>

A Postgres, amelyet eredetileg az UC Berkeley Számítástechnikai Osztálya fejlesztett ki, úttörő szerepet játszott számos, egyes kereskedelmi adatbázisokban már elérhető objektum-orientált koncepcióban. Támogatja az SQL92/SQL99 nyelvet, a tranzakciós integritást és a típusbővíthetőséget. A PostgreSQL az eredeti Berkeley-kód nyílt forráskódú leszármazottja.

A PostgreSQL egy ingyenesen elérhető termék. A PostgreSQL támogatás használatához PostgreSQL 6.5 vagy újabb verzióra van szükség. PostgreSQL 7.0 vagy újabb – a PostgreSQL modul összes funkciójához. A PostgreSQL számos karakterkódolást támogat, beleértve a többbájtos karakterkódolásokat is. A PostgreSQL aktuális verziója és információi a http://www.postgresql.org/ címen találhatók.

A PostgreSQL támogatás engedélyezéséhez a --with-pgsql[=DIR] opció szükséges a PHP fordításakor. Ha elérhető a megosztott objektumok modul, a PostgreSQL modul a php.ini fájlban található kiterjesztési direktíva vagy a függvény használatával tölthető be. dl(). A támogatott ini direktívák leírása a terjesztési forráskóddal együtt kapott php.ini-dist fájlban található.

Asztal 1. A funkció neve megváltozik
Régi névÚj név
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()

Nem minden build támogatja az összes funkciót. Ez a libpq (a PostgreSQL C Client felület) verziójától és a libpq fordítási módjától függ. Ha hiányzik egy függvény, a libpq nem támogatja az adott függvény által megkívánt képességeket.

Az is fontos, hogy olyan libpq-t használjon, amely újabb, mint a PostgreSQL Server, amelyhez csatlakozik. Ha olyan libpq-t használ, amely régebbi, mint amit a PostgreSQL Server vár, akkor problémái lesznek.

A 6.3-as verzió (1998. 02. 03.) óta a PostgreSQL alapértelmezés szerint unix tartományi socketet használ. A TCP port alapértelmezés szerint NINCS nyitva. A táblázat ezeket az új csatlakozási lehetőségeket írja le. Ez a socket a /tmp/.s.PGSQL.5432 fájlban található. Ez az opció a "-i" jelzővel engedélyezhető postamester, értéke pedig a következő lesz: "hallgatni TCP/IP socketeket, valamint Unix domain socketeket."

2. táblázat: Postmaster és PHP

A PostgreSQL szerverrel a következő értékpárokkal lehet kapcsolatot létesíteni a parancssorban: $conn = pg_connect("host=myHost port=myPort tty=myTTY options=myOptions dbname=myDB user=myUser password=myPassword ");

Előző szintaxis: $conn = pg_connect("host", "port", "opciók", "tty", "dbname") már nem ajánlott.

A környezeti változók befolyásolják a PostgreSQL szerver/kliens viselkedését. Például a PostgreSQL modul megkeresi a PGHOST környezeti változót, ha a hostname nem szerepel a kapcsolati karakterláncban. A támogatott környezeti változók változatonként eltérőek. A részletekért lásd a PostgreSQL programozói kézikönyvet (libpq – Environment Variables).

Ügyeljen arra, hogy a megfelelő felhasználóhoz állítsa be a környezeti változókat. Használja a $_ENV vagy getenv() annak ellenőrzésére, hogy mely környezeti változók állnak rendelkezésre az aktuális folyamat számára.

A PostgreSQL 7.1.0-tól kezdve 1 GB-ot tárolhat egy szövegmezőben. A régebbi verziók blokkméret-korlátozással rendelkezhetnek (az alapértelmezett 8 KB volt, a maximális 32 KB volt, a fordításkor meghatározva).

A nagy objektum (lo) felület használatához lo függvényeket kell tartalmaznia a tranzakciós blokkon belül. A tranzakciós blokk egy SQL utasítással kezdődik KEZDŐDIK, és ha a tranzakció helyes volt, akkor véget ér ELKÖVETNI vagy VÉGE. Ha egy tranzakció sikertelen, akkor le kell zárni VISSZATÉRÍTÉS vagy ELVETÉL.

A nagy objektum bezárása előtt ne zárja le a kapcsolatot a PostgreSQL-kiszolgálóval.

Tartalom pg_affeded_rows - visszaadja az érintett bejegyzések számát (steam/tuples) pg_cancel_query - törli az aszinkron kérést pg_client_encoding - fogadja az ügyfél kódját pg_close - bezárja a postgreSQL kapcsolatot PG_ConNNECT - megnyitja a posteg Rescl kapcsolatot PG_ConNNECT - megnyitja a posteg Rescl kapcsolatot, PG_Connect_connection zárva van-e kapcsolat -Connect_BUSY, vagy nem kapcsolat (reconnect) pg_connection_status - kapcsolati állapotot kap pg_convert - asszociatív tömb értékét az SQL utasításnak megfelelő értékké alakítja pg_copy_from - rekordokat szúr be egy táblába egy tömbből pg_copy_to - táblát másol egy tömbbe pg_dbname - lekéri az adatbázis nevét pg_delete - törli a rekordokat pg_end_copy - szinkronizál a PostgreSQL háttérprogrammal pg_escape_bytea - mnemonizálja a /escape bináris fájlt a pg_escape_string típushoz - mnemonizálja a karakterláncot a text/char típushoz pg_fetch_array - lekér egy sort pg_end_array-ként pg_escape_asferietch_ a tömb értékeit pg_escape_asferie ). az eredményül kapott erőforrásból pg_fetch_row - lekér egy sort felsorolható tömbként pg_field_is_null - ellenőrzi, hogy egy mező NULLA pg_field_name - a mező nevét adja vissza pg_field_num - a megnevezett mező számát adja vissza pg_field_prtlen - a nyomtatható méretet adja vissza pg_field_size - a megnevezett mező belső tárhelyének méretét adja vissza pg_field_type - a megfelelő mezőszám típusnevét adja vissza

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

pg_convert — Átalakítja egy asszociatív tömb értékeit elfogadható értékekké az SQL lekérdezésekben való használatra

Leírás

pg_convert (erőforrás $kapcsolat , string $tábla_neve , tömb $assoc_array [, int $opciók = 0]) : tömb

pg_convert() ellenőrzi és átalakítja az assoc_array értékeit az SQL szerver számára elfogadhatókká. A táblázat_neve táblának léteznie kell, és a benne lévő oszlopok száma nem lehet kevesebb, mint az assoc_array tömb értékei. A táblázat_neve táblázat oszlopneveinek meg kell egyeznie az assoc_array tömb kulcsaival, és a tömbértékek adattípusainak is meg kell egyeznie a megfelelő oszlopok adattípusaival. Ha az átalakítás sikeres, a függvény a konvertált értékek tömbjét adja vissza, ellenkező esetben visszaadja HAMIS.

Megjegyzés:

A PHP 5.6.0-tól kezdve a logikai értékek megengedettek. A rendszer PostgreSQL logikai típusra konvertálja őket. A logikai értékek karakterlánc-reprezentációi is támogatottak. NULLA PostgreSQL NULL-ra konvertálódik.

A PHP 5.6.0 előtt, ha a táblanév tábla logikai mezőket tartalmaz, ne használjon állandót IGAZ mint a táblázat_neve tömb értéke ezekhez a mezőkhöz. A rendszer „TRUE” karakterláncra konvertálja, ami érvénytelen érték a PostgreSQL logikai mezőinél. Használja a "t", "true", "1", "y", "yes" értékeket.

A paraméterek listája

PostgreSQL adatbázis-kapcsolati erőforrás.

Táblázat_neve

Adatbázistábla neve.

Assoc_array

Átalakítandó adatok.

Lehetőségek

Az egyik állandó PGSQL_CONV_IGNORE_DEFAULT, PGSQL_CONV_FORCE_NULL vagy PGSQL_CONV_IGNORE_NOT_NULL, vagy ezek kombinációja.

Visszatérési értékek

Sor( sor), amely tartalmazza a konvertált adatokat, vagy HAMIS hiba esetén.

Példák

1. példa Használati példa pg_convert()

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

$tmp = array(
"author" => "Joe Thackery",
"év" => 2005,
"title" => "Életem, Joe Thackery"
);

$vals = pg_convert ($dbconn, "szerzők", $tmp);
?>