Alle gangbare kolomdatatypes van PostgreSQL, gegroepeerd per familie: gehele getallen, decimalen, tekst, tijd, booleans en UUID's, JSON, netwerkadressen, samengestelde types en extensietypes. Elke rij toont wat het type opslaat en wanneer je het kiest.
PostgreSQL heeft tientallen types, maar dagelijks schemaontwerp gebruikt een kernset. De terugkerende keuzes zijn: integer versus numeric voor getallen, varchar versus text voor strings (text is meestal prima), timestamp versus timestamptz (kies timestamptz voor alles uit de echte wereld), en json versus jsonb (kies jsonb — het is binair en indexeerbaar). Kies het specifiekste type dat nog past; de database handhaaft het voor je.
Referentietabel · 46 items
PostgreSQL-datatypenExplained
46 of 46 rows
Gehele getallen
Een 2-byte geheel getal van -32768 tot 32767.
Zeldzaam; alleen als je ruimte moet besparen.
Een 4-byte geheel getal, ongeveer plus/minus 2 miljard.
De standaardkolom voor gehele getallen.
Een 8-byte geheel getal, ongeveer plus/minus 9 triljoen.
Zeer grote aantallen of externe ID's.
Een automatisch ophogend 4-byte geheel getal.
Verouderde automatisch genummerde sleutels; sinds PG 10 is GENERATED AS IDENTITY de aanbevolen vervanger.
De 2-byte- en 8-byte-varianten van serial.
Automatische nummering afgestemd op een smallint- of bigint-kolom.
Een geheel getal dat de tabel voor je genereert (GENERATED ALWAYS AS IDENTITY).
De moderne serial; SQL-standaard en veiliger tegen handmatige invoer.
Decimalen en floats
Exacte decimalen met willekeurige precisie.
Geld en alles waar afrondfouten onaanvaardbaar zijn.
Een 4-byte float met enkele precisie.
Benaderde wetenschappelijke waarden waar precisie niet kritiek is.
Een 8-byte float met dubbele precisie.
Geodata, statistiek en ML-feature-waarden.
Een valutabedrag met een vaste locale.
Zelden; numeric met een valutacode in de app is overdraagbaarder.
Tekst
Tekst met vaste lengte, opgevuld met spaties.
Codes met bekende breedte; zelden nodig.
Tekst met variabele lengte en een optioneel maximum.
Begrensde strings zoals gebruikersnamen of e-mailadressen.
Tekst met variabele lengte zonder lengtelimiet.
De algemene stringkolom; geen prestatiestraf ten opzichte van varchar.
Tijd
Een kalenderdatum zonder tijdstip.
Verjaardagen en vervaldatums.
Een tijdstip van de dag, met of zonder tijdzone.
Dagelijkse alarmen of openingstijden.
Datum en tijd zonder tijdzone.
Verouderde schema's; vermijd bij nieuw werk.
Datum en tijd opgeslagen als UTC, getoond in de zone van de client.
De standaard voor elk echt moment; verkies dit boven timestamp.
Een tijdspanne, zoals 2 dagen of 3 uur.
Duren en datumrekenkunde.
Boolean, UUID en bytes
Waar of onwaar.
Vlaggen en schakelaars.
Een 128-bit universeel unieke identificatie.
Niet-sequentiële ID's die je veilig kunt blootstellen (genereer in de app of met gen_random_uuid).
Ruwe binaire bytes.
Blobs, afbeeldingen en ondoorzichtige payloads; gebruik objectopslag voor grote bestanden.
Bitstrings met vaste of variabele lengte.
Gepakte vlaggen en protocolvelden; één aan/uit-waarde blijft boolean.
JSON en semi-gestructureerd
JSON geparseerd in een binaire, indexeerbare vorm.
Flexibele of geneste data; de aanbevolen JSON-kolom (ondersteunt GIN-indexen).
JSON bewaard als de originele tekst.
Zelden; alleen als je sleutelvolgorde of exacte witruimte moet behouden.
XML-tekst.
Verouderde integraties die XML vereisen.
Een gecompileerde padexpressie om JSON-data te navigeren.
Filteren binnen jsonb met jsonb_path_query en de SQL/JSON-operators.
Netwerk en zoeken
Een IPv4- of IPv6-hostadres.
IP's van clients of servers opslaan.
Een IP-netwerkblok, zoals 10.0.0.0/24.
Firewallregels en subnetbereiken.
Een 6-byte of 8-byte (EUI-64) MAC-adres.
Identificaties van apparaten en netwerkinterfaces.
Voorverwerkte tekst voor full-text search.
Ingebouwd Postgres-zoeken voordat je een aparte zoekmachine neemt.
Zoektermen gecombineerd met AND-, OR- en prefix-operators.
De queryhelft van full-text search, gematcht tegen een tsvector met @@.
Een positie in de write-ahead log, het logvolgnummer.
Replicatieachterstand en backup-monitoring.
Samengesteld en geavanceerd
Een array van elk basistype, bijv. integer[].
Lijsten van eenvoudige waarden; pak een childtabel als items eigen kolommen nodig hebben.
Één waarde uit een vaste lijst die je definieert.
Statusvelden met een stabiele set opties.
Een eigen rijtype van meerdere velden.
Terugkerende veldgroepen gedeeld tussen tabellen.
Een aaneengesloten bereik tussen twee grenzen.
Planningen, prijsbanden en versieperiodes, met overlap-operatoren.
Een basistype verpakt in constraints die je definieert.
Hergebruikbare regels zoals een niet-lege e-mail, afgedwongen in elke kolom die hem gebruikt.
Een naamloze rij van getypeerde waarden.
Retourwaarden van PL/pgSQL-functies en tussenresultaten van queries.
Ingebouwde tweedimensionale geometrische waarden.
Eenvoudige vlakmeetkunde; echte locaties hebben PostGIS nodig.
Een unsigned 4-byte systeemobjectidentificatie.
Joins op systeemcatalogi; niet voor applicatiekolommen.
Een interne identificatiestring van 63 tekens.
Catalogusqueries; gewone text voor alles wat gebruikers zien.
Extensietypes
Sleutel/waarde-stringparen in één waarde (extensie).
Platte maps; jsonb dekt dit tegenwoordig beter.
Een hiërarchisch labelpad zoals news.tech.ai (extensie).
Bomen met queries op voorouders en nakomelingen.
Tekst die hoofdletterongevoelig vergelijkt (extensie).
Hoofdletterongevoelige uniciteit zoals e-mails, zonder lower()-index.
Geografische en geometrische objecten uit de PostGIS-extensie.
Queries op afstand, insluiting en ruimtelijke indexen.
Extensiefuncties die UUID-waarden genereren.
Verouderde generatie; sinds PG 13 is gen_random_uuid() ingebouwd.