CodeGym /Kurse /SQL SELF /Daten in Arrays ändern: array_append(),

Daten in Arrays ändern: array_append(), array_remove()

SQL SELF
Level 35 , Lektion 3
Verfügbar

Daten in Arrays ändern: array_append(), array_remove()

Manchmal reicht es nicht, Arrays nur zu lesen – du willst vielleicht einen neuen Wert hinzufügen, einen alten rauswerfen oder den Inhalt aktualisieren. Zum Glück gibt’s in PostgreSQL spezielle Funktionen, mit denen du Arrays easy verwalten kannst, ohne sie komplett neu zu schreiben: array_append() und array_remove(). Schauen wir uns an, wie das läuft.

Elemente zu einem Array hinzufügen mit array_append()

Die Funktion array_append() nutzt du, um ein neues Element ans Ende eines Arrays zu hängen. Sie nimmt zwei Argumente:

  1. Das ursprüngliche Array, das du ändern willst.
  2. Den Wert, den du ins Array packen willst.

Beispiel 1: Einfaches Zahlen-Array

Stell dir vor, wir haben eine Tabelle projects mit einer Spalte team_members, in der Arrays von User-IDs gespeichert werden, die an einem Projekt arbeiten.

CREATE TABLE projects (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    team_members INT[]
);

-- Lass uns ein paar Zeilen einfügen
INSERT INTO projects (name, team_members)
VALUES
('Projekt A', ARRAY[1, 2, 3]),
('Projekt B', ARRAY[4, 5]);

Jetzt haben wir das Projekt "Projekt A" und wollen ein neues Teammitglied mit der ID 7 zum team_members-Array hinzufügen. Wir nehmen array_append():

UPDATE projects
SET team_members = array_append(team_members, 7)
WHERE name = 'Projekt A';

-- Lass uns das Ergebnis checken:
SELECT * FROM projects;

Ergebnis:

id name team_members
1 Projekt A {1,2,3,7}
2 Projekt B {4,5}

Wie du siehst, wurde das Teammitglied mit der ID 7 erfolgreich ins Array gepackt!

Beispiel 2: Text-Elemente hinzufügen

Mit array_append() kannst du auch Arrays von anderen Typen bearbeiten. Zum Beispiel fügen wir eine neue Kategorie zum Kategorien-Array eines Produkts hinzu.

CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    categories TEXT[]
);

-- Produkt mit Kategorien einfügen
INSERT INTO products (name, categories)
VALUES
('Smartphone', ARRAY['Elektronik', 'Gadgets']),
('Notebook', ARRAY['Computer', 'Elektronik']);

-- Neue Kategorie "Beliebt" für "Smartphone" hinzufügen
UPDATE products
SET categories = array_append(categories, 'Beliebt')
WHERE name = 'Smartphone';

-- Ergebnis checken:
SELECT * FROM products;

Ergebnis:

id name categories
1 Smartphone {Elektronik,Gadgets,Beliebt}
2 Notebook {Computer,Elektronik}

Elemente aus einem Array löschen mit array_remove()

Wenn array_append() wie das Hinzufügen einer neuen Aufgabe auf einer To-Do-Liste ist, dann ist array_remove() das Tool, um erledigte Aufgaben abzuhaken. Die Funktion nimmt als Argumente:

  1. Das ursprüngliche Array.
  2. Den Wert, den du löschen willst.

Beispiel 1: Element aus einem Zahlen-Array löschen

Gehen wir zurück zur Tabelle projects. Wir haben rausgefunden, dass das Teammitglied mit der ID 7 nicht mehr am "Projekt A" arbeitet. Also löschen wir es aus dem team_members-Array:

UPDATE projects
SET team_members = array_remove(team_members, 7)
WHERE name = 'Projekt A';

-- Ergebnis checken:
SELECT * FROM projects;

Ergebnis:

id name team_members
1 Projekt A {1,2,3}
2 Projekt B {4,5}

Mit array_remove() wurde das Teammitglied mit der ID 7 erfolgreich entfernt.

Beispiel 2: Text-Element löschen

Jetzt schauen wir auf die Tabelle products. Wenn die Kategorie "Beliebt" für das Smartphone nicht mehr passt, können wir sie löschen:

UPDATE products
SET categories = array_remove(categories, 'Beliebt')
WHERE name = 'Smartphone';

-- Ergebnis checken:
SELECT * FROM products;

Ergebnis:

id name categories
1 Smartphone {Elektronik,Gadgets}
2 Notebook {Computer,Elektronik}
Wichtig:

Wenn das Element, das du löschen willst, nicht im Array ist, lässt array_remove() das Array unverändert. Das ist ziemlich praktisch, weil dabei keine Fehler entstehen.

array_append() und array_remove() kombinieren

Manchmal willst du erst sicherstellen, dass ein Element nicht schon im Array ist, bevor du es hinzufügst. Das geht easy mit einer Kombi aus den Funktionen:

Beispiel: Einzigartige Elemente hinzufügen

Lass uns sicherstellen, dass das Teammitglied mit der ID 7 nur dann ins Array kommt, wenn es noch nicht drin ist. Dafür nutzen wir eine Prüfung mit array_remove():

UPDATE projects
SET team_members = array_append(team_members, 7)
WHERE name = 'Projekt A' AND NOT (team_members @> ARRAY[7]);

-- Ergebnis checken:
SELECT * FROM projects;

Erklärung:

  • Der Operator @> prüft, ob das Array das Element 7 enthält.
  • Wenn team_members schon 7 enthält, wird nichts hinzugefügt.

Typische Fehler und Tipps

1. Versuch, NULL ins Array zu packen. Wenn du array_append() mit NULL benutzt (zum Beispiel array_append(team_members, NULL)), wird tatsächlich ein NULL-Wert ins Array geschrieben. Es gibt keinen Fehler, aber das Ergebnis ist vielleicht nicht das, was du willst. Also: Vor dem Hinzufügen checken, dass der Wert nicht NULL ist.

-- Beispiel-Check:
UPDATE projects
SET team_members = array_append(team_members, COALESCE(NULL, -1))
WHERE name = 'Projekt A';

2. Verschiedene Datentypen im Array. Arrays in PostgreSQL dürfen nur Werte vom gleichen Typ enthalten. Du kannst zum Beispiel keinen String in ein Zahlen-Array packen:

-- Das gibt einen Fehler:
UPDATE projects
SET team_members = array_append(team_members, 'beispiel');

Damit das nicht passiert, check, dass die Datentypen passen. Wenn du unsicher bist, wandel den Wert mit :: in den richtigen Typ um:

-- Beispiel für Typumwandlung:
UPDATE projects
SET team_members = array_append(team_members, '5'::INT);
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION