PostgreSQL bietet eine Vielzahl nativer Datentypen für Benutzer. Benutzer können mithilfe des Befehls CREATE TYPE neue Typen hinzufügen. Außerdem werden Abfragen einfacher und lesbarer.
Datentypen in PostgreSQL
PostgreSQL unterstützt die folgenden Datentypen:
- Texttypen
- Numerische Typen
- Daten und Zeiten
- XML
- JSON
- Boolescher Wert
- Bits
- Binärdaten
- Netzwerk
- Arrays
- Erstellen Sie Ihren Datentyp
- Boolescher Wert
- Zeitlich
- UUID
- Array
- JSON
- Spezielle Datentypen zum Speichern einer Netzwerkadresse und geometrischer Daten.
Lassen Sie uns die PostgreSQL-Datentypen im Detail untersuchen
- Zeichendatentypen
- Numerische Datentypen
- Binäre Datentypen
- Netzwerkadressentyp
- Textsuchtyp
- Datums- / Uhrzeit-Datentypen
- Boolescher Typ
- Geometrische Datentypen
- Aufgezählte Typen
- Bereichstyp
- UUID-Typ
- XML-Typ
- JSON-Typ
- Pseudo-Typen
Zeichendatentypen
PostgreSQL unterstützt Zeichendatentypen zum Speichern von Textwerten. PostgreSQL erstellt Zeichendatentypen aus denselben internen Strukturen. PostgreSQL bietet drei Zeichendatentypen: CHAR (n), VARCHAR (n) und TEXT.
Name | Beschreibung |
---|---|
varchar (n) | Ermöglicht das Deklarieren einer variablen Länge mit einem Limit |
Char (n) | Feste Länge, blank gepolstert |
Text | Use kann diesen Datentyp verwenden, um eine Variable mit unbegrenzter Länge zu deklarieren |
Numerische Datentypen
PostgreSQL unterstützt zwei verschiedene Arten von Zahlen:
- Ganzzahlen
- Gleitkommazahlen
Name | Ladengröße | Reichweite |
---|---|---|
smallint | 2 Bytes | -32768 bis +32767 |
ganze Zahl | 4 Bytes | -2147483648 bis +2147483647 |
Bigint | 8 Bytes | -9223372036854775808 bis 9223372036854775807 |
Dezimal | Variable | Wenn Sie es als dezimalen Datentyp deklariert haben, reicht der Bereich von 131072 Stellen vor dem Dezimalpunkt bis 16383 Stellen nach dem Dezimalpunkt |
numerisch | Variable | Wenn Sie es als Zahl deklarieren, können Sie eine Zahl mit bis zu 131072 Stellen vor dem Dezimalpunkt und bis zu 16383 Stellen nach dem Dezimalpunkt angeben |
echt | 4 Bytes | Genauigkeit von 6 Dezimalstellen |
doppelt | 8 Bytes | Genauigkeit von 15 Dezimalstellen |
Binäre Datentypen
Eine binäre Zeichenfolge ist eine Folge von Oktetten oder Bytes. Binäre Postgres-Datentypen werden auf zwei Arten unterteilt.
- Binäre Zeichenfolgen ermöglichen das Speichern von Quoten mit dem Wert Null
- Nicht druckbare Oktette
Zeichenketten lassen keine Null-Oktette zu und erlauben auch keine anderen Oktettwerte und -sequenzen, die gemäß den Zeichensatz-Codierungsregeln der Datenbank ungültig sind.
Name | Speichergröße | Beschreibung |
---|---|---|
Byte | 1 bis 4 Bytes plus die Größe der Binärzeichenfolge | Binäre Zeichenfolge mit variabler Länge |
Netzwerkadressentyp
Viele Anwendungen speichern Netzwerkinformationen wie die IP-Adresse von Benutzern oder
Sensoren. PostgreSQL verfügt über drei native Typen, mit denen Sie die Netzwerkdaten optimieren können.
Name | Größe | Beschreibung |
---|---|---|
Apfelwein | 7 oder 19 Byes | IPV4- und IPv6-Netzwerke |
Inet | 7 oder 19 Bytes | IPV4- und IPV5-Host und -Netzwerke |
macaddr | 6 Bytes | MAC-Adressen |
Die Verwendung von Netzwerkadressentypen bietet folgende Vorteile
- Speicherplatz sparen
- Eingabefehlerprüfung
- Funktionen wie das Suchen von Daten nach Subnetz
Textsuchtyp
PostgreSQL bietet zwei Datentypen, die die Volltextsuche unterstützen. Bei der Volltextsuche wird eine Sammlung von Dokumenten in natürlicher Sprache durchsucht, um diejenigen zu suchen, die am besten zu einer Abfrage passen.
- Tsvector-Textsuche PostgreSQL-Variablentypen repräsentieren ein Dokument in einer für die Textsuche optimierten Form
- Die Textsuche vom Abfragetyp speichert die Schlüsselwörter, die gesucht werden müssen
Datums- / Uhrzeit-Datentypen
Der PostgreSQL-Zeitstempel bietet eine Genauigkeit von Mikrosekunden anstelle einer Genauigkeit von Sekunden. Darüber hinaus haben Sie auch die Möglichkeit, mit oder ohne Zeitzone zu speichern. PostgreSQL konvertiert den Zeitstempel mit der Zeitzone bei der Eingabe in UTC und speichert ihn.
Die Eingabe von Datum und Uhrzeit wird in verschiedenen Formaten akzeptiert, einschließlich herkömmlicher Postgres, ISO 8601. SQL-kompatibel usw.
PostgreSQL unterstützt die Bestellung von Tag / Monat / Jahr. Unterstützte Formate sind DMY, MDY, YMD
Zeitliche Datentypen
Name | Größe | Reichweite | Auflösung |
---|---|---|---|
Zeitstempel ohne Zeitzone | 8 Bytes | 4713 v. Chr. Bis 294276 n. Chr | 1 Mikrosekunde / 14 Stellen |
Zeitstempel mit Zeitzone | 8 Bytes | 4713 v. Chr. Bis 294276 n. Chr | 1 Mikrosekunde / 14 Stellen |
Datum | 4 Bytes | 4713 v. Chr. Bis 294276 n. Chr | Ein Tag |
Zeit ohne Zeitzone | 8 Bytes | 00:00:00 bis 24:00:00 | 1 Mikrosekunde / 14 Stellen |
Zeit mit Zeitzone | 12 Bytes | 00:00:00 + 1459 bis 24: 00: 00-1459 | 1 Mikrosekunde / 14 Stellen |
Intervall | 12 Bytes | -178000000 bis 178000000 Jahre | 1 Mikrosekunde / 14 Stellen |
Beispiele:
Eingang | Beschreibung |
---|---|
2025-09-07 | ISO 8601, 7. September mit einem beliebigen Datumsstil (empfohlenes Format) |
7. September 2025 | 7. September mit jedem Datumsstil |
07.09.2025 | 7. September mit MDY, 9. Juli mit DMY |
9/7/25 | 7. September 2025 mit MDY |
2025-Sep-7 | 7. September mit jedem Datumsstil |
7. September 2008 | 7. September mit jedem Datumsstil |
7-Sep-25 | 7. September 2025 mit YMD |
20250907 | ISO 8601,7 Sep 20225 in einem beliebigen Modus |
2025.250 | Jahr und Tag des Jahres, in diesem Fall der 7. September 2025 |
J25250 | Julianisches Datum |
Zeit / Zeit mit Zeitzoneneingabe
Eingang | Beschreibung |
---|---|
11: 19: 38.507 11:19:38 11:19 111938 | ISO 8601 |
11:19 Uhr | Gleich wie 11:19 |
23:19 Uhr | das gleiche wie 23:19 |
23: 19-3 23: 19-03: 00 231900-03 | ISO 8601, wie 23:19 EST |
23:19 EST | Zeitzone als EST angegeben, wie 23:19 EST |
Boolescher Typ
Ein boolescher Datentyp kann enthalten sein
- Wahr
- Falsch
- Null
Werte.
Sie verwenden ein bool- oder boolesches Schlüsselwort, um eine Spalte mit dem booleschen Datentyp zu deklarieren.
Wenn Sie Werte in eine boolesche Spalte einfügen, konvertiert Postgre Werte wie
- Ja
- y
- 1
- t
- wahr
in 1.
Während Werte wie
- Nein
- N.
- 0
- F.
- Falsch
werden in 0 konvertiert
Bei der Auswahl der Daten werden die Werte wieder in yes, true, y usw. konvertiert.
Geometrische Datentypen
Geometrische Datentypen repräsentieren zweidimensionale räumliche Objekte. Sie helfen bei der Ausführung von Vorgängen wie Rotationen, Skalieren, Verschieben usw.
Name | Speichergröße | Darstellung | Beschreibung |
---|---|---|---|
Punkt | 16 Bytes | Zeigen Sie auf ein Flugzeug | (x, y) |
Linie | 32 Bytes | Unendliche Linie | ((xl.yl). (x2.y2)) |
Lseg | 32 Bytes | Endliches Liniensegment | ((xl.yl). (x2.y2)) |
Box | 32 Bytes | Rechteckige Box | ((xl.yl). (x2.y2)) |
Pfad | 16n + 16n Bytes | Pfad schließen und öffnen | ((xl.yl),…) |
Polygon | 40 + 16n Bytes | Polygon | [(xl.yl)….] |
Kreis | 24 Bytes | Kreis | <(xy) .r> (Mittelpunkt und Radius) |
Aufgezählte Typen
Der aufgezählte PostgreSQL-Datentyp ist nützlich, um selten sich ändernde Informationen wie Ländercode oder Zweigstellen-ID darzustellen. Der Aufzählungstyp wird in einer Tabelle mit Fremdschlüsseln dargestellt, um die Datenintegrität sicherzustellen.
Beispiel:
Die Haarfarbe ist in einer demografischen Datenbank ziemlich statisch
CREATE TYPE hair_color AS ENUM('brown','black','red','grey','blond')
Bereichstyp
Viele Geschäftsanwendungen erfordern Daten in Bereichen. In der Regel werden zwei Spalten (Beispiel: Startdatum, Enddatum) definiert, um Bereiche zu behandeln. Dies ist sowohl ineffizient als auch schwierig zu warten.
Postgre hat Bereichstypen wie folgt erstellt
- int4range - Zeigt den Bereich der Ganzzahl an
- int8range - Anzeigebereich von bigint
- numrange - Zeigt den numerischen Bereich an
- tstrange - Hilft Ihnen, Zeitstempel ohne Zeitzone anzuzeigen
- seltsam - Ermöglicht die Anzeige des Zeitstempels mit der Zeitzone
- Datumsbereich - Datumsbereich
UUID-Typ
Universally Unique Identifications (UUID) ist eine 128-Bit-Größe, die von einem Algorithmus generiert wird. Es ist sehr unwahrscheinlich, dass dieselbe Kennung von einer anderen Person auf der Welt mit demselben Algorithmus generiert wird. Aus diesem Grund sind diese Kennungen für verteilte Systeme eine ideale Wahl, da sie die Einzigartigkeit innerhalb einer einzelnen Datenbank bieten. Eine UUID wird als Gruppe von hexadezimalen Kleinbuchstaben geschrieben, wobei verschiedene Gruppen durch Bindestriche getrennt sind.
PostgreSQL hat einen nativen UUID-Datentyp, der 16 Byte Speicherplatz beansprucht. UUID ist ein idealer Datentyp für Primärschlüssel.
Beispiel:
d5f28c97-b962-43be-9cf8-ca1632182e8e
Postgre akzeptiert auch alternative Formen von UUID-Eingaben wie Großbuchstaben, keine Bindestriche, geschweiften Klammern usw.
XML-Typ
Mit PostgreSQL können Sie XML-Daten in einem Datentyp speichern, es ist jedoch nichts anderes als eine Erweiterung eines Textdatentyps. Der Vorteil ist jedoch, dass überprüft wird, ob das Eingabe-XML wohlgeformt ist.
Beispiel:
XMLPARSE (DOCUMENT '') Data Type …
JSON-Typ
Speichern von JSON-Daten PostgreSQL bietet zwei Datentypen
- JSON
- JSONB
json | Jsonb |
---|---|
Eine einfache Erweiterung eines Textdatentyps mit JSON-Validierung | Eine binäre Darstellung der JSON-Daten |
Das Einfügen ist schnell, der Datenabruf jedoch relativ langsam. | Das Einfügen ist langsam, aber wählen Sie (Datenabruf ist schnell) |
Speichert eingegebene Daten genau so, wie sie Leerzeichen enthalten. | Unterstützt die Indizierung. Optimiert möglicherweise das Leerzeichen, um das Abrufen zu beschleunigen. |
Wiederaufbereitung beim Datenabruf | Beim Abrufen der Daten ist keine erneute Verarbeitung erforderlich |
Der am häufigsten verwendete JSON-Datentyp verwendet jsonb, es sei denn, es besteht eine spezielle Notwendigkeit, den JSON-Datentyp zu verwenden.
Beispiel:
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"], "onboareded": true}');
Pseudo-Typen
PostgreSQL hat viele spezielle Einträge, die als Pseudotypen bezeichnet werden. Sie können keine Pseudotypen als PostgreSQL-Spaltentypen verwenden. Es werden verwendet, um das Argument oder den Rückgabetyp der Funktion zu deklarieren oder zu funktionieren.
Jeder der verfügbaren Pseudo-Typen ist in Situationen hilfreich, in denen die Verhaltensdokumente einer Funktion nicht dem einfachen Nehmen oder Zurückgeben eines Werts eines bestimmten SQL-Datentyps entsprechen.
Name | Beschreibung |
---|---|
Irgendein | Die Funktion akzeptiert alle Eingabedatentypen. |
Eine Anordnung | Die Funktion akzeptiert jeden Array-Datentyp. |
Beliebiges Element | Die Funktion akzeptiert jeden Datentyp. |
Jede Aufzählung | Die Funktion akzeptiert jeden Aufzählungsdatentyp. |
Nonarray | Die Funktion akzeptiert alle Nicht-Array-Datentypen. |
Cstring | Die Funktion akzeptiert oder gibt eine nullterminierte C-Zeichenfolge zurück. |
Intern | Die interne Funktion akzeptiert oder gibt den serverinternen Datentyp zurück. |
Language_handler | Es wird deklariert, dass der Language Handler zurückgegeben wird. |
Aufzeichnung | Suchen Sie eine Funktion, die einen nicht angegebenen Zeilentyp zurückgibt. |
Auslösen | Eine Triggerfunktion wird verwendet, um den Trigger zurückzugeben. |
Es ist wichtig, dass der Benutzer, der diese Funktion verwendet, sicherstellen muss, dass sich die Funktion sicher verhält, wenn ein Pseudotyp als Argumenttyp verwendet wird.
Best Practices für die Verwendung von Datentypen
- Verwenden Sie den Datentyp "Text", es sei denn, Sie möchten die Eingabe einschränken
- Verwenden Sie niemals "char".
- Ganzzahlen verwenden "int". Verwenden Sie bigint nur, wenn Sie wirklich große Zahlen haben
- Verwenden Sie fast immer "numerisch"
- Verwenden Sie float in PostgreSQL, wenn Sie über eine IEEE 754-Datenquelle verfügen
Zusammenfassung
- PostgreSQL bietet eine Vielzahl nativer Datentypen für Benutzer
- PostgreSQL unterstützt Zeichendatentypen zum Speichern von Textwerten
- PostgreSQL unterstützt zwei verschiedene Arten von Zahlen: 1. Ganzzahlen, 2. Gleitkommazahlen
- Eine binäre Zeichenfolge ist eine Folge von Bytes oder Oktetten
- PostgreSQL verfügt über einen Netzwerkadressentyp, mit dem Sie die Speicherung von Netzwerkdaten optimieren können
- Textsuche PostgreSQL-Datenstrukturen unterstützen die Volltextsuche
- Datum / Uhrzeit PSQL-Datentypen ermöglichen Datums- und Uhrzeitinformationen in verschiedenen Formaten
- Boolesche Postgres-Feldtypen können drei Werte enthalten: 1. Richtig 2. Falsch 3. Null
- Geometrische PostgreSQL-Datentypen repräsentieren zweidimensionale räumliche Objekte
- Aufgezählte Datentypen in PostgreSQL sind nützlich, um selten wechselnde Informationen wie Ländercode oder Zweigstellen-ID darzustellen
- Universally Unique Identifications (UUID) ist eine 128-Bit-Größe, die von einem Algorithmus generiert wird
- PostgreSQL hat viele spezielle Einträge, die als Pseudotypen bezeichnet werden
- Es wird empfohlen, den Datentyp "Text" zu verwenden, es sei denn, Sie möchten die Eingabe einschränken