PostgreSQL - Datentypen
Hallo da, zukünftige Datenbank-Zauberer! ? Willkommen auf unserer aufregenden Reise in die Welt der PostgreSQL-Datentypen. Als Ihr freundlicher Nachbarschaftsinformatiklehrer bin ich begeistert, Sie durch dieses faszinierende Thema zu führen. Machen Sie sich keine Sorgen, wenn Sie neu im Programmieren sind – wir beginnen von den ganz Basics und arbeiten uns hinauf. Also, holen Sie sich Ihre virtuelle Zauberstab (Tastatur) und tauchen wir ein!
Numerische Typen
Ah, Zahlen – die Bausteine der Informatik! PostgreSQL bietet eine Vielzahl von numerischen Typen, um verschiedenen Bedürfnissen gerecht zu werden. Lassen Sie uns mit einigen spaßigen Beispielen erkunden.
Integer-Typen
PostgreSQL bietet vier Arten von Integer-Werten:
Typ | Speichergröße | Bereich |
---|---|---|
smallint | 2 Byte | -32768 bis +32767 |
integer | 4 Byte | -2147483648 bis +2147483647 |
bigint | 8 Byte | -9223372036854775808 bis +9223372036854775807 |
serial | 4 Byte | 1 bis 2147483647 |
Lassen Sie uns eine Tabelle erstellen, um Informationen über unsere Lieblingsbücher zu speichern:
CREATE TABLE favorite_books (
id serial PRIMARY KEY,
title VARCHAR(100),
publication_year smallint,
pages integer,
isbn bigint
);
In diesem Beispiel:
-
id
verwendetserial
, das automatisch für jeden neuen Eintrag hochzählt. -
publication_year
verwendetsmallint
, weil Bücher nicht so alt sind (entschuldigung, alte Rollschriften!). -
pages
verwendetinteger
für die Buchlänge. -
isbn
verwendetbigint
für diese langen ISBN-Nummern.
Fließkomma-Typen
Für den Fall, dass Sie Dezimalgenauigkeit benötigen:
Typ | Beschreibung |
---|---|
real | 6 Dezimalstellen Genauigkeit |
double precision | 15 Dezimalstellen Genauigkeit |
Lassen Sie uns einige zusätzliche Details zu unserer Buchtabelle hinzufügen:
ALTER TABLE favorite_books
ADD COLUMN rating real,
ADD COLUMN price double precision;
Jetzt können wir Buchbewertungen (z.B. 4,5 Sterne) und präzise Preise speichern.
Arbitrary Precision Numbers
Für den Fall, dass Sie extrem präzise Zahlen benötigen:
CREATE TABLE scientific_constants (
name VARCHAR(50),
value numeric(1000, 900)
);
INSERT INTO scientific_constants (name, value)
VALUES ('Pi', 3.14159265358979323846264338327950288419716939937510);
numeric(1000, 900)
ermöglicht bis zu 1000 Gesamtzahlen mit 900 nach dem Dezimalpunkt. Perfekt für die Pi-Enthusiasten da draußen!
Währungstypen
Geld macht die Welt gehen, und PostgreSQL hat genau den passenden Typ dafür:
CREATE TABLE product_prices (
product_name VARCHAR(50),
price money
);
INSERT INTO product_prices (product_name, price)
VALUES ('Fancy Pen', '$9.99');
Der money
-Typ automatisch håndterer Währungszeichen und Kommas.
Zeichentypen
Text ist überall in Datenbanken. PostgreSQL bietet drei Hauptzeichentypen:
Typ | Beschreibung |
---|---|
character(n) | Festlänge, mit Leerzeichen aufgefüllt |
varchar(n) | Variabellänge mit Grenze |
text | Variabellänge unbegrenzt |
Lassen Sie uns diese in unserer Bücherei-Datenbank verwenden:
ALTER TABLE favorite_books
ADD COLUMN author character(50),
ADD COLUMN description varchar(500),
ADD COLUMN full_text text;
-
author
ist auf 50 Zeichen festgelegt (hoffentlich reicht das für "J.K. Rowling"!). -
description
kann variieren, aber nicht mehr als 500 Zeichen. -
full_text
kann das gesamte Buch speichern, wenn wir wollen (aber lass uns das doch nicht tun!).
Binärdatentypen
Manchmal müssen Sie rohe binäre Daten speichern. Hier kommt bytea
ins Spiel:
ALTER TABLE favorite_books
ADD COLUMN cover_image bytea;
-- Ein Bild einfügen (stellen Sie sich das als tatsächliche binäre Daten vor)
UPDATE favorite_books
SET cover_image = '\x89504E470D0A1A0A'
WHERE id = 1;
Dies ermöglicht es uns, Buchdeckbildnisse direkt in der Datenbank zu speichern.
Datum/Zeit-Typen
Zeit ist von Bedeutung, und PostgreSQL hat es abgedeckt:
Typ | Beschreibung |
---|---|
date | Datum (keine Tageszeit) |
time | Tageszeit (kein Datum) |
timestamp | both date and time |
interval | Zeitintervall |
Lassen Sie uns verfolgen, wann wir unsere Lieblingsbücher gelesen haben:
ALTER TABLE favorite_books
ADD COLUMN purchase_date date,
ADD COLUMN reading_start_time time,
ADD COLUMN last_read timestamp,
ADD COLUMN reading_duration interval;
UPDATE favorite_books
SET purchase_date = '2023-04-01',
reading_start_time = '20:30:00',
last_read = '2023-04-15 22:15:30',
reading_duration = '2 hours 30 minutes'
WHERE id = 1;
Jetzt können wir unsere Lesegewohnheiten analysieren! ?⏱️
Boolean-Typ
Wahr oder falsch, 1 oder 0, ja oder nein – manchmal ist das Leben binär:
ALTER TABLE favorite_books
ADD COLUMN is_favorite boolean;
UPDATE favorite_books
SET is_favorite = true
WHERE rating > 4.5;
Einfach und effektiv!
Aufgelisteter Typ
Wenn Sie eine feste Liste von Optionen haben, sind Enums Ihr Freund:
CREATE TYPE book_genre AS ENUM ('Fiction', 'Non-Fiction', 'Science', 'History');
ALTER TABLE favorite_books
ADD COLUMN genre book_genre;
UPDATE favorite_books
SET genre = 'Fiction'
WHERE id = 1;
Keine Tippfehler in Genre-Namen mehr!
Geometrische Typen
Für alle Shape-Enthusiasten da draußen:
CREATE TABLE geometric_objects (
id serial PRIMARY KEY,
name VARCHAR(50),
location point,
area box
);
INSERT INTO geometric_objects (name, location, area)
VALUES ('My House', '(10,20)', '((0,0),(100,100))');
Perfekt für das Kartografieren Ihres Dungeons & Dragons-Kampagnen!
Netzwerkadress-Typ
In unserer vernetzten Welt ist das Speichern von Netzwerkinformationen entscheidend:
CREATE TABLE network_devices (
id serial PRIMARY KEY,
name VARCHAR(50),
ip inet,
mac macaddr
);
INSERT INTO network_devices (name, ip, mac)
VALUES ('My Router', '192.168.1.1', '08:00:2b:01:02:03');
Jetzt können Sie alle Geräte in Ihrem Netzwerk im Auge behalten!
Bit-String-Typ
Manchmal müssen Sie nur mit rohen Bits arbeiten:
CREATE TABLE permissions (
user_id integer,
access_flags bit(8)
);
INSERT INTO permissions (user_id, access_flags)
VALUES (1, B'10110000');
Jedes Bit kann eine unterschiedliche Berechtigung darstellen. Wie ist das für effizienten Speicher?
Volltextsuch-Typ
PostgreSQL bietet eingebauten Support für Volltextsuche:
ALTER TABLE favorite_books
ADD COLUMN search_vector tsvector;
UPDATE favorite_books
SET search_vector = to_tsvector('english', title || ' ' || description);
CREATE INDEX textsearch_idx ON favorite_books USING GIN (search_vector);
Jetzt können Sie schnelle Suchen in Ihrer Büchersammlung durchführen!
UUID-Typ
Universell eindeutige Identifikatoren sind großartig für verteilte Systeme:
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE distributed_data (
id uuid DEFAULT uuid_generate_v4(),
data TEXT
);
INSERT INTO distributed_data (data) VALUES ('Some distributed data');
Keine Sorge mehr vor ID-Kollisionen across verschiedenen Servern!
XML-Typ
Für den Fall, dass Sie strukturierte XML-Daten speichern müssen:
CREATE TABLE xml_documents (
id serial PRIMARY KEY,
doc xml
);
INSERT INTO xml_documents (doc)
VALUES (
'<book>
<title>PostgreSQL for Beginners</title>
<author>Your Favorite Teacher</author>
</book>'
);
XML in einer Datenbank? Warum nicht!
JSON-Typ
In der Ära der Webdienste ist JSON der König:
ALTER TABLE favorite_books
ADD COLUMN metadata jsonb;
UPDATE favorite_books
SET metadata = '{"tags": ["educational", "fun"], "reviews": [{"user": "Alice", "rating": 5}, {"user": "Bob", "rating": 4}]}'
WHERE id = 1;
Der jsonb
-Typ ermöglicht eine effiziente Speicherung und Abfrage von JSON-Daten.
Array-Typ
Manchmal müssen Sie mehrere Werte in einer Spalte speichern:
ALTER TABLE favorite_books
ADD COLUMN keywords text[];
UPDATE favorite_books
SET keywords = ARRAY['database', 'programming', 'awesome']
WHERE id = 1;
Arrays erlauben es Ihnen, Listen von Werten zu speichern, ohne separate Tabellen zu erstellen.
Composite-Typen
Erstellen Sie Ihre eigenen benutzerdefinierten Typen, indem Sie bestehende kombinieren:
CREATE TYPE address AS (
street VARCHAR(100),
city VARCHAR(50),
country VARCHAR(50)
);
ALTER TABLE favorite_books
ADD COLUMN publisher_address address;
UPDATE favorite_books
SET publisher_address = ROW('123 Book St', 'Libraryville', 'Bookland')
WHERE id = 1;
Composite-Typen helfen Ihnen, verwandte Daten logischer zu organisieren.
Range-Typen
Wenn Sie einen Bereich von Werten darstellen müssen:
CREATE TABLE hotel_bookings (
id serial PRIMARY KEY,
room_number integer,
stay daterange
);
INSERT INTO hotel_bookings (room_number, stay)
VALUES (101, '[2023-07-01, 2023-07-07)');
Der daterange
-Typ macht es einfach, Überlappungen von Buchungen zu überprüfen!
Objektidentifikations-Typen
Diese Typen werden intern von PostgreSQL verwendet:
CREATE TABLE table_info (
table_name VARCHAR(50),
oid oid
);
INSERT INTO table_info (table_name, oid)
SELECT 'favorite_books', 'favorite_books'::regclass::oid;
Obwohl Sie diese vielleicht nicht oft verwenden, sind sie für die internen Operationen von PostgreSQL entscheidend.
Pseudo-Typen
Diese sind keineechten Typen, aber sie werden in Funktionsdeklarationen verwendet:
CREATE FUNCTION multiply_any(anyelement, anyelement)
RETURNS anyelement AS $$
SELECT $1 * $2;
$$ LANGUAGE SQL;
SELECT multiply_any(5, 3); -- Gibt 15 zurück
SELECT multiply_any(5.5, 2); -- Gibt 11.0 zurück
Pseudo-Typen wie anyelement
erlauben flexible Funktionsdefinitionen.
Und das ist es, meine neugierigen Schüler! Wir haben die weite Landschaft der PostgreSQL-Datentypen erkundet. Erinnern Sie sich daran, dass die Auswahl des richtigen Datentyps entscheidend für Leistung, Speicher-effizienz und Datenintegrität ist. Es ist wie das Wahl des richtigen Werkzeugs für die Aufgabe – Sie würden nicht eine Brechstange verwenden, um ein Bild aufzuhängen, oder?
Als Sie Ihre PostgreSQL-Reise fortsetzen, werden Sie noch mehr Nuancen und Tricks mit diesen Datentypen entdecken. Keep experimenting, stay curious, and most importantly, have fun with your databases! Wer weiß, vielleicht werden Sie ja der nächste Datenbank-Zauberer in der Stadt. ?♂️?
Nun, gehen Sie los und erstellen Sie großartige Datenbanken! Und denken Sie daran, in der Welt von PostgreSQL hat jeder Datentyp seinen Platz – genau wie jedes Buch seinen perfekten Platz auf einem Bücherregal. Frohes Coden! ??
Credits: Image by storyset