PostgreSQL Datatyper: Numerisk, Tegn, Byte
โก Smart opsummering
PostgreSQL Datatyper definerer den type vรฆrdi, som hver kolonne kan gemme, og dรฆkker tegn-, numeriske, binรฆre, dato og klokkeslรฆt-, booleske, geometriske, netvรฆrks-, UUID-, XML- og JSON-kategorier. PostgreSQL lader ogsรฅ brugerne oprette brugerdefinerede typer med CREATE TYPE-kommandoen.

PostgreSQL tilbyder et rigt sรฆt af indbyggede datatyper til brugere. Brugere kan tilfรธje nye typer ved hjรฆlp af CREATE TYPE-kommandoen. Det gรธr ogsรฅ forespรธrgsler enklere og mere lรฆsbare.
Datatyper ind PostgreSQL
PostgreSQL understรธtter fรธlgende datatyper:
- Teksttyper
- Numeriske typer
- Datoer og tider
- XML
- JSON
- Boolesk
- Bits
- Binรฆre data
- Netvรฆrk
- Arrays
- Opret din datatype
- Midlertidig
- UUID
- Sรฆrlige datatyper til lagring af en netvรฆrksadresse og geometriske data.
Lad os studere PostgreSQL datatyper i detaljer
Tegn Datatyper
PostgreSQL understรธtter tegndatatyper til lagring af tekstvรฆrdier. PostgreSQL bygger karakterdatatyper ud fra de samme interne strukturer. PostgreSQL tilbyder tre tegndatatyper: CHAR(n), VARCHAR(n) og TEXT.
| Navn | Beskrivelse |
|---|---|
| varchar(n) | Giver dig mulighed for at erklรฆre variabel lรฆngde med en grรฆnse |
| Char(n) | Blank polstret med fast lรฆngde |
| tekst | Brug kan bruge denne datatype til at erklรฆre en variabel med ubegrรฆnset lรฆngde |
Numeriske datatyper
PostgreSQL understรธtter to forskellige typer tal:
- Heltal
- Flydende kommatal
| Navn | Butiksstรธrrelse | Rรฆkkevidde |
|---|---|---|
| smallint | 2 bytes | -32768 til + 32767 |
| heltal | 4 bytes | -2147483648 til + 2147483647 |
| bigint | 8 bytes | -9223372036854775808 til 9223372036854775807 |
| decimal | variabel | Hvis du erklรฆrede det som decimal, varierer datatypen fra 131072 cifre fรธr decimalkommaet til 16383 cifre efter decimalkommaet |
| numerisk | variabel | Hvis du erklรฆrer det som nummeret, kan du inkludere nummer op til 131072 cifre fรธr decimalkommaet til 16383 cifre efter decimaltegnet |
| รฆgte | 4 bytes | 6 decimalcifre prรฆcision |
| fordoble | 8 bytes | 15 decimalcifre prรฆcision |
Binรฆre datatyper
En binรฆr streng er en sekvens af oktetter eller bytes. Binรฆre Postgres-datatyper er opdelt pรฅ to mรฅder.
- Binรฆre strenge tillader lagring af odds pรฅ vรฆrdi nul
- Ikke-printbare oktetter
Tegnstrenge tillader ikke nul oktetter og tillader ogsรฅ andre oktetvรฆrdier og sekvenser, som er ugyldige i henhold til databasens tegnsรฆtkodningsregler.
| Navn | Opbevaringsstรธrrelse | Beskrivelse |
|---|---|---|
| Byte | 1 til 4 bytes plus stรธrrelsen af โโden binรฆre streng | Binรฆr streng med variabel lรฆngde |
Netvรฆrksadressetype
Mange applikationer gemmer netvรฆrksoplysninger som IP-adresser pรฅ brugere eller sensorer. PostgreSQL har tre indbyggede typer, som hjรฆlper dig med at optimere netvรฆrksdataene.
| Navn | Stรธrrelse | Beskrivelse |
|---|---|---|
| cidr | 7 eller 19 bytes | IPv4 og IPv6 net |
| Inet | 7 eller 19 bytes | IPv4- og IPv6-vรฆrter og -netvรฆrk |
| macaddr | 6 bytes | MAC-adresser |
Brug af netvรฆrksadressetyper har fรธlgende fordele
- Lagerpladsbesparelse
- Kontrol af inputfejl
- Funktioner som at sรธge data efter undernet
Tekstsรธgningstype
PostgreSQL giver to datatyper, som er designet til at understรธtte fuldtekstsรธgning. Fuldtekstsรธgning er at sรธge gennem en samling af dokumenter pรฅ naturligt sprog for at sรธge i dem, der bedst matcher en forespรธrgsel.
- Tsvector tekstsรธgning PostgreSQL variabeltyper reprรฆsenterer et dokument i en form, der er optimeret til tekstsรธgning
- Forespรธrgselstypen tekstsรธgning gemmer de sรธgeord, der skal sรธges efter
Dato/klokkeslรฆt Datatyper
PostgreSQL timestamp tilbyder mikrosekund prรฆcision i stedet for anden prรฆcision. Derudover har du ogsรฅ mulighed for at gemme med eller uden tidszone. PostgreSQL vil konvertere tidsstempel med tidszone til UTC pรฅ input og gemme det.
Indtastning af dato og klokkeslรฆt accepteres i forskellige formater, herunder traditionel Postgres, ISO 8601. SQL-kompatibel mm.
PostgreSQL understรธtter dag / mรฅned / รฅr bestilling. Understรธttede formater er DMY, MDY, YMD
Tidsmรฆssige datatyper
| Navn | Stรธrrelse | Rรฆkkevidde | Lรธsning |
|---|---|---|---|
| Tidsstempel uden tidszone | 8 bytes | 4713 f.Kr. til 294276 e.Kr | 1 mikrosekund/14 cifre |
| Tidsstempel med tidszone | 8 bytes | 4713 f.Kr. til 294276 e.Kr | 1 mikrosekund/14 cifre |
| dato | 4 bytes | 4713 f.Kr. til 294276 e.Kr | En dag |
| Tid uden tidszone | 8 bytes | 00:00:00 to 24:00:00 | 1 mikrosekund/14 cifre |
| Tid med tidszone | 12 bytes | 00:00:00 + 1459 til 24:00:00-1459 | 1 mikrosekund/14 cifre |
| Interval | 12 bytes | -178000000 til 178000000 รฅr | 1 mikrosekund/14 cifre |
Eksempler
| Input | Beskrivelse |
|---|---|
| 2025-09-07 | ISO 8601, 7. september med enhver datostil (anbefalet format) |
| September 7, 2025 | 7. september med enhver datostil |
| 9/7/2025 | 7. september med MDY, 9. juli med DMY |
| 9/7/25 | 7. september 2025 med MDY |
| 2025-Sep-7 | 7. september med enhver datostil |
| 7. september 2018 | 7. september med enhver datostil |
| 7-Sep-25 | 7. september 2025 med YMD |
| 20250907 | ISO 8601, 7. september 2025 i enhver tilstand |
| 2025.250 | รฅr og dag pรฅ รฅret, i dette tilfรฆlde 7. september 2025 |
| J25250 | Julian dato |
Tid/tid med tidszoneindgang
| Input | Beskrivelse |
|---|---|
| 11:19:38.507 11:19:38 11:19 111938 |
ISO 8601 |
| 11: 19 AM | Samme som 11:19 |
| 11: 19 PM | samme som 23:19 |
| 23: 19-3 23: 19-03: 00 231900-03 |
ISO 8601, samme som 11:19 EST |
| 23: 19 EST | tidszone angivet som EST, samme som 11:19 EST |
boolesk type
En boolsk datatype kan holde
- Sand
- False
- null
vรฆrdier.
Du bruger en bool or boolean nรธgleord for at erklรฆre en kolonne med den boolske datatype.
Nรฅr du indsรฆtter vรฆrdier i en boolesk kolonne, konverterer Postgre vรฆrdier som f.eks
- Ja
- y
- 1
- t
- sand
ind i 1.
Mens vรฆrdier som
- Ingen
- N
- 0
- F
- False
konverteres til 0
Mens du vรฆlger data, konverteres vรฆrdierne igen til yes, true, y osv.
Geometriske datatyper
Geometriske datatyper reprรฆsenterer todimensionelle rumlige objekter. De hjรฆlper med at udfรธre operationer som rotationer, skalering, translation osv.
| Navn | Opbevaringsstรธrrelse | Reprรฆsentation | Beskrivelse |
|---|---|---|---|
| Punkt | 16 bytes | Peg pรฅ et fly | (x, y) |
| Line | 32 bytes | Uendelig linje | ((xl.yl).(x2.y2)) |
| Lseg | 32 bytes | Afgrรฆnset linjesegment | ((xl.yl).(x2.y2)) |
| Box | 32 bytes | Rektangulรฆr Box | ((xl.yl).(x2.y2)) |
| Sti | 16n + 16n bytes | Luk og รฅbn sti | ((xl.yl),...) |
| Polygon | 40 + 16n bytes | Polygon | [(xl.yl),โฆ.] |
| Circle | 24 bytes | Circle | <(xy).r> (midtpunkt og radius) |
Opregnede Typer
Opregnet PostgreSQL datatypen er nyttig til at reprรฆsentere sjรฆldent skiftende oplysninger sรฅsom landekode eller filial-id. Den optalte datatype er reprรฆsenteret i en tabel med fremmednรธgler for at sikre dataintegritet.
Eksempel
Hรฅrfarve er ret statisk i en demografisk database
CREATE TYPE hair_color AS ENUM ('brown','black','red','grey','blond')
Omrรฅde Type
Mange forretningsapplikationer krรฆver data i intervaller. Typisk er to kolonner (eksempel: startdato, slutdato) defineret til at hรฅndtere intervaller. Dette er bรฅde ineffektivt og svรฆrt at vedligeholde.
Postgre har bygget sortimentstyper som fรธlger
- int4range โ Vis rรฆkkevidde af heltal
- int8range โ Vis rรฆkkevidde af bigint
- numrange โ Viser det numeriske omrรฅde
- tstrange โ Hjรฆlper dig med at vise tidsstempel uden tidszone
- mรฆrkelig โ Giver dig mulighed for at vise tidsstempel med tidszone
- datointerval โ datointerval
UUID type
En universelt unik identifikator (UUID) er en 128-bit stรธrrelse, der genereres af en algoritme. Det er meget usandsynligt, at den samme identifikator vil blive genereret af en anden person i verden ved hjรฆlp af den samme algoritme. Derfor er disse identifikatorer et ideelt valg for distribuerede systemer, da de tilbyder unikhed inden for en enkelt database. En UUID skrives som en gruppe af smรฅ hexadecimale cifre, hvor forskellige grupper er adskilt af bindestreger.
PostgreSQL har en native UUID-datatype, der bruger 16 bytes lagerplads. UUID er en ideel datatype til primรฆre nรธgler.
Eksempel
d5f28c97-b962-43be-9cf8-ca1632182e8e
Postgre accepterer ogsรฅ alternative former for UUID-input som alle store bogstaver, ingen bindestreger, klammeparenteser osv.
XML-type
PostgreSQL giver dig mulighed for at gemme XML-data i en datatype, men det er ikke andet end en udvidelse til en tekstdatatype. Men fordelen er, at den kontrollerer, at input-XML'en er veludformet.
Eksempel
XMLPARSE (DOCUMENT '<?xml version="1.0"?><tutorial><chapter>Data Type</chapter><chapter>...</chapter></tutorial>')
JSON type
For at gemme JSON-data PostgreSQL tilbyder 2 datatyper
- JSON
- JSONB
| json | Jsonb |
|---|---|
| En simpel udvidelse af en tekstdatatype med JSON-validering | En binรฆr reprรฆsentation af JSON-dataene |
| Indsรฆttelse er hurtig, men datahentning er relativt langsom. | Indsรฆt er langsomt, men vรฆlg (datahentning er hurtig) |
| Gemmer indtastede data prรฆcis, som de er inklusive blanktegn. | Understรธtter indeksering. Kan optimere mellemrummet for at gรธre hentning hurtigere. |
| Genbehandling ved datahentning | Ingen genbehandling pรฅkrรฆvet ved datahentning |
Den mest udbredte JSON-datatype brugte os jsonb, medmindre der er et eller andet specialiseret behov for at bruge JSON-datatypen.
Eksempel
CREATE TABLE employee ( id integer NOT NULL, age integer NOT NULL, data jsonb );
INSERT INTO employee VALUES (1, 35, '{"name": "Tom Price", "tags": ["Motivated", "SelfLearner"], "onboarded": true}');
Pseudo-typer
PostgreSQL har mange sรฆrlige formรฅl, der kaldes pseudo-typer. Du kan ikke bruge pseudo-typer som PostgreSQL kolonnetyper. Der bruges til at erklรฆre eller funktions argument eller returtype.
Hver af de tilgรฆngelige pseudotyper er nyttige i situationer, hvor en funktions adfรฆrdsdokumenter ikke svarer til blot at tage eller returnere en vรฆrdi af en bestemt SQL datatype.
| Navn | Beskrivelse |
|---|---|
| Enhver | Funktionen accepterer alle inputdatatyper. |
| Et array | Funktionen accepterer enhver array-datatype. |
| Ethvert element | Funktionen accepterer enhver datatype. |
| Enhver opregning | Funktionen accepterer enhver enum datatype. |
| Ikke-array | Funktionen accepterer enhver ikke-matrix datatype. |
| Cstring | Funktionen accepterer eller returnerer nul-termineret C-streng. |
| Intern | Intern funktion accepterer eller returnerer serverintern datatype. |
| Language_handler | Det erklรฆres at returnere sproghandler. |
| Optage | Find en funktion, som returnerer en uspecificeret rรฆkketype. |
| Udlรธser | En triggerfunktion bruges til at returnere trigger. |
Det er vigtigt, at brugeren, der bruger denne funktion, skal sikre sig, at funktionen vil opfรธre sig sikkert, nรฅr en pseudo-type bruges som argumenttype.
Bedste รธver sig i at bruge datatyper
- Brug "tekst" datatype, medmindre du vil begrรฆnse input
- Brug aldrig "char".
- Heltal bruger "int." Brug kun bigint, nรฅr du har rigtig store tal
- Brug "numerisk" nรฆsten altid
- Brug float in PostgreSQL hvis du har IEEE 754 datakilde
