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.

  • ๐Ÿ”ค Karaktertyper: CHAR, VARCHAR og TEXT gemmer tekstvรฆrdier med fast lรฆngde, variabel lรฆngde og ubegrรฆnset lรฆngde.
  • ๐Ÿ”ข Numeriske typer: Heltal og flydende taltyper spรฆnder fra smallint til bigint, plus nรธjagtige numeriske og decimalvรฆrdier.
  • ๐Ÿ•’ Dato og tid: Tidsstempel-, dato-, klokkeslรฆts- og intervaltyper tilbyder mikrosekundprรฆcision med valgfri tidszoner.
  • โœ… Boolean og Enum: Boolesk vรฆrdi gรฆlder for sand, falsk eller nul, mens opregnede typer modellerer sjรฆldent รฆndrende faste sรฆt.
  • ๐ŸŒ Specialiserede typer: Netvรฆrk, geometri, UUID, XML, JSON og JSONB hรฅndterer adresser, former, identifikatorer og strukturerede data.
  • ๐Ÿ’ก Bedste praksis: Foretrรฆk TEKST til strenge og NUMERISK til tal, og opret kun brugerdefinerede typer, nรฅr det er nรธdvendigt.

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

  1. Lagerpladsbesparelse
  2. Kontrol af inputfejl
  3. 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')

Opregnede Typer

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

  1. JSON
  2. 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

Ofte Stillede Spรธrgsmรฅl

Numerisk (decimal) gemmer nรธjagtige vรฆrdier og er ideel til penge og prรฆcise beregninger. Flydende komma-typer (reelle og dobbelte) gemmer omtrentlige vรฆrdier med hurtigere ydeevne, men med smรฅ afrundingsfejl, sรฅ undgรฅ dem til nรธjagtige รธkonomiske data.

Ja. PostgreSQL lader enhver kolonne gemme et array af en basistype, sรฅsom integer[] eller text[]. Arrays er nyttige til lister over vรฆrdier og kan sรธges i, indekseres og fjernes fra forespรธrgsler.

Brug den numeriske type til valuta, da den gemmer nรธjagtige decimalvรฆrdier. Undgรฅ flydende komma-typer, som introducerer afrundingsfejl. Den dedikerede pengetype findes ogsรฅ, men er mindre fleksibel til data i flere valutaer.

AI kan gennemgรฅ dine eksempeldata og anbefale passende typer, sรฅsom numerisk for penge eller jsonb for fleksible felter. Den forklarer afvejninger i lagring, prรฆcision og ydeevne, sรฅ du kan trรฆffe en beslutning med tillid.

Ja. AI kan kortlรฆgge datatyper fra MySQL, Oracleeller SQL Server til deres PostgreSQL รฆkvivalenter og flag-uoverensstemmelser, sรฅsom TINYINT eller NVARCHAR, helping du planlรฆgger en mere problemfri databasemigrering.

Opsummer dette indlรฆg med: