©Sergey Emelyanov 2025 | Alle Rechte vorbehalten
PostgreSQL bietet eine Vielzahl von Datentypen, die zum Speichern und Bearbeiten von Daten verwendet werden können. Diese Typen sind grundlegend für die Gestaltung von Tabellen, die Verwendung von Standardfunktionen und die Implementierung von Geschäftslogik. In diesem Artikel werden wir uns mit der Schaffung von benutzerdefinierten Datentypen beschäftigen.
Typen von Datentypen in PostgreSQL
Um eine Übersicht über alle von PostgreSQL unterstützten Datentypen zu erhalten, können Sie die folgende Anfrage ausführen:
select typname, typlen, typtype from pg_type;
Die typtype-Werte bedeuten:
b - Basisdatentyp (base)
c - Kompositer Datentyp (composite)
d - Domänen-Datentyp (domain)
e - Enumerations-Datentyp (enum)
p - Pseudo-Datentyp (pseudo-type)
r - Bereichs-Datentyp (range)
In diesem Artikel werden wir uns auf einige wichtige Typen konzentrieren, die für die Erstellung von benutzerdefinierten Datentypen relevant sind.
Ganzzahlen (smallint, integer, bigint)
Diese Typen werden häufig für die Speicherung von Zahlenwerten verwendet, wie Preisen, Mengen oder Alter. Sie werden auch oft als Identifikatoren verwendet, wie Kunden-, Mitarbeiter- oder Bestell-IDs.
Dezimalzahlen (numeric)
Dieser Typ wird verwendet, um Zahlenwerte mit einer Dezimalstelle genau zu speichern und zu berechnen. Wenn Genauigkeit bei der Speicherung und Berechnung wichtig ist, sollte dieser Typ verwendet werden.
Aufzählungen (enum)
Dieser Typ definiert einen statischen, geordneten Satz von Werten, ähnlich wie Enumerations-Typen in Programmiersprachen. Ein Beispiel für eine Aufzählung sind die Wochentage oder ein Satz von Statuswerten.
Erstellung von benutzerdefinierten Datentypen
Um einen benutzerdefinierten Datentyp zu erstellen, können Sie die folgenden Befehle verwenden:
Komposit-Datentyp:
CREATE TYPE name AS (attribute_name data_type [,…]);
Aufzählungs-Datentyp:
CREATE TYPE name AS ENUM ('label' [,…]);
Bereichs-Datentyp:
CREATE TYPE name AS RANGE (SUBTYPE = subtype [, OPTIONS]);
Basis-Datentyp:
CREATE TYPE name (INPUT = input_function, OUTPUT = output_function [, OPTIONS]);
Leerer Datentyp:
CREATE TYPE name;
Zweck der benutzerdefinierten Datentypen
Die Verwendung von benutzerdefinierten Datentypen ermöglicht es, die Datenintegrität durch die Einführung von Einschränkungen zu gewährleisten. Die einfachsten Einschränkungen sind NOT NULL, UNIQUE und PRIMARY KEY. Die Verwendung der richtigen Datentypen für die Spalten ist ebenfalls eine Form der Einschränkung. Durch die Erstellung von benutzerdefinierten Datentypen erhalten Sie eine Vielzahl von Möglichkeiten, um die Datenintegrität zu gewährleisten.
Beispiel: Entity-Quelle
Wenn Sie ein CRM-System mit verschiedenen Modulen erstellen, möchten Sie möglicherweise in jeder Tabelle Informationen über die Herkunft der Daten speichern, wie CRM, API oder Webform. Anstatt in jeder Tabelle ein separates Feld mit Aufzählungen zu erstellen, können Sie einen benutzerdefinierten Datentyp namens entity_source erstellen:
CREATE TYPE entity_source AS ENUM ('CRM', 'API', 'Webform');
Dann können Sie leicht ein neues Feld in der Kontakttabelle hinzufügen:
ALTER TABLE kontakte ADD COLUMN quelle AS entity_source;
Nachdem Sie diesen Typ erstellt haben, können Sie die Werte des Feldes auf einen der aufgelisteten Werte ändern:
UPDATE kontakte SET quelle = 'CRM' WHERE id = 1;
Wenn Sie versuchen, einen nicht aufgelisteten Wert zu setzen, erhalten Sie eine Fehlermeldung:
UPDATE kontakte SET quelle = 'Buch' WHERE id = 1;
ERROR: Ungültiger Eingabewert
Fazit
Die Erstellung von benutzerdefinierten Datentypen kann das Leben von Administratoren und Entwicklern erheblich erleichtern. Durch die Verwendung dieser Typen können Sie die Datenintegrität gewährleisten und Ihre Datenbanken effizienter gestalten.
©Sergey Emelyanov 2025 | Alle Rechte vorbehalten