Stell dir vor, du entwirfst gerade eine Datenbank für eine Uni. Am Anfang hat die Studententabelle nur zwei Felder: ID und Name. Easy, die Studis nutzen das System. Aber nach einem Monat kommen die Dozenten zu dir und sagen: "Kannst du noch das Alter hinzufügen?", und kurz darauf: "Wir brauchen noch eine Email." Und dann: "Lass uns doch endlich das Feld middle_name rauswerfen, das füllt eh niemand aus!" Genau hier brauchst du Skills mit ALTER TABLE, um Spalten hinzuzufügen oder zu löschen.
Syntax zum Hinzufügen von Spalten
Also, um eine neue Spalte zu einer bestehenden PostgreSQL-Tabelle hinzuzufügen, benutzt man ALTER TABLE. Hier die Syntax:
ALTER TABLE table_name
ADD COLUMN column_name data_type [constraints];
table_name— der Name der Tabelle, zu der du eine neue Spalte hinzufügen willst.column_name— der Name der Spalte, die du hinzufügen willst.data_type— der Datentyp, z.B.VARCHAR,INTEGERoderDATE.constraints(optional) — Einschränkungen, die du auf diese Spalte legen willst, z.B.NOT NULL,DEFAULTusw.
Beispiel: Neue Spalte hinzufügen
Angenommen, wir haben eine Tabelle students, die vorher so erstellt wurde:
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
Jetzt kommt die Aufgabe, eine Spalte age für das Alter der Studierenden hinzuzufügen. So geht's:
ALTER TABLE students
ADD COLUMN age INTEGER;
Jetzt sieht die Struktur der Tabelle students so aus:
| id | name | age |
|---|---|---|
| 1 | Eva | NULL |
| 2 | Alex | NULL |
Wenn du neue Einträge ohne Altersangabe hinzufügst, setzt PostgreSQL automatisch NULL, weil wir keine Einschränkungen wie NOT NULL oder einen Standardwert (DEFAULT) angegeben haben.
Syntax zum Löschen von Spalten
Das Löschen einer Spalte aus einer Tabelle läuft auch über ALTER TABLE. Hier die Syntax:
ALTER TABLE table_name
DROP COLUMN column_name [RESTRICT | CASCADE];
table_name— der Name der Tabelle, aus der du die Spalte löschen willst.column_name— der Name der Spalte, die gelöscht wird.RESTRICT— verhindert das Löschen, wenn es Abhängigkeiten gibt (Standard).CASCADE— löscht die Spalte samt aller Abhängigkeiten.
Über das Löschen mit CASCADE und was das alles mit sich bringt, erzähle ich dir im nächsten Level :P
Beispiel: Unnötige Spalte löschen
Zurück zur Tabelle students. Wir haben entschieden, dass das Feld age nicht mehr gebraucht wird. Also löschen wir es:
ALTER TABLE students
DROP COLUMN age;
Jetzt ist die Struktur der Tabelle wieder schlanker:
| id | name |
|---|---|
| 1 | Eva |
| 2 | Alex |
Nützliche Beispiele
Spalte mit Constraints hinzufügen
Und wenn du die Spalte age doch mit NOT NULL und einem Standardwert hinzufügen willst? Dann passt folgender Code:
ALTER TABLE students
ADD COLUMN age INTEGER NOT NULL DEFAULT 18;
Jetzt wird in allen bestehenden Zeilen für die Spalte age der Wert 18 gesetzt, und neue Einträge brauchen zwingend einen Wert für dieses Feld, außer du nutzt den Standardwert.
Spalte mit Abhängigkeiten löschen
Wenn eine Spalte Abhängigkeiten hat (z.B. sie wird in Views oder Triggern verwendet), musst du den Modifier CASCADE benutzen. Aber Vorsicht: Das kann auch andere Objekte in deiner DB betreffen. Zum Beispiel:
ALTER TABLE students
DROP COLUMN email CASCADE;
Typische Fehler und Besonderheiten
Fehler: Spalte mit falschem Datentyp hinzufügen.
Stell dir vor, du fügst eine Spalte mit Typ INTEGER hinzu, willst aber Text speichern. PostgreSQL versteht das nicht und gibt beim Einfügen einen Fehler aus. Der Datentyp muss immer zum Inhalt passen.
Fehler: Spalte löschen ohne Abhängigkeiten zu beachten.
Zum Beispiel, wenn du eine Spalte löschst, auf die Indizes oder Foreign Keys zeigen, kann PostgreSQL einen Fehler werfen, wenn du nicht CASCADE angibst.
Fehler: Spalte mit Abhängigkeiten löschen. Zum Beispiel, wenn du eine Spalte löschst, auf die Indizes oder Foreign Keys zeigen, kann PostgreSQL einen Fehler werfen, wenn du nicht CASCADE angibst. Du hast es hinzugefügt und tausende Zeilen gelöscht, die auf deine entfernte Spalte verwiesen haben. Die du eigentlich nicht löschen wolltest : (
Besonderheit: Reihenfolge der Änderungen.
Manchmal braucht das Hinzufügen von Spalten mit Constraints ein bisschen Wissen über die Reihenfolge der Aktionen. Wenn du z.B. eine Spalte mit NOT NULL hinzufügst, musst du sie zuerst mit Standardwerten füllen, sonst gibt PostgreSQL einen Fehler aus.
GO TO FULL VERSION