Dette kapitlet drøfter PostgreSQL datatyper. Mens du oppretter tabellen, for hver kolonne, angir du en datatype, dvs. hva slags data du ønsker å lagre i tabellfelt
Dette gjør at flere fordeler:.
< b> Konsistens:
operasjoner mot kolonner med samme datatype gi konsistente resultater og er vanligvis den raskeste
Validering:.
Riktig bruk av datatyper innebærer format validering av data og avvisning av data utenfor omfanget av datatype.
Kompakthet.
Som en kolonne kan lagre en enkelt type verdi, blir det lagret i en kompakt måte
Ytelse:
Riktig bruk av datatyper gir mest effektiv lagring av data. Verdiene som er lagret kan behandles raskt, noe som forbedrer ytelsen.
PostgreSQL støtter et bredt sett av datatyper. Dessuten kan brukerne lage sine egne datatype ved hjelp av CREATE TYPE
SQL kommando. Det er forskjellige kategorier av datatyper i PostgreSQL. De er omtalt som følger:
Talltyper
Tall typene består av to-byte, fire-byte, og åtte-byte heltall, fire-byte og åtte-byte flyttall, og valgbar presisjon desimaler. Tabellen nedenfor viser de tilgjengelige typene.
Storage Størrelse
Beskrivelse
smallint2 bytessmall-range heltall-32768 til + 32767integer4 bytestypical valg for heltall-2147483648 til + 2147483647bigint8 byteslarge-range heltall-9223372036854775808 til 9223372036854775807decimalvariableuser-spesifisert presisjon, exactup til 131072 sifre før decimalpoint; opp til 16383 siffer etter desimaltegnet pointnumericvariableuser-spesifisert presisjon, exactup til 131072 sifre før decimalpoint; opp til 16383 siffer etter desimaltegnet pointreal4 bytesvariable presisjon, inexact6 desimaltall siffer precisiondouble precision8 bytesvariable presisjon, inexact15 desimaltall siffer precisionsmallserial2 bytessmall autoincrementing Heltall1 til 32767serial4 bytesautoincrementing Heltall1 til 2147483647bigserial8 byteslarge autoincrementing Heltall1 to9223372036854775807
Penge Typer
penger
type butikker et valutabeløp med en fast brøk presisjon. Verdier av numerisk, int, og BIGINT
datatyper kan bli kastet til penger
. Ved hjelp av flyttall er ikke anbefalt å håndtere penger på grunn av potensialet for avrundingsfeil.
tegn typer
Tabellen nedenfor viser generelle karaktertyper tilgjengelig i PostgreSQL.
Beskrivelse
karakter varierende (n ), varchar (n) variabel lengde med limitcharacter (n), røye (n) fast lengde, blank paddedtextvariable ubegrenset lengde
Binary datatyper
BYTEA
datatype tillater lagring av binære strenger som i tabellen nedenfor.
Navn
bytea1 eller 4 byte pluss selve binærstrenglengde binær streng
Dato /Tid Typer
PostgreSQL støtter fullt sett med SQL dato og klokkeslett typer, som vist i tabellen nedenfor. Datoer telles i henhold til den gregorianske kalenderen. Her er alle typer har oppløsning på 1 mikrosekund /14 siffer
unntatt dato
type, hvis oppløsningen er dag
.
høy verdi
timestamp [(p)] [uten tidssone] 8 bytesboth dato og tid (ingen tidssone) 4713 BC294276 ADtimestamp [ ,,,0],(p)] med tiden zone8 bytesboth dato og klokkeslett, med tiden zone4713 BC294276 ADdate4 bytesdate (ingen tid på døgnet) 4713 BC5874897 ADtime [(p)] [uten tidssone] 8 bytestime av dagen (ingen dato) 00: 00: 0024 : 00: 00time [(p)] med tiden zone12 bytestimes av dagen bare, med tid zone00: 00: 00 + 145 924: 00: 00-1459interval [felt] [(p)] 12 bytestime intervall 178000000 years178000000 år
Boolean Type
PostgreSQL gir standard SQL typen boolean. Den boolsk type kan ha flere stater. sant
, false
, og en tredje stat, ukjent
, som er representert ved SQL nullverdi
Name
boolean1 bytestate av sant eller usant
oppregnet Type
oppregnet (enum) typer er datatyper som utgjør en statisk, bestilte sett av verdier. De er likeverdige med de enum typene som støttes i en rekke programmeringsspråk.
I motsetning til andre typer, nummerert Typer må opprettes ved hjelp TYPE kommandoen CREATE. Denne typen brukes til å lagre en statisk, bestilte sett av verdier, for eksempel kompass retninger, dvs. nord, sør, øst og vest eller dager i uken som følger:
CREATE TYPE uke AS ENUM ('man', 'ti', 'ons', 'to', 'fre', 'Sat', 'Sun');.
Oppregnet gang skapt, kan de brukes som alle andre typer
Geometri type
Geometri datatypene representerer to-dimensjonale romlige stedene. Den mest grunnleggende typen, poenget, danner grunnlaget for alle de andre typene.
Storage Størrelse
point16 bytesPoint på et plan (x, y) line32 bytesInfinite linje (ikke fullt implementert) ((x1, y1), (x2, y2)) lseg32 bytesFinite linjesegment ((x1, y1), (x2, y2)) box32 bytesRectangular boks (( x1, y1), (x2, y2)) path16 + 16n bytesClosed bane (tilsvarende polygon) ((x1, y1), ...) path16 + 16n bytesOpen bane [(x1, y1), ...] + polygon40 16nPolygon (tilsvarende lukket bane) ((x1, y1), ...) circle24 bytesCircle < (x, y), r > (midtpunkt og radius)
Network Address Type
PostgreSQL tilbyr datatyper til å lagre IPv4, IPv6, og MAC-adresser. Det er bedre å bruke disse typene i stedet for rene teksttyper for å lagre nettverksadresser, fordi disse typene gi innspill feilsjekking og spesialiserte operatører og funksjoner.
cidr7 eller 19 bytesIPv4 og IPv6 networksinet7 eller 19 bytesIPv4 og IPv6-verter og networksmacaddr6 bytesMAC adresser
Bit String Skriv
Bit String typer brukes til å lagre bit masker. De er enten 0 eller 1. Det er to SQL bit typer: bit (n) Hotell og litt varierende (n)
, der n er et positivt heltall
. Tekst Søk Type
Denne typen støtter fulltekstsøk, som er aktiviteten til å søke gjennom en samling av naturlige språklige dokumenter for å finne de som passer best en spørring. Det er to datatyper for dette:
tsvectorThis er en sortert liste over forskjellige ord som har blitt normalisert å slå sammen ulike varianter av samme ord, kalt som "lexemes ".tsqueryThis lagrer lexemes som skal søkes etter, og kombinerer dem hedre de boolske operatører og (AND), | (OR), og! (IKKE). Parentes kan brukes til å håndheve gruppering av operatørene.
UUID Skriv
En UUID (universell unik identifikatorer) er skrevet som en sekvens av lavere-case heksadesimale sifre, i flere grupper atskilt med bindestrek, spesielt en gruppe på 8 siffer etterfulgt av tre grupper på 4 siffer fulgt av en gruppe av 12 sifre, for en total av 32 sifre som representerer de 128 bits.
Et eksempel på en UUID er: 550e8400-e29b-41d4-a716-446655440000
XML Skriv
xml datatypen kan brukes til å lagre XML-data. For lagring av XML-data, først du opprette XML-verdier ved hjelp av funksjonen xmlparse som følger:
XMLPARSE (DOKUMENT '< xml version = "1.0" > < tutorial > < title > PostgreSQL Tutorial < /title >? < temaer > ... < /emner > < /tutorial > ') XMLPARSE (INNHOLD' xyz < foo > Bar < /foo > < bar > foo < /bar > ')
JSON type
json
datatype kan brukes til å lagre JSON (Javascript Object Notation) data. Slike data kan også lagres som tekst
, men json
datatype har fordelen av å sjekke at hver lagrede verdien er en gyldig JSON verdi. Det er også knyttet støttefunksjoner tilgjengelig som kan brukes direkte til å håndtere JSON datatype som følger:
array_to_json('{{1,5},{99,100}}'::int[])[[1,5],[99,100]]row_to_json(row(1,'foo')){"f1":1,"f2":"foo"}
Array Skriv
PostgreSQL gir mulighet til å definere en kolonne i en tabell som en variabel lengde flerdimensjonal array. Matriser med noen innebygd eller brukerdefinert basistype, enum type eller kompositt kan opprettes
Declaration of Arrays
Array typen kan bli erklært som:.
CREATE TABLE monthly_savings (navn tekst, saving_per_quarter heltall [], ordningen tekst [] []);
eller ved å bruke søkeordet "array" som:
CREATE TABLE monthly_savings (navn tekst, saving_per_quarter heltall Array [4], ordningen tekst [ ,,,0],] []);
Sette verdier
Array verdier kan settes inn som en bokstavelig konstant, muring elementverdier innenfor klammeparentes og skille dem med komma. Et eksempel er som følger:
INSERT INTO monthly_savingsVALUES ('Manisha', '{20000, 14600, 23500, 13250}', '{{"FD", "MF"}, {"FD", "Property"} });
Tilgang Arrays
Et eksempel for å få tilgang Arrays er vist nedenfor. Kommandoen nedenfor vil velge personer som sparing er mer i andre kvartal enn fjerde kvartal
SELECT navn FROM monhly_savings HVOR saving_per_quarter [2] >.; saving_per_quarter [4];
Endre Arrays
Et eksempel på å endre arrays er som vist nedenfor
UPDATE monthly_savings SET saving_per_quarter = {25000,25000,27000,27000} WHERE name = 'Manisha. ';
eller bruke ARRAY uttrykk syntaks:
UPDATE monthly_savings SET saving_per_quarter = array [25000,25000,27000,27000] WHERE name =' Manisha ';
Søker Arrays
Et eksempel for å lete arrays er som vist nedenfor
SELECT * FROM monthly_savings HVOR saving_per_quarter [1] = 10000 ORsaving_per_quarter [2] = 10000 ORsaving_per_quarter [3] = 10000 ORsaving_per_quarter [4] = 10000;.
Hvis størrelsen på matrisen er kjent fremfor søkemetode kan anvendes. Else, viser følgende eksempel hvordan du søker når størrelsen ikke er kjent
SELECT * FROM monthly_savings HVOR 10000 = ALLE (saving_per_quarter);.
Composite Typer
Denne typen representerer en liste over feltnavn og deres datatyper, dvs. strukturen i en rad eller registrering av et bord
Declaration of Composite Typer
Følgende eksempel viser hvordan å erklære en kompositt.
CREATE TYPE inventory_item AS (navn tekst, supplier_id heltall, pris numerisk);
Denne datatypen kan brukes i de lage tabeller som nedenfor:
CREATE TABLE on_hand (element inventory_item, telle heltall);
Composite Verdi Input Anmeldelser
Composite verdier kan settes inn som en bokstavelig konstant, omslutter feltverdiene innenfor parenteser og skille dem med komma. Et eksempel er som følger:
INSERT INTO on_hand VALUES (ROW ('fuzzy terningene', 42, 1,99), 1000);
Dette er gyldig for inventory_item
definert ovenfor. Den ROW søkeordet er faktisk valgfritt, så lenge du har mer enn ett felt i uttrykket.
Tilgang Composite Typer
For å få tilgang til et felt av en sammensatt kolonne, bruker et punktum etterfulgt av feltet navn, omtrent som å velge et felt fra en tabell navn. For eksempel vil velge noen subfields fra vårt on_hand eksempel bord, spørringen ville bli som vist nedenfor: SELECT (post) .name Fra on_hand HVOR (post) .price> 9,99;
du kan også bruke navnet på tabellen også (for eksempel i et multitable spørring), som dette: SELECT (on_hand.item) .name Fra on_hand HVOR (on_hand.item) .price > 9.99;
treet Typer
treet typer representerer datatype som bruker en rekke data. Range typen kan være diskrete områder (f.eks verds alle heltall 1 til 10) eller kontinuerlig områder (f.eks enhver tid 10:00 til 11:00).
De innebygde range typer tilgjengelig inkluderer spenner:
int4range - Utvalg av heltall
int8range - Utvalg av bigint
Tallsøk - Utvalg av numerisk
tsrange - Utvalg av tidsstempel uten tidssone
tstzrange - Utvalg av tidsstempel med tidssone
< p> daterange - Range of date
egendefinert område typer kan bli opprettet for å lage nye typer serier tilgjengelig, for eksempel IP-adresseområder med inet type som en base, eller flyte områder bruker flottøren datatype som base.
treet typer støtter inkluderende og eksklusivt utvalg grenser ved hjelp av [] og () tegn, henholdsvis, for eksempel: "[4,9] 'representerer alle heltall fra og med 4 opp til, men ikke inkludert 9.
Object Identifier Typer
objektidentifikatorer (OIDer) brukes internt av PostgreSQL som primærnøkler for ulike systemtabeller. Hvis MED OIDS
er spesifisert eller default_with_oids
konfigurasjon variabel er aktivert, bare i slike tilfeller OIDer legges til brukeropprettede tabeller. Tabellen nedenfor viser flere alias typer. De OID alias typer har ingen operasjoner av sine egne unntak for spesialiserte input og output rutiner.
Pseudo Typer
PostgreSQL type system inneholder en rekke spesielle formål oppføringer som er kollektivt kalt pseudo-typer. En pseudo-type kan ikke brukes som en kolonne datatype, men den kan brukes til å erklære en funksjon anførsel resultat type. Tabellen nedenfor viser de eksisterende pseudo-typer.
noen Angir at en funksjon aksepterer eventuelle inngangsdata type.anyelementIndicates at en funksjon aksepterer alle data type.anyarray indikerer at en funksjon aksepterer noen array-data type.anynonarrayIndicates at en funksjon aksepterer enhver ikke-matrise data type.anyenum Angir at en funksjon aksepterer noen enum data type.anyrangeIndicates at en funksjon aksepterer eventuelle utvalg data type.cstringIndicates at en funksjon aksepterer eller returnerer en null -terminated C string.internalIndicates at en funksjon aksepterer eller returnerer en server interne data type.language_handlerA prosedyrespråk samtale håndterer er erklært å returnere language_handler.fdw_handlerA utenlandsk-data wrapper håndterer er erklært å returnere fdw_handler.recordIdentifies en funksjon returnerer en uspesifisert radtype .triggerA trigger-funksjonen er erklært å returnere trigger.voidIndicates at en funksjon returnerer ingen verdi.