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 |
kø |
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() 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() 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 navn | Nytt 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);
?>