Alla vanliga kolumndatatyper i PostgreSQL, grupperade per familj: heltal, decimaler, text, tid, booleska värden och UUID, JSON, nätverksadresser, sammansatta typer och extensiontyper. Varje rad visar vad typen lagrar och när du bör välja den.
PostgreSQL har dussintals typer, men dagligt schemadesign använder en kärnuppsättning. De återkommande valen är: integer mot numeric för tal, varchar mot text för strängar (text räcker oftast), timestamp mot timestamptz (föredra timestamptz för allt verkligt) och json mot jsonb (föredra jsonb — det är binärt och indexerbart). Välj den mest specifika typ som fortfarande passar; databasen ser till att den följs.
Referenstabell · 46 poster
Datatyper i PostgreSQLExplained
46 of 46 rows
Heltal
Ett 2-byte heltal från -32768 till 32767.
Sällan; bara när du måste spara utrymme.
Ett 4-byte heltal, ungefär plus/minus 2 miljarder.
Standardkolumnen för heltal.
Ett 8-byte heltal, ungefär plus/minus 9 triljoner.
Väldigt stora räknare eller externa ID:n.
Ett automatiskt ökande 4-byte heltal.
Äldre automatiskt numrerade nycklar; sedan PG 10 är GENERATED AS IDENTITY den rekommenderade ersättaren.
2- och 8-byte-varianterna av serial.
Automatisk numrering anpassad till en smallint- eller bigint-kolumn.
Ett heltal som tabellen genererar åt dig (GENERATED ALWAYS AS IDENTITY).
Det moderna serial; SQL-standard och säkrare mot manuella infogningar.
Decimaler och flyttal
Exakta decimaler med godtycklig precision.
Pengar och allt där avrundningsfel är oacceptabla.
Ett 4-byte flyttal med enkel precision.
Ungefärliga vetenskapliga värden där precision inte är kritisk.
Ett 8-byte flyttal med dubbel precision.
Geodata, statistik och ML-featurevärden.
Ett valutabelopp med fast locale.
Sällan; numeric med en valutakod i appen är mer portabelt.
Text
Text med fast längd, utfylld med mellanslag.
Koder med känd bredd; sällan nödvändigt.
Text med variabel längd och valfri gräns.
Begränsade strängar som användarnamn eller e-post.
Text med variabel längd utan längdgräns.
Den generella strängkolumnen; ingen prestandaförlust mot varchar.
Tid
Ett kalenderdatum utan tid på dygnet.
Födelsedagar och förfallodatum.
En tid på dygnet, med eller utan tidszon.
Dagliga alarm eller öppettider.
Datum och tid utan tidszon.
Äldre scheman; undvik i nytt arbete.
Datum och tid lagrade som UTC, visade i klientens zon.
Standardvalet för varje verkligt ögonblick; föredra detta framför timestamp.
Ett tidsspann, som 2 dagar eller 3 timmar.
Varaktigheter och datumaritmetik.
Boolean, UUID och bytes
Sant eller falskt.
Flaggor och växlar.
En 128-bitars globalt unik identifierare.
Icke-sekventiella ID:n som är säkra att exponera (generera i appen eller med gen_random_uuid).
Råa binära bytes.
Blobs, bilder och opaka payloads; föredra object storage för stora filer.
Bitsträngar med fast eller variabel längd.
Packade flaggor och protokollfält; ett enskilt på/av-värde är fortfarande boolean.
JSON och semistrukturerat
JSON tolkad till en binär, indexerbar form.
Flexibla eller nästlade data; den rekommenderade JSON-kolumnen (stöder GIN-index).
JSON behållen som originaltexten.
Sällan; bara när du måste bevara nyckelordning eller exakta mellanslag.
XML-text.
Äldre integrationer som kräver XML.
Ett kompilerat sökvägsuttryck för att navigera i JSON-data.
Filtrering i jsonb med jsonb_path_query och SQL/JSON-operatorerna.
Nätverk och sök
En IPv4- eller IPv6-värdadress.
Lagring av klient- eller server-IP:n.
Ett IP-nätverksblock, som 10.0.0.0/24.
Brandväggsregler och subnätsintervall.
En 6- eller 8-byte (EUI-64) MAC-adress.
Identifierare för enheter och nätverksgränssnitt.
Förbehandlad text för fulltextsök.
Postgres inbyggda sök innan du tar till en separat sökmotor.
Sökord kombinerade med AND-, OR- och prefixoperatorer.
Frågedelen av fulltextsök, matchad mot en tsvector med @@.
En position i write-ahead-loggen, loggsekvensnumret.
Övervakning av replikeringsfördröjning och säkerhetskopior.
Sammansatta och avancerade
En array av vilken bastyp som helst, t.ex. integer[].
Listor med enkla värden; ta en barntabell när element behöver egna kolumner.
Ett värde från en fast lista du definierar.
Statusfält med en stabil uppsättning alternativ.
En egen radtyp av flera fält.
Återkommande fältgrupper delade mellan tabeller.
Ett sammanhängande intervall mellan två gränser.
Scheman, prisband och versionsintervall, med överlappningsoperatorer.
En bastyp insvept i begränsningar du definierar.
Återanvändbara regler som en icke-tom e-post, genomdrivna i varje kolumn som använder den.
En namnlös rad av typade värden.
Returvärden från PL/pgSQL-funktioner och mellanliggande frågeresultat.