Jeder gängige PostgreSQL-Spaltentyp, nach Familie gruppiert: ganze Zahlen, Dezimalzahlen, Text, Zeit, Boolesche Werte und UUIDs, JSON, Netzwerkadressen, zusammengesetzte Typen und Erweiterungstypen. Jede Zeile zeigt, was der Typ speichert und wann man ihn wählt.
PostgreSQL hat Dutzende Typen, aber das tägliche Schema-Design nutzt einen Kernbestand. Die wiederkehrenden Entscheidungen sind: integer oder numeric für Zahlen, varchar oder text für Zeichenketten (text reicht meist), timestamp oder timestamptz (für alles Reale lieber timestamptz) sowie json oder jsonb (bevorzuge jsonb, es ist binär und indizierbar). Wähle den spezifischsten Typ, der noch passt; die Datenbank erzwingt ihn für dich.
Referenztabelle · 46 Einträge
PostgreSQL-DatentypenExplained
46 of 46 rows
Ganze Zahlen
Ein 2-Byte-Integer von -32768 bis 32767.
Selten; nur wenn du Platz sparen musst.
Ein 4-Byte-Integer, etwa plus/minus 2 Milliarden.
Die Standard-Spalte für ganze Zahlen.
Ein 8-Byte-Integer, etwa plus/minus 9 Trillionen.
Sehr große Zähler oder externe IDs.
Ein automatisch hochzählender 4-Byte-Integer.
Ältere automatisch nummerierte Schlüssel; seit PG 10 ist GENERATED AS IDENTITY der empfohlene Ersatz.
Die 2-Byte- und 8-Byte-Varianten von serial.
Automatische Nummerierung passend zu einer smallint- oder bigint-Spalte.
Ein Integer, den die Tabelle für dich erzeugt (GENERATED ALWAYS AS IDENTITY).
Das moderne serial; SQL-Standard und sicherer gegen manuelle Inserts.
Dezimalzahlen & Gleitkommazahlen
Exakte Dezimalzahlen mit beliebiger Genauigkeit.
Geld und alles, wo Rundungsfehler inakzeptabel sind.
Ein 4-Byte-Float mit einfacher Genauigkeit.
Approximative wissenschaftliche Werte, wenn Genauigkeit nicht kritisch ist.
Ein 8-Byte-Float mit doppelter Genauigkeit.
Geodaten, Statistik und ML-Merkmalswerte.
Ein Währungsbetrag mit fester Locale.
Selten; numeric mit einem Währungscode in der App ist portabler.
Text
Text fester Länge, mit Leerzeichen aufgefüllt.
Codes bekannter Breite; selten nötig.
Text variabler Länge mit optionaler Obergrenze.
Begrenzte Zeichenketten wie Benutzernamen oder E-Mails.
Text variabler Länge ohne Längenlimit.
Die Allzweck-Zeichenkettenspalte; gegenüber varchar gibt es keinen Performance-Nachteil.
Zeit
Ein Kalenderdatum ohne Uhrzeit.
Geburtstage und Fälligkeitsdaten.
Eine Uhrzeit, mit oder ohne Zeitzone.
Tägliche Wecker oder Öffnungszeiten.
Datum und Uhrzeit ohne Zeitzone.
Ältere Schemata; bei neuer Arbeit vermeiden.
Datum und Uhrzeit als UTC gespeichert, in der Client-Zone angezeigt.
Der Standard für jeden realen Zeitpunkt; dies gegenüber timestamp bevorzugen.
Eine Zeitspanne, etwa 2 Tage oder 3 Stunden.
Dauern und Datumsarithmetik.
Boolean, UUID & Bytes
Wahr oder falsch.
Schalter und Flags.
Ein 128-Bit-Bezeichner, der weltweit eindeutig ist.
Nicht sequenzielle IDs, die gefahrlos öffentlich zeigbar sind (in der App oder mit gen_random_uuid erzeugen).
Rohe Binärbytes.
Blobs, Bilder und opake Nutzdaten; große Dateien gehören in Object Storage.
Bitketten fester oder variabler Länge.
Gepackte Flags und Protokollfelder; ein einzelner An/Aus-Wert bleibt boolean.
JSON & semistrukturiert
JSON, geparst in eine binäre, indizierbare Form.
Flexible oder verschachtelte Daten; die empfohlene JSON-Spalte (unterstützt GIN-Indizes).
JSON, als ursprünglicher Text erhalten.
Selten; nur wenn du Schlüsselreihenfolge oder exakte Leerzeichen bewahren musst.
XML-Text.
Ältere Integrationen, die XML verlangen.
Ein kompilierter Pfadausdruck zum Navigieren in JSON-Daten.
Filtern in jsonb mit jsonb_path_query und den SQL/JSON-Operatoren.
Netzwerk & Suche
Eine IPv4- oder IPv6-Hostadresse.
Speichern von Client- oder Server-IPs.
Ein IP-Netzwerkblock, etwa 10.0.0.0/24.
Firewall-Regeln und Subnetz-Bereiche.
Eine 6-Byte- oder 8-Byte- (EUI-64) MAC-Adresse.
Geräte- und Netzwerkadapter-Bezeichner.
Vorverarbeiteter Text für die Volltextsuche.
Die eingebaute Postgres-Suche, bevor eine separate Suchengine nötig wird.
Suchbegriffe, kombiniert mit AND-, OR- und Präfix-Operatoren.
Die Abfragehälfte der Volltextsuche, gematcht gegen einen tsvector mit @@.
Eine Position im Write-Ahead-Log, die Log-Sequenznummer.
Replikationsverzögerung und Backup-Überwachung.
Zusammengesetzt & fortgeschritten
Ein Array eines beliebigen Basistyps, z. B. integer[].
Listen einfacher Werte; greif zu einer Child-Tabelle, wenn Elemente eigene Spalten brauchen.
Ein Wert aus einer festen Liste, die du definierst.
Statusfelder mit stabilem Optionssatz.
Ein eigener Zeilentyp aus mehreren Feldern.
Wiederkehrende Feldgruppen, über Tabellen geteilt.
Ein zusammenhängender Bereich zwischen zwei Grenzen.
Zeitpläne, Preisspannen und Versionsspannen, mit Überlappungsoperatoren.
Ein Basistyp, gehüllt in selbst definierte Constraints.
Wiederverwendbare Regeln wie eine nicht-leere E-Mail, erzwungen an jeder Spalte, die ihn nutzt.
Eine unbenannte Zeile typisierter Werte.
Rückgabewerte von PL/pgSQL-Funktionen und Zwischenergebnisse von Abfragen.
Eingebaute zweidimensionale geometrische Werte.
Einfache Geometrie in der Ebene; echte Orte brauchen PostGIS.
Ein vorzeichenloser 4-Byte-Systemobjektbezeichner.
Joins auf Systemkataloge; nicht für Anwendungsspalten.
Ein interner 63-Zeichen-Bezeichnerstring.
Katalogabfragen; für alles Nutzerseitige normales text.
Erweiterungstypen
Schlüssel/Wert-Zeichenkettenpaare in einem einzigen Wert (Erweiterung).
Flache Maps; jsonb deckt das heute besser ab.
Ein hierarchischer Label-Pfad wie news.tech.ai (Erweiterung).
Bäume mit Vorfahr- und Nachfahren-Abfragen.
Text, der ohne Beachtung von Groß-/Kleinschreibung vergleicht (Erweiterung).
Eindeutigkeit ohne Groß-/Kleinschreibung, etwa bei E-Mails, ohne lower()-Index.
Geografische und geometrische Objekte aus der PostGIS-Erweiterung.
Distanz-, Enthaltungs- und räumliche Indexabfragen.
Erweiterungsfunktionen, die UUID-Werte erzeugen.
Ältere Erzeugung; seit PG 13 ist gen_random_uuid() eingebaut.