Einführung
PostgreSQL ist ein relationales Open-Source-Datenbankverwaltungssystem, das für seine Robustheit und Erweiterbarkeit bekannt ist. Das bedeutet auch, dass PostgreSQL eine Vielzahl von Datentypen für Benutzer anbietet.
In diesem Tutorial behandeln wir die verschiedenen integrierten Datentypen, die in PostgreSQL verfügbar sind.
PostgreSQL-Datentypen
Beim Erstellen einer Tabelle in PostgreSQL können Sie für jede Spalte einen Datentyp angeben. PostgreSQL unterstützt eine breite Palette integrierter Datentypen:
Charakter
PostgreSQL verwendet Zeichendatentypen zum Speichern von Textwerten. Es gibt drei Zeichendatentypen in PostgreSQL:
Name | Beschreibung |
Zeichen(n), Zeichen(n) | Strings fester Länge, wobei n ist die Anzahl der Zeichen. Leerzeichen rechts aufgefüllt, um n zu entsprechen . |
Zeichenvariable(n), Varchar(n) | String variabler Länge mit einer Zeichenbegrenzung, wobei n ist die Anzahl der Zeichen. |
Text | Variable Länge, unbegrenzter String. |
Numerische Typen
Numerische Datentypen beinhalten:
- Zwei-, Vier- und Acht-Byte-Ganzzahlen
- Vier- und Acht-Byte-Gleitkommazahlen
- Wählbare Dezimalstellen:
Name | Speichergröße | Beschreibung | Bereich |
smallint | 2 Byte | Ganzzahl mit kleinem Bereich. | -32768 bis +32767 |
Ganzzahl | 4 Byte | Ganzzahl im mittleren Bereich. | -2147483648 bis +2147483647 |
bigint | 8 Byte | Ganzzahl mit großem Bereich. | -9223372036854775808 bis 9223372036854775807 |
dezimal | Variable | Benutzerdefinierte Dezimalzahl. | Bis zu 131072 Stellen vor dem Dezimalpunkt. Bis zu 16383 Nachkommastellen |
numerisch | Variable | Benutzerdefinierte Dezimalzahl. | bis zu 131072 Stellen vor dem Komma. Bis zu 16383 Nachkommastellen |
echt | 4 Byte | Variable Genauigkeit dezimal. | 6 Dezimalstellen Genauigkeit |
doppelte Genauigkeit | 8 Byte | Variable Genauigkeit dezimal. | 15 Dezimalstellen Genauigkeit |
Kleinserie | 2 Byte | Kleine, automatisch inkrementierende Ganzzahl. | 1 bis 32767 |
Seriennummer | 4 Byte | Mittelgroße, automatisch inkrementierende Ganzzahl. | 1 bis 2147483647 |
bigserial | 8 Byte | Große automatisch inkrementierende Ganzzahl. | 1 bis 9223372036854775807 |
Währung
Der monetäre Datentyp speichert einen numerischen Geldbetrag mit fester gebrochener Genauigkeit. Dieser Typ speichert bis zu 8 Byte Daten mit einem Bereich von -92233720368547758,08 bis +92233720368547758,07 und verwendet numerisch , Ganzzahl und bigint Datentypen als Werte.
Datum/Uhrzeit
PostgreSQL unterstützt alle Standard-SQL-Datums- und Zeitdatentypen , mit einer Auflösung von 1 Mikrosekunde oder 14 Stellen. Date ist die einzige Ausnahme, mit einer Auflösung von einem Tag, gezählt nach dem gregorianischen Kalender:
Name | Speichergröße | Beschreibung | Bereich |
Zeitstempel | 8 Byte | Datum und Uhrzeit, ohne Zeitzone. | 4713 v. Chr. bis 294276 n. Chr. |
Zeitstempel | 8 Byte | Datum und Uhrzeit mit Zeitzone. | 4713 v. Chr. bis 294276 n. Chr. |
Datum | 4 Byte | Datum. | 4713 v. Chr. bis 294276 n. Chr. |
Zeit ohne Zeitzone | 8 Byte | Tageszeit, ohne Zeitzone. | 00:00:00 bis 24:00:00 |
Zeit mit Zeitzone | 12 Byte | Tageszeit, mit Zeitzone. | 00:00:00 + 1459 bis 24:00:00-1459 |
Intervall | 12 Byte | Zeitintervall. | -178000000 bis 178000000 Jahre |
Binär
PostgreSQL kann binäre Zeichenfolgen variabler Länge als Bytea-Datentyp speichern , wobei 1 oder 4 Bytes plus die Größe der tatsächlichen Binärzeichenfolge benötigt werden.
Boolesch
Ein boolescher Datentyp wird mit bool
deklariert oder boolean
Schlüsselwörter. Es kann wahr (1) sein , falsch (0) , oder unbekannt (null) Werte.
Aufgezählt
Aufgezählte Datentypen bestehen aus einer statischen, geordneten Menge von Werten, wie Zahlen von 1 bis 10 oder Monaten im Jahr. Im Gegensatz zu anderen Datentypen können Sie Aufzählungstypen mit create type
erstellen Befehl:
CREATE TYPE year AS ENUM ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
Bit-String
Bitstringtyp speichert Zeichenfolgen aus Einsen und Nullen, die zum Speichern oder Visualisieren von Bitmasken verwendet werden:
Name | Beschreibung |
bit(n) | Speichert einen Bit-String mit einer festen Länge von n Zeichen. |
variierend(n) | Speichert eine Bitfolge unterschiedlicher Länge bis zu n Zeichen. |
UUID
Eine UUID (Universally Unique Identifiers) ist ein Satz von 32 Ziffern, der von einem Algorithmus erstellt wird. Es besteht aus mehreren Gruppen von vier, acht und zwölf Ziffern, die durch Bindestriche getrennt sind:
Netzwerkadresse
PostgreSQL verwendet Datentypen für Netzwerkadressen zum Speichern von IPv4-, IPv6- und MAC-Adressen:
Name | Speichergröße | Beschreibung |
cidr | 7 oder 19 Byte | Speichert IPv4- und IPv6-Netzwerke. |
inet | 7 oder 19 Byte | Speichert IPv4- und IPv6-Hosts und -Netzwerke. |
macaddr | 6 Byte | Speichert MAC-Adressen. |
Die Verwendung von Netzwerkadressdatentypen hat mehrere Vorteile gegenüber der Verwendung von reinem Text. Dazu gehören das Einsparen von Speicherplatz, spezialisierte Funktionen und Befehle sowie eine einfachere Fehlerprüfung.
Textsuche
Textsuche-Datentyp ermöglicht es Ihnen, in einer Sammlung von Dokumenten in natürlicher Sprache nach der besten Übereinstimmung zu suchen:
Name | Beschreibung |
tsvektor | Stellt ein für die Textsuche optimiertes Dokument dar, mit einer Liste unterschiedlicher Wörter, die normalisiert sind, um verschiedene Varianten desselben Wortes (Lexeme) zusammenzuführen. |
tsquery | Speichert die Schlüsselwörter, die gesucht werden müssen, und kombiniert sie mit booleschen Operatoren (UND, ODER und NICHT). |
Geometrisch
Geometrische Datentypen stellen räumliche Objekte dar, die in zwei Dimensionen gerendert wurden, wie z. B. Punkte, Linien und Polygone:
Name | Speichergröße | Vertretung | Numerische Beschreibung |
Punkt | 16 Byte | Punkt auf einem Flugzeug. | (x,y) |
Linie | 32 Byte | Unendliche Linie. | ((x1,y1),(x2,y2)) |
lseg | 32 Byte | Endliches Liniensegment. | ((x1,y1),(x2,y2)) |
Box | 32 Byte | Rechteckiger Kasten. | ((x1,y1),(x2,y2)) |
Pfad | 16+16n Byte | Offener oder geschlossener Pfad. | ((x1,y1),...(xn,yn)) |
Polygon | 40+16n Byte | Polygon. | ((x1,y1),...(xn,yn)) |
Kreis | 24 Byte | Kreis. | ((x,y),r) (Mittelpunkt und Radius) |
XML
Mit PostgreSQL können Sie XML-Daten als XML-Datentyp speichern mit XMLPARSE
Funktion:
XMLPARSE (DOCUMENT [document name] WELLFORMED)
oder:
XMLPARSE (CONTENT [XML content] WELLFORMED)
Wo:
[document name]
:Ein Single-Root-XML-Dokument.[XML content]
:Gültiger XML-WertWELLFORMED
:Diese Option garantiert, dass [Dokumentname] oder [XML-Inhalt] in ein wohlgeformtes XML-Dokument aufgelöst werden. Verwenden Sie es nur, wenn Sie nicht möchten, dass die Datenbank prüft, ob die Eingabe wohlgeformt ist.
JSON
PostgreSQL bietet zwei JSON-Datentypen :
- json: Eine Erweiterung des Textdatentyps mit JSON-Validierung. Dieser Datentyp speichert Daten genau so, wie sie sind (einschließlich Leerzeichen). Sie können es schnell in die Datenbank einfügen, aber es ist aufgrund der erneuten Verarbeitung relativ langsam abzurufen.
- jsonb: Stellt JSON-Daten in einem Binärformat dar. Das Einfügen in die Datenbank ist langsamer, aber die Indizierungsunterstützung und das Fehlen einer erneuten Verarbeitung machen den Abruf erheblich schneller.
Array
Der Array-Datentyp können Sie eine Spalte einer Tabelle als mehrdimensionales Array definieren, das jeden Basis-, Aufzählungs- oder zusammengesetzten Datentyp verwenden kann. Sie können Arrays wie jede andere Spalte in der Datenbank deklarieren, ändern und durchsuchen.
Komposit
Zusammengesetzte Datentypen ermöglichen es Ihnen, eine Zeile oder einen Datensatz einer Tabelle als Datenelement zu verwenden. Ähnlich wie bei Array-Datentypen können Sie auch zusammengesetzte Werte deklarieren, suchen und ändern.
Bereich
Bereichsdatentypen Verwenden Sie diskrete oder kontinuierliche Bereiche anderer Datentypen. Zu den integrierten Bereichsdatentypen gehören:
Name | Beschreibung |
int4range | Bereich mittelgroßer Ganzzahlen. |
int8range | Bereich großer Ganzzahlen. |
Nummernbereich | Bereich der benutzerdefinierten Dezimalstellen. |
seltsam | Zeit- und Datumsbereich ohne Zeitzone. |
tstzbereich | Zeit- und Datumsbereich mit einer Zeitzone. |
Zeitraum | Zeitraum. |
Sie können auch benutzerdefinierte Bereichstypen erstellen, indem Sie andere Datentypen als Grundlage verwenden.
Objektkennung
PostgreSQL verwendet Objektbezeichner als Primärschlüsselsysteme, wenn spezialisierte Ein- und Ausgabeoperationen durchgeführt werden:
Name | Referenzen | Beschreibung |
oid | beliebig | Numerische Objektkennung. |
regproc | pg_proc | Funktionsname. |
regprozedur | pg_proc | Funktion mit Argumenttypen. |
regoper | pg_operator | Betreibername. |
Regoperator | pg_operator | Operator mit Argumenttypen. |
regclass | pg_class | Beziehungsname. |
regtype | pg_type | Name des Datentyps. |
regconfig | pg_ts_config | Konfiguration der Textsuche. |
Regierungsverzeichnis | pg_ts_dict | Textsuchwörterbuch. |
Pseudotypen
Pseudotypen sind eine Sammlung spezieller Einträge zum Deklarieren des Argument- oder Ergebnistyps einer Funktion:
Name | Beschreibung |
beliebig | Funktion akzeptiert jeden Eingabedatentyp. |
jedes Element | Funktion akzeptiert jeden Datentyp. |
Anyarray | Funktion akzeptiert jeden Array-Datentyp. |
beliebiges Nichtarray | Funktion akzeptiert jeden Nicht-Array-Datentyp. |
anyenum | Funktion akzeptiert jeden aufgezählten Datentyp. |
beliebig | Funktion akzeptiert jeden Bereichsdatentyp. |
cstring | Funktion akzeptiert oder gibt einen nullterminierten C-String zurück. |
intern | Funktion akzeptiert oder gibt serverinternen Datentyp zurück. |
language_handler | Funktion gibt Sprachhandler zurück. |
fdw_handler | Ein Wrapper-Handler für fremde Daten gibt fdw_handler zurück. |
Rekord | Sucht eine Funktion, die einen nicht angegebenen Zeilentyp zurückgibt. |
Auslöser | Eine Trigger-Funktion gibt Trigger zurück. |
nichtig | Funktion gibt keinen Wert zurück. |