Mit Arrays zu arbeiten bedeutet nicht nur, sie zu erstellen und zu speichern – oft musst du einzelne Elemente rausziehen oder ihren Inhalt analysieren. PostgreSQL bietet dafür ein paar eingebaute Funktionen. Lass uns die mal der Reihe nach anschauen.
Funktion unnest(): Array entpacken
Die Funktion unnest() entpackt ein Array und macht aus jedem Element eine eigene Zeile. Das ist super praktisch, wenn du mit Array-Daten wie mit einer Tabelle arbeiten willst.
Beispiel 1: Einfaches Entpacken eines Arrays
Angenommen, wir haben ein Array mit Fakultätsnamen:
SELECT ARRAY['Informatik', 'Mathematik', 'Physik'] AS fakultaeten;
Jetzt wollen wir jedes Element als eigene Zeile rausziehen. Wir nehmen unnest():
SELECT unnest(ARRAY['Informatik', 'Mathematik', 'Physik']) AS fakultaet;
Ergebnis:
| fakultaet |
|---|
| Informatik |
| Mathematik |
| Physik |
Beispiel 2: Array in einer Tabelle entpacken
Nehmen wir an, wir haben eine Tabelle courses:
CREATE TABLE courses (
course_id SERIAL PRIMARY KEY,
course_name TEXT,
tags TEXT[]
);
INSERT INTO courses (course_name, tags)
VALUES
('Algorithmen', ARRAY['Programmierung', 'Informatik']),
('Lineare Algebra', ARRAY['Mathematik', 'Algebra']),
('Physik Grundlagen', ARRAY['Physik', 'Allgemein']);
Jetzt holen wir alle Tags aus dem Array raus:
SELECT course_name, unnest(tags) AS tag
FROM courses;
Ergebnis:
| course_name | tag |
|---|---|
| Algorithmen | Programmierung |
| Algorithmen | Informatik |
| Lineare Algebra | Mathematik |
| Lineare Algebra | Algebra |
| Physik Grundlagen | Physik |
| Physik Grundlagen | Allgemein |
Du siehst, jedes Array-Element wird zu einer eigenen Tabellenzeile.
Funktion array_length(): Array-Größe bestimmen
Die zweite wichtige Funktion für Arrays ist array_length(). Sie gibt die Länge des Arrays (also die Anzahl der Elemente) für die angegebene Dimension zurück.
Beispiel 1: Anzahl der Elemente in einem eindimensionalen Array
Nehmen wir ein Array:
SELECT ARRAY['Apfel', 'Banane', 'Orange'] AS fruechte;
Wenn wir wissen wollen, wie viele Früchte im Array sind:
SELECT array_length(ARRAY['Apfel', 'Banane', 'Orange'], 1) AS laenge;
Ergebnis:
| laenge |
|---|
| 3 |
Hier steht 1 für die Dimension des Arrays. Arrays in PostgreSQL können mehrere Dimensionen haben (z.B. zweidimensionale Arrays), aber das schauen wir uns ein andermal an.
Beispiel 2: Anzahl der Elemente im Array einer Tabelle
Schauen wir mal, wie viele Tags jeder Kurs hat:
SELECT course_name, array_length(tags, 1) AS anzahl_tags
FROM courses;
Ergebnis:
| course_name | anzahl_tags |
|---|---|
| Algorithmen | 2 |
| Lineare Algebra | 2 |
| Physik Grundlagen | 2 |
Die Funktion sagt einfach: „Hey, hier sind zwei Elemente!“, und das macht die Datenanalyse schon viel einfacher.
Funktion array_position(): Wert im Array suchen
Stell dir vor, du suchst ein bestimmtes Element im Array. Die Funktion array_position() hilft dir dabei: Sie gibt die Position des ersten Vorkommens zurück.
Beispiel 1: Element suchen
Angenommen, wir haben ein Array:
SELECT ARRAY['Rot', 'Blau', 'Gruen', 'Gelb'] AS farben;
Versuchen wir, die Position von "Blau" zu finden:
SELECT array_position(ARRAY['Rot', 'Blau', 'Gruen', 'Gelb'], 'Blau') AS position;
Ergebnis:
| position |
|---|
| 2 |
Wenn das Element nicht da ist, gibt die Funktion NULL zurück. Lass uns das testen:
SELECT array_position(ARRAY['Rot', 'Blau', 'Gruen', 'Gelb'], 'Schwarz') AS position;
Ergebnis:
| position |
|---|
| NULL |
Beispiel 2: Suche im Array einer Tabelle
Du willst wissen, welcher Kurs den Tag "Informatik" hat. Erstmal suchen wir die passenden Zeilen:
SELECT course_name, array_position(tags, 'Informatik') AS position
FROM courses;
Ergebnis:
| course_name | position |
|---|---|
| Algorithmen | 2 |
| Lineare Algebra | NULL |
| Physik Grundlagen | NULL |
Jetzt filtern wir, damit nur die Zeilen bleiben, wo der Tag drin ist:
SELECT course_name
FROM courses
WHERE array_position(tags, 'Informatik') IS NOT NULL;
Ergebnis:
| course_name |
|---|
| Algorithmen |
Mit array_position() findest du schnell Daten im Array – das macht sie zu einer der wichtigsten Funktionen für Arrays in PostgreSQL.
Praxiseinsatz der Funktionen
unnest()— nutze das, um Arrays in Zeilen umzuwandeln. Das ist wichtig für Datenanalyse, Reports und die Arbeit mit Tags.array_length()— perfekt, um die Länge von Arrays zu checken. Zum Beispiel kannst du damit validieren, dass ein Array nicht leer ist.array_position()— super Tool, um Elemente zu suchen, egal ob Produktkategorien, Teilnahme eines Studenten an einem Projekt oder Keywords in einer Beschreibung.
Typische Fehler bei der Nutzung der Funktionen
unnest()kann die Zeilenzahl verdoppeln, wenn du es auf Arrays in mehreren Spalten gleichzeitig anwendest. Das kannst du mitJOIN LATERALoderCROSS JOINlösen – aber sei vorsichtig.array_length()gibtNULLzurück, wenn das Array leer ist. Wenn dein Array leer sein kann, prüfe das extra.array_position()kannNULLliefern, wenn das Element fehlt. Also immer daran denken und in Filtern (IS NOT NULL) berücksichtigen.
Beispiele aus der echten Praxis
Arrays in PostgreSQL sind nicht nur Theorie, sondern ein Tool, das in echten Projekten richtig praktisch ist. Zum Beispiel: Du betreibst einen Blog und jeder Artikel hat eine Liste von Tags – mit Arrays kannst du easy nach Themen filtern oder sogar die Top-Kategorien zusammenstellen.
Oder du analysierst das Verhalten von Usern, die mehrere Kurse oder Produkte auswählen. All diese Präferenzen speicherst du bequem im Array – und kannst sie genauso bequem auswerten.
Und Arrays helfen auch bei der Validierung: Mit array_length() kannst du zum Beispiel die Anzahl der Elemente begrenzen – etwa damit ein User nicht mehr als fünf Sachen auswählt.
GO TO FULL VERSION