PostgreSQL-funksjoner. LXXX. PostgreSQL-funksjoner databasestørrelse

Standard malbibliotek ( Standard malbibliotek , STL) er inkludert i standardbiblioteket til C++-språket. Den inkluderer implementeringer av de mest brukte beholderne og algoritmene, som sparer programmerere fra rutinen med å omskrive dem om og om igjen. Når man utvikler beholdere og algoritmene som brukes på dem (som fjerning av identiske elementer, sortering, søk osv.), må enten allsidighet eller ytelse ofte ofres. STL-utviklerne satte seg imidlertid i oppgave å gjøre biblioteket både effektivt og universelt. For å løse dette problemet ble slike universelle midler for C++-språket som maler og operatøroverbelastning brukt. I den følgende presentasjonen vil vi stole på STL-implementeringen levert av Microsoft sammen med Visual C++ 6.0-kompilatoren. Imidlertid vil det meste av det ovennevnte også være sant for STL-implementeringer av andre kompilatorer.

Hovedbegrepene i STL er begrepene container (container), algoritme (algoritme) og iterator (iterator).

Containerer et lager av objekter (både innebygde og brukerdefinerte typer). Vanligvis implementeres containere som klassemaler. De enkleste typene containere (statiske og dynamiske arrays) bygges direkte inn i C++-språket. I tillegg inkluderer standardbiblioteket implementeringer av containere som vektor, liste, kø, kart, sett og noen andre.

Algoritmeer en funksjon for å manipulere objekter i en beholder. Typiske eksempler på algoritmer er sortering og søking. STL implementerer rundt 60 algoritmer som kan brukes på forskjellige beholdere, inkludert arrays innebygd i C++-språket.

Iteratorer en abstraksjon av en peker, det vil si et objekt som kan referere til andre objekter i beholderen. Hovedfunksjonene til en iterator er å gi tilgang til objektet den refererer til (dereferering) og å flytte fra ett beholderelement til et annet (iterasjon, derav navnet iterator). For innebygde beholdere brukes vanlige pekere som iteratorer. Når det gjelder mer komplekse beholdere, implementeres iteratorer som klasser med et sett med overbelastede operatører.

I tillegg til de merkede elementene i STL er det et nummer hjelpebegreper ; Du bør også bli kjent med noen av dem.

Fordeler(allokator) er et objekt som er ansvarlig for å allokere minne for beholderelementer. En allokator er knyttet til hver standardbeholder (typen sendes som en av malparametrene). Hvis en eller annen algoritme trenger å allokere minne for elementer, må den gjøre dette gjennom en allokator. I dette tilfellet kan du være sikker på at distribuerte objekter vil bli ødelagt på riktig måte.

STL inkluderer en standard allokatorklasse (beskrevet i xmemory-filen). Dette er hva alle containere implementert i STL bruker som standard. Imidlertid kan brukeren implementere sin egen klasse. Dette er svært sjelden nødvendig, men kan noen ganger gjøres for effektivitet eller feilsøkingsformål.

La oss dvele mer detaljert ved vurderingen av de introduserte konseptene.

Containere . Hver beholder gir et strengt definert grensesnitt som algoritmer vil samhandle med den. Beholderspesifikke iteratorer gir dette grensesnittet. Det er viktig å understreke at ingen ekstra medlemsfunksjoner brukes til å samhandle mellom algoritmer og beholdere. Dette gjøres fordi standardalgoritmer må fungere, inkludert de innebygde beholderne i C++-språket, som har iteratorer (pekere), men ingenting annet. Derfor, når du oppretter din egen container, er implementering av en iterator et minimum.

Hver beholder implementerer en spesifikk type iterator. Dette velger den mest funksjonelle iteratortypen som effektivt kan implementeres for en gitt beholder. "Effektiv" betyr at hastigheten for å utføre operasjoner på iteratoren ikke skal avhenge av antall elementer i beholderen. For eksempel er en tilfeldig tilgang iterator implementert for en vektor, og en toveis iterator er implementert for en liste. Fordi hastigheten på en listeoperasjon er lineær med lengden, implementeres ikke en iterator med tilfeldig tilgang for en liste.

Uavhengig av den faktiske organiseringen av beholderen (vektor, liste, tre), kan elementene som er lagret i den betraktes som en sekvens. Iteratoren til det første elementet i denne sekvensen returneres av start()-funksjonen, og iteratoren til elementet etter det siste returneres av end()-funksjonen. Dette er veldig viktig, siden alle algoritmer i STL fungerer nøyaktig med sekvenser spesifisert av start- og sluttiteratorer.

I tillegg til vanlige iteratorer i STL, er det omvendte iteratorer ( omvendt iterator ). En omvendt iterator er annerledes ved at den itererer gjennom sekvensen av elementer i en beholder i omvendt rekkefølge. Med andre ord er operasjonene + og - reversert. Dette gjør at algoritmene kan brukes på både direkte og omvendte sekvenser av elementer. Ved å bruke finn-funksjonen kan du for eksempel søke etter elementer fra både "begynnelsen" og "slutten" av en beholder.

I STL er beholdere delt inn i tre hovedgrupper (tabell 2): ​​sekvensbeholdere, assosiative beholdere og beholderadaptere. De to første gruppene er kombinert til førsteklasses containere.

tabell 2

Container klasse STL

Beskrivelse

Sekvensbeholdere

vektor

Dynamisk array

deque

Toveis kø

liste

Toveis lineær liste

Assosiative beholdere

Assosiativ beholder med unike nøkler

multisett

Assosiativ beholder som tillater dupliserte nøkler

Assosiativ beholder for sett med unike elementer

multimap

Assosiativ beholder for sett med dupliserte elementer

Beholderadaptere

stable

Standard stabel

Standard kø

priority_queue

Prioritert kø

Hver containerklasse implementert i STL , beskriver settet med typer som er knyttet til beholderen. Du bør følge samme praksis når du skriver dine egne beholdere. Her er en liste over de viktigste typene:

verdi_type - elementtype;

størrelsetype - en type for lagring av antall elementer (vanligvis størrelse_t);

iterator - iterator for beholderelementer;

nøkkeltype - nøkkeltype (i en assosiativ beholder).

I tillegg til typer, kan vi skille et sett med funksjoner som nesten hver container i STL implementerer (tabell 3). De er ikke nødvendige for interaksjon med algoritmer, men implementeringen deres forbedrer utskiftbarheten av beholdere i programmet. STL er utformet slik at containere gir tilsvarende funksjonalitet.

Tabell 3

Vanlige metoder for alle STL-beholdere

Beskrivelse

standard konstruktør

Standard konstruktør. Vanligvis har en beholder flere designere

kopi konstruktør

Kopi konstruktør

ødelegger

Destruktor

tømme

Returnerer sann hvis det ikke er noen elementer i beholderen, ellers usant

maks_størrelse

Returnerer maksimalt antall elementer for en beholder

størrelse

Returnerer antall elementer i beholderen på gjeldende tidspunkt

operatør =

Tildeler en beholder til en annen

operatør<

Returnerer sann hvis den første beholderen er mindre enn den andre, ellers usann

operatør<=

Returnerer sann hvis den første beholderen ikke er større enn den andre, ellers usann

operatør >

Returnerer sann hvis den første beholderen er større enn den andre, ellers usann

operatør >=

Returnerer sann hvis den første beholderen ikke er mindre enn den andre, ellers usann

operatør ==

Returnerer sann hvis de sammenlignede beholderne er like, ellers usant

operatør !=

Returnerer sann hvis de sammenlignede beholderne ikke er like, ellers usant

bytte

Bytter elementer av to beholdere

Funksjoner kun tilgjengelig i førsteklasses containere

begynne

To versjoner av denne funksjonen returnerer enten en iterator eller en const_iterator, som refererer til det første elementet i beholderen

To versjoner av denne funksjonen returnerer enten en iterator eller en const_iterator, som refererer til neste posisjon etter slutten av beholderen

begynne

To versjoner av denne funksjonen returnerer heller reverse_iterator eller reverse_const_iterator , som refererer til det siste elementet i beholderen

rive

To versjoner av denne funksjonen returnerer enten en reverse_iterator eller en reverse_const_iterator, som refererer til posisjonen før det første elementet i beholderen

sette inn, slette,

Lar deg sette inn eller fjerne element(er) midt i en sekvens

Avsluttende bord 3

klar

Fjerner alle elementer fra en beholder

Bak frem

push_back, pop_back

Lar deg legge til eller fjerne det siste elementet i en sekvens

push_front, pop_front

Lar deg legge til eller fjerne det første elementet i en sekvens

Iteratorer er vanligvis opprettet som venner av klassene de opererer på, og gir direkte tilgang til de private dataene til disse klassene. En enkelt beholder kan ha flere iteratorer knyttet til seg, som hver opprettholder sin egen "posisjonsinformasjon" (tabell 4).

Tabell 4

Iterator type

Adgang

Frareferanse

Iterasjon

Sammenligning

Output Iterator

(utgang iterator)

Kun opptak

Input Iterator

(inndata-iterator)

Bare lesing

*, ->

==, !=

Fremover iterator

(fremover iterator)

Lese og skrive

*, ->

==, !=

Toveis iterator(toveis iterator)

Lese og skrive

*, ->

++, --

==, !=

Tilfeldig tilgang iterator

(tilfeldig - tilgang iterator)

Lese og skrive

*, ->,

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

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

pg_update (ressurs $tilkobling , streng $tabellnavn , array $data , array $tilstand [, int $options = PGSQL_DML_EXEC ])

pg_update() erstatter poster i tabellen som oppfyller vilkårene betingelse data data. Hvis et argument er gitt alternativer, vil dataene bli transformert av funksjonen pg_convert(), som parameterne fra dette argumentet vil bli sendt til.

Liste over parametere

PostgreSQL-databasetilkoblingsressurs.

Tabellnavn

Navnet på tabellen der postene er oppdatert.

Array( array), hvis nøkler tilsvarer navnene på kolonnene i tabellen tabellnavn, og verdiene vil erstatte dataene i disse kolonnene.

Betingelse

Array( array), hvis nøkler tilsvarer navnene på kolonnene i tabellen tabellnavn . Bare de radene hvis feltverdier samsvarer med matriseverdiene vil bli oppdatert.

Alternativer

En av konstantene PGSQL_CONV_OPTS, PGSQL_DML_NO_CONV, PGSQL_DML_ESCAPE, PGSQL_DML_EXEC, PGSQL_DML_ASYNC eller PGSQL_DML_STRING, eller en kombinasjon av dem. Hvis alternativene inneholder PGSQL_DML_STRING, vil funksjonen returnere en streng. Hvis installert PGSQL_DML_NO_CONV eller PGSQL_DML_ESCAPE, deretter funksjonen pg_convert() ikke ringt internt.

Returverdier

Returnerer EKTE ved vellykket gjennomføring eller FALSK i tilfelle feil. Funksjonen vil returnere strengen ( streng), hvis konstant PGSQL_DML_STRING inneholdt i opsjoner.

Eksempler

Eksempel #1 Brukseksempel pg_update()

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

// Dette er trygt siden $_POST konverteres automatisk
$res = pg_update ($db, "post_log", $_POST, $data);
hvis ($res) (
ekko "Data oppdatert:$res\n" ;
) annet (
ekko "Ugyldige data må ha blitt sendt\n";
}
?>

pg_update (ressurs $tilkobling , streng $tabellnavn , array $data , array $tilstand [, int $options = PGSQL_DML_EXEC ])

pg_update() erstatter poster i tabellen som oppfyller vilkårene betingelse data data. Hvis et argument er gitt alternativer, vil dataene bli transformert av funksjonen pg_convert(), som parameterne fra dette argumentet vil bli sendt til.

Liste over parametere

PostgreSQL-databasetilkoblingsressurs.

Tabellnavn

Navnet på tabellen der postene er oppdatert.

Array( array), hvis nøkler tilsvarer navnene på kolonnene i tabellen tabellnavn, og verdiene vil erstatte dataene i disse kolonnene.

Betingelse

Array( array), hvis nøkler tilsvarer navnene på kolonnene i tabellen tabellnavn . Bare de radene hvis feltverdier samsvarer med matriseverdiene vil bli oppdatert.

Alternativer

En av konstantene PGSQL_CONV_OPTS, PGSQL_DML_NO_CONV, PGSQL_DML_ESCAPE, PGSQL_DML_EXEC, PGSQL_DML_ASYNC eller PGSQL_DML_STRING, eller en kombinasjon av dem. Hvis alternativene inneholder PGSQL_DML_STRING, vil funksjonen returnere en streng. Hvis installert PGSQL_DML_NO_CONV eller PGSQL_DML_ESCAPE, deretter funksjonen pg_convert() ikke ringt internt.

Returverdier

Returnerer EKTE ved vellykket gjennomføring eller FALSK i tilfelle feil. Funksjonen vil returnere strengen ( streng), hvis konstant PGSQL_DML_STRING inneholdt i opsjoner.

Eksempler

Eksempel #1 Brukseksempel pg_update()

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

// Dette er trygt siden $_POST konverteres automatisk
$res = pg_update ($db, "post_log", $_POST, $data);
hvis ($res) (
ekko "Data oppdatert:$res\n" ;
) annet (
ekko "Ugyldige data må ha blitt sendt\n";
}
?>

Postgres, opprinnelig utviklet av UC Berkeley Computer Science Department, var banebrytende for mange av de objektorienterte konseptene som nå er tilgjengelige i noen kommersielle databaser. Den gir støtte for SQL92/SQL99-språket, transaksjonsintegritet og typeutvidbarhet. PostgreSQL er en åpen kildekode etterkommer av den originale Berkeley-koden.

PostgreSQL er et produkt tilgjengelig gratis. For å bruke PostgreSQL-støtte trenger du PostgreSQL 6.5 eller nyere. PostgreSQL 7.0 eller nyere - for alle PostgreSQL-modulfunksjoner. PostgreSQL støtter mange tegnkodinger, inkludert multibyte-tegnkodinger. Den gjeldende versjonen og informasjonen om PostgreSQL finner du på http://www.postgresql.org/.

For å aktivere PostgreSQL-støtte, kreves alternativet --with-pgsql[=DIR] når PHP kompileres. Hvis modulen for delte objekter er tilgjengelig, kan PostgreSQL-modulen lastes ved å bruke utvidelsesdirektivet i php.ini-filen eller funksjonen dl(). Støttede ini-direktiver er beskrevet i php.ini-dist-filen som følger med distribusjonskildekoden.

Tabell 1. Funksjonsnavn endres
Gammelt navnNytt navn
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()

Ikke alle funksjoner støttes i alle versjoner. Dette avhenger av versjonen av libpq (PostgreSQL C Client-grensesnittet) og hvordan libpq er kompilert. Hvis det mangler en funksjon, støtter ikke libpq egenskapene som kreves av den funksjonen.

Det er også viktig at du bruker en libpq som er nyere enn PostgreSQL-serveren du kobler til. Hvis du bruker en libpq som er eldre enn PostgreSQL Server forventer, vil du få problemer.

Siden versjon 6.3 (02/03/1998) bruker PostgreSQL en unix-domenekontakt som standard. TCP-porten er IKKE åpnet som standard. Tabellen beskriver disse nye tilkoblingsmulighetene. Denne kontakten finner du i /tmp/.s.PGSQL.5432. Dette alternativet kan aktiveres med "-i"-flagget for postmester, og verdien vil være: "lytt til TCP/IP-sockets så vel som Unix-domene-sockets."

Tabell 2. Postmaster og PHP

En tilkobling til PostgreSQL-serveren kan opprettes med følgende verdipar på kommandolinjen: $conn = pg_connect("host=myHost-port=myPort tty=myTTY options=myOptions dbname=myDB user=mittbrukerpassord=mittpassord ");

Tidligere syntaks: $conn = pg_connect("vert", "port", "alternativer", "tty", "dbname") anbefales ikke lenger.

Miljøvariabler påvirker oppførselen til PostgreSQL-serveren/klienten. For eksempel vil PostgreSQL-modulen se etter PGHOST-miljøvariabelen hvis vertsnavnet ikke er i tilkoblingsstrengen. Støttede miljøvariabler varierer mellom versjoner. Se PostgreSQL programmeringshåndbok (libpq - miljøvariabler) for detaljer.

Pass på at du angir miljøvariablene for den aktuelle brukeren. Bruk $_ENV eller getenv() for å sjekke hvilke miljøvariabler som er tilgjengelige for gjeldende prosess.

Fra og med PostgreSQL 7.1.0 kan du lagre 1 GB i et tekstfelt. Eldre versjoner kan ha blokkstørrelsesbegrensninger (standard var 8KB, maksimum var 32KB, bestemt på kompileringstidspunktet).

For å bruke grensesnittet for store objekter (lo), må du inkludere lo-funksjoner inne i transaksjonsblokken. En transaksjonsblokk begynner med en SQL-setning BEGYNNE, og hvis transaksjonen var riktig, avsluttes BEGÅ eller SLUTT. Hvis en transaksjon mislykkes, må den lukkes med TILBAKE eller AVBRYTE.

Du bør ikke lukke forbindelsen til PostgreSQL-serveren før du lukker det store objektet.

Innhold pg_affeded_rows - returnerer antall involverte oppføringer (steam/tuples) pg_cancel_query - kansellerer async-forespørselen pg_client_encoding - mottar kundekoding pg_close - lukker postgreSQL-tilkoblingen PG_ConNNECT - åpner posteg Rescl-tilkobling PG_Connection_Reset - om pBUgSY-tilkoblingen er lukket eller ikke - om pBUgSY-tilkoblingen er lukket eller ikke forbindelse (reconnect) pg_connection_status - får tilkoblingsstatus pg_convert - konverterer verdien av en assosiativ matrise til en verdi som passer for SQL-setningen pg_copy_from - setter inn poster i en tabell fra en matrise pg_copy_to - kopierer en tabell til en matrise pg_dbname - henter databasenavnet pg_delete - sletter poster pg_end_copy - synkroniserer med PostgreSQL-backend pg_escape_bytea - mnemoniserer /escape binær for bytea type pg_escape_string - mnemoniserer streng for type text/char pg_fetch_array - henter en rad som et array_et array a array pgresfult_ - returnerer verdier fra den resulterende ressursen pg_fetch_row - henter en rad som en tallrik matrise pg_field_is_null - sjekker om et felt er NULL pg_field_name - returnerer navnet på feltet pg_field_num - returnerer nummeret til det navngitte feltet pg_field_prtlen - returnerer den utskrivbare størrelsen pg_field_size - returnerer den interne lagringsstørrelsen til det navngitte feltet pg_field_type - returnerer typenavnet for det tilsvarende feltnummeret

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

pg_convert — Konverterer verdiene til en assosiativ matrise til akseptable verdier for bruk i SQL-spørringer

Beskrivelse

pg_convert (ressurs $tilkobling , streng $tabellnavn , array $assoc_array [, int $alternativer = 0]) : array

pg_convert() sjekker og konverterer verdier fra assoc_array til de som er akseptable for SQL-serveren. Tabellen table_name må eksistere, og antall kolonner i den må ikke være mindre enn verdiene i assoc_array-matrisen. Kolonnenavnene i tabellen tabellnavn må samsvare med nøklene til assoc_array-matrisen, og datatypene til matriseverdiene må også samsvare med datatypene til de tilsvarende kolonnene. Hvis konverteringen er vellykket, returnerer funksjonen en rekke konverterte verdier, ellers returnerer den FALSK.

Kommentar:

Fra og med PHP 5.6.0 er boolske verdier tillatt. De konverteres til PostgreSQL boolsk type. Strengrepresentasjoner av en boolsk verdi støttes også. NULL konverteres til PostgreSQL NULL.

Før PHP 5.6.0, hvis tabellen tabellnavn inneholder boolske felt, ikke bruk en konstant EKTE som verdien av tabellen tabellnavn for disse feltene. Den vil bli konvertert til strengen "TRUE", som er en ugyldig verdi for boolske felt i PostgreSQL. Bruk verdiene "t", "true", "1", "y", "yes".

Liste over parametere

PostgreSQL-databasetilkoblingsressurs.

Tabellnavn

Databasetabellnavn.

Assoc_array

Data som skal konverteres.

Alternativer

En av konstantene PGSQL_CONV_IGNORE_DEFAULT, PGSQL_CONV_FORCE_NULL eller PGSQL_CONV_IGNORE_NOT_NULL, eller en kombinasjon av dem.

Returverdier

Array( array), som inneholder de konverterte dataene, eller FALSK ved feil.

Eksempler

Eksempel #1 Brukseksempel pg_convert()

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

$tmp = array(
"author" => "Joe Thackery" ,
"år" => 2005,
"title" => "My Life, av Joe Thackery"
);

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