Zum Inhalt springen
aviral gupta

// B1.1 · ca. 35 Min. · Einstieg

PostgreSQL und psql installieren (oder der Editor im Browser)

Nach dieser Lektion führen Sie SQL in PostgreSQL aus, legen eine kleine Tabelle an, füllen und befragen sie und lesen die Fehlermeldung, wenn eine Anweisung scheitert.

Lektion 1 von 4 in B1 Erste Schritte

Anfang des Moduls

Danach können Sie

  • PostgreSQL 18 installieren oder den Editor hier nutzen, sich mit psql verbinden und SQL von psql-Befehlen wie \q unterscheiden
  • Eine Tabelle anlegen, Zeilen einfügen und abfragen, jede Anweisung mit einem Semikolon beendet
  • Einen PostgreSQL-Fehler lesen: die ERROR-Zeile, den Namen, auf den sie zeigt, und wo der Lauf endete
  1. Aufwärmen · Aufgabe 1 von 7

    Aufwärmen: Was ist psql?

  2. Vorhersagen · Aufgabe 2 von 7

    Sagen Sie es voraus, bevor Sie weiterlesen: Welche Zahl liefert die letzte Anweisung?

    CREATE TABLE books (title text);
    INSERT INTO books VALUES ('Dune');
    INSERT INTO books VALUES ('Emma');
    SELECT count(*) FROM books;
  3. Üben · Aufgabe 3 von 7

    Ergänzen Sie das Schlüsselwort, damit die Anweisung eine Tabelle books mit einer Spalte title anlegt.

    CREATE ____ books (title text);
    CREATE books (title text);
  4. Üben · Aufgabe 4 von 7

    Sie tippen in psql SELECT 2 + 2 und drücken Enter, ohne Semikolon. Was passiert?

  5. Üben · Aufgabe 5 von 7

    Ordnen Sie jedem Befehl zu, was er tut.

  6. Denksport · Aufgabe 6 von 7

    Knobelaufgabe. Die Tabelle wird als Books angelegt, als BOOKS befüllt und als books gelesen. Was liefert das SELECT?

    CREATE TABLE Books (Title text);
    INSERT INTO BOOKS VALUES ('Dune');
    select title from books;
  7. Anwenden · Aufgabe 7 von 7

    Mini-Aufgabe. Schreiben Sie im Editor ein Skript für Ihr eigenes Regal: Legen Sie eine Tabelle shelf mit den Spalten id, title und year an, fügen Sie drei Bücher ein, die Sie kennen, und listen Sie sie mit SELECT * FROM shelf ORDER BY year; auf. Führen Sie es aus und klicken Sie dann erneut auf „Ausführen“: Die Tabelle entsteht neu, weil jeder Lauf mit einer leeren Datenbank beginnt.

    Prüfen Sie Ihr Ergebnis anhand dieser Liste

Selbst programmieren

Lesen Sie das ausgearbeitete Beispiel und lösen Sie dann die Übungen. Ihr Code läuft in Ihrem Browser oder auf Ihrem Computer und wird nie hochgeladen.

Ausgearbeitetes Beispiel

Eine winzige Bibliothek

Dieses Skript legt eine Tabelle mit Büchern an, fügt drei Zeilen ein und stellt zwei Abfragen. Das dritte INSERT nennt seine Spalten, der Stil, den viele Entwickler bevorzugen. Führen Sie es aus, fügen Sie dann ein viertes Buch hinzu und führen Sie es erneut aus. Jeder Lauf beginnt mit einer leeren Datenbank, die Tabelle entsteht also jedes Mal neu. Auf Ihrem Computer läuft dieselbe Datei mit psql -X -q -v ON_ERROR_STOP=1 -f main.sql.

main.sql

-- A tiny library: one table, three books.
CREATE TABLE books (
  id integer,
  title text,
  author text,
  year integer
);

INSERT INTO books VALUES (1, 'Dune', 'Frank Herbert', 1965);
INSERT INTO books VALUES (2, 'Emma', 'Jane Austen', 1815);
INSERT INTO books (id, title, author, year)
VALUES (3, 'Kindred', 'Octavia E. Butler', 1979);

SELECT * FROM books ORDER BY id;

SELECT count(*) AS books FROM books;

Ausführen mit

psql -X -q -v ON_ERROR_STOP=1 -f main.sql

Ausgabe

 id |  title  |      author       | year
----+---------+-------------------+------
  1 | Dune    | Frank Herbert     | 1965
  2 | Emma    | Jane Austen       | 1815
  3 | Kindred | Octavia E. Butler | 1979
(3 rows)

 books
-------
     3
(1 row)
  • CREATE TABLE und INSERT geben nichts aus; nur die beiden SELECT-Anweisungen erzeugen eine Ausgabe.
  • Jedes Ergebnis ist eine Tabelle: die Spaltennamen, eine Linie aus Bindestrichen, die Zeilen und eine Anzahl wie (3 rows).
  • Zahlen stehen rechtsbündig, Text linksbündig.
  • Zeilen, die mit -- beginnen, sind Kommentare: PostgreSQL ignoriert sie.
  • ORDER BY id legt die Reihenfolge der Zeilen fest; ohne es verspricht SQL keine bestimmte Reihenfolge.
Ändern und ausführen

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser PostgreSQL herunter (bis zu 10.1 MB) und speichert es im Cache. Jeder Lauf beginnt mit einer leeren Datenbank. Ihr Code bleibt auf Ihrem Gerät.

Übungen

Übung 1 von 2

Ihre erste Tabelle

Legen Sie eine Tabelle members mit zwei Spalten an: id (integer) und name (text). Fügen Sie zwei Mitglieder ein: 1, Ada und 2, Grace. Listen Sie sie dann mit SELECT * FROM members ORDER BY id; auf. Beenden Sie jede Anweisung mit einem Semikolon.

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser PostgreSQL herunter (bis zu 10.1 MB) und speichert es im Cache. Jeder Lauf beginnt mit einer leeren Datenbank. Ihr Code bleibt auf Ihrem Gerät.

Hinweise
  1. Hinweis 1

    CREATE TABLE members (id integer, name text); legt die Tabelle an.

  2. Hinweis 2

    Ein INSERT pro Mitglied: INSERT INTO members VALUES (1, 'Ada');

  3. Hinweis 3

    Namen sind Text und stehen daher in einfachen Anführungszeichen; die ids sind Zahlen und brauchen keine.

Eine Lösung zeigen

Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.

CREATE TABLE members (
  id integer,
  name text
);

INSERT INTO members VALUES (1, 'Ada');
INSERT INTO members VALUES (2, 'Grace');

SELECT * FROM members ORDER BY id;
Auf dem eigenen Computer ausführen

Installieren Sie PostgreSQL 18 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.

main.sql

-- 1. Create the table members (id integer, name text).
-- 2. Add Ada (id 1) and Grace (id 2).
-- 3. List every member, ordered by id.

test.sql

-- test: Die Tabelle members hat zwei Zeilen
SELECT count(*) = 2 FROM members;

-- test: Ada hat die id 1 und Grace die id 2
SELECT EXISTS (SELECT 1 FROM members WHERE id = 1 AND name = 'Ada')
   AND EXISTS (SELECT 1 FROM members WHERE id = 2 AND name = 'Grace');

-- test: Das Skript listet beide Mitglieder auf, nach id sortiert
-- output:
--  id | name
-- ----+-------
--   1 | Ada
--   2 | Grace
-- (2 rows)

psql führt die Dateien auf Ihrem eigenen PostgreSQL-Server aus. Nehmen Sie eine leere Datenbank, die Sie wegwerfen können: Hängen Sie -d und ihren Namen an den Befehl an.

Programm ausführen:

psql -X -q -v ON_ERROR_STOP=1 -f main.sql

Für die Prüfungen gibt es auf Ihrem Computer noch keinen Befehl. Sie stehen in test.sql: Jede Prüfabfrage gibt t aus, wenn sie besteht.

Übung 2 von 2

Zwei weitere Bücher

setup.sql hat die Tabelle books (id, title, author, year) mit Dune und Emma angelegt. Fügen Sie oberhalb des SELECT zwei Bücher hinzu: 3, Kindred, Octavia E. Butler, 1979 und 4, Beloved, Toni Morrison, 1987. Das SELECT listet dann alle vier Titel auf, das älteste zuerst.

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser PostgreSQL herunter (bis zu 10.1 MB) und speichert es im Cache. Jeder Lauf beginnt mit einer leeren Datenbank. Ihr Code bleibt auf Ihrem Gerät.

Hinweise
  1. Hinweis 1

    Die Tabelle gibt es schon: Legen Sie sie nicht noch einmal an, fügen Sie nur Zeilen hinzu.

  2. Hinweis 2

    Die Werte stehen in der Reihenfolge der Spalten: id, title, author, year.

  3. Hinweis 3

    INSERT INTO books VALUES (3, 'Kindred', 'Octavia E. Butler', 1979); fügt das erste hinzu.

Eine Lösung zeigen

Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.

INSERT INTO books VALUES (3, 'Kindred', 'Octavia E. Butler', 1979);
INSERT INTO books (id, title, author, year)
VALUES (4, 'Beloved', 'Toni Morrison', 1987);

SELECT title, year FROM books ORDER BY year;
Auf dem eigenen Computer ausführen

Installieren Sie PostgreSQL 18 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.

main.sql

-- setup.sql has created books and added Dune and Emma.
-- Add Kindred and Beloved here.

SELECT title, year FROM books ORDER BY year;

test.sql

-- test: Die Tabelle enthält vier Bücher
SELECT count(*) = 4 FROM books;

-- test: Kindred ist Buch 3, von Octavia E. Butler, aus dem Jahr 1979
SELECT EXISTS (SELECT 1 FROM books WHERE id = 3 AND title = 'Kindred' AND author = 'Octavia E. Butler' AND year = 1979);

-- test: Beloved ist Buch 4, von Toni Morrison, aus dem Jahr 1987
SELECT EXISTS (SELECT 1 FROM books WHERE id = 4 AND title = 'Beloved' AND author = 'Toni Morrison' AND year = 1987);

-- test: Das Skript listet alle vier Titel auf, das älteste zuerst
-- output:
--   title  | year
-- ---------+------
--  Emma    | 1815
--  Dune    | 1965
--  Kindred | 1979
--  Beloved | 1987
-- (4 rows)

setup.sql

CREATE TABLE books (
  id integer,
  title text,
  author text,
  year integer
);

INSERT INTO books VALUES (1, 'Dune', 'Frank Herbert', 1965);
INSERT INTO books VALUES (2, 'Emma', 'Jane Austen', 1815);

psql führt die Dateien auf Ihrem eigenen PostgreSQL-Server aus. Nehmen Sie eine leere Datenbank, die Sie wegwerfen können: Hängen Sie -d und ihren Namen an den Befehl an.

Programm ausführen:

psql -X -q -v ON_ERROR_STOP=1 -f setup.sql -f main.sql

Für die Prüfungen gibt es auf Ihrem Computer noch keinen Befehl. Sie stehen in test.sql: Jede Prüfabfrage gibt t aus, wenn sie besteht.

Häufige Fehler

Ein fehlendes Semikolon

CREATE TABLE books (id integer, title text);
INSERT INTO books VALUES (1, 'Dune')
INSERT INTO books VALUES (2, 'Emma');

Was psql ausgibt

ERROR:  syntax error at or near "INSERT"

Warum, und die Lösung

Dem ersten INSERT fehlt das Semikolon, also liest PostgreSQL beide Zeilen als eine Anweisung, und das zweite INSERT ergibt mitten darin keinen Sinn. Der Fehler nennt das Wort, an dem das Lesen scheiterte, oft direkt nach dem fehlenden Semikolon. Beenden Sie jede Anweisung mit ;.

Text in doppelten Anführungszeichen

CREATE TABLE books (id integer, title text);
INSERT INTO books VALUES (1, "Dune");

Was psql ausgibt

ERROR:  column "Dune" does not exist

Warum, und die Lösung

In SQL markieren einfache Anführungszeichen Text und doppelte Namen, etwa einer Spalte oder Tabelle. "Dune" wird als Name einer Spalte gelesen, und die gibt es nicht. Schreiben Sie Text in einfache Anführungszeichen: 'Dune'.

Werte in der falschen Reihenfolge

CREATE TABLE books (id integer, title text);
INSERT INTO books VALUES ('Dune', 1);

Was psql ausgibt

ERROR:  invalid input syntax for type integer: "Dune"

Warum, und die Lösung

Ohne Spaltenliste füllt INSERT die Spalten in der Reihenfolge, die CREATE TABLE vorgegeben hat: erst id, dann title. 'Dune' landet in id, das nur ganze Zahlen annimmt. Geben Sie die Werte in Spaltenreihenfolge an oder nennen Sie die Spalten: INSERT INTO books (title, id) VALUES ('Dune', 1);.

PostgreSQL im Browser: PGlite 0.5.8 (PostgreSQL 18.3), Apache-2.0 und PostgreSQL License. Lizenz und Quellcode

Abschlussquiz

5 Fragen, ohne Hinweise. Ab 80 % ist die Lektion abgeschlossen.

Erledigen Sie zuerst alle Aufgaben oben, um das Abschlussquiz freizuschalten.

Problem melden

Etwas ist falsch oder unklar? Beschreiben Sie es kurz, dann wird es geprüft und korrigiert.

#

Mindestens 20 Zeichen.

Nur, wenn Sie eine Antwort wünschen.

Kernideen

Ein Server und psql als Gegenüber

PostgreSQL arbeitet nach dem Client-Server-Modell. Der Server, ein Programm namens postgres, speichert die Daten und führt SQL aus. psql ist sein interaktives Terminal: Sie tippen SQL, psql schickt es an den Server und zeigt die Zeilen. Für PostgreSQL 18 wählen Sie auf postgresql.org/download Ihr Betriebssystem: Für Windows verweist die Seite auf einen interaktiven Installer von EDB, für Linux auf die Pakete Ihrer Distribution. Danach legt createdb mydb eine Datenbank an, und psql mydb verbindet sich mit ihr. Der Prompt mydb=> (mydb=# für einen Superuser) zeigt, dass psql zuhört. Zeilen mit einem Backslash vorn, etwa \q zum Beenden, sind psql-Befehle, kein SQL. Der Editor auf dieser Seite führt PostgreSQL 18.3 im Browser aus, bei jedem Lauf mit einer frischen, leeren Datenbank.

CREATE TABLE, INSERT, SELECT und ein Semikolon

CREATE TABLE books (id integer, title text) benennt eine Tabelle und gibt jeder Spalte einen Namen und einen Typ. INSERT INTO books VALUES (1, 'Dune') fügt eine Zeile hinzu, die Werte in der Reihenfolge der Spalten; INSERT INTO books (id, title) VALUES … nennt die Spalten, was viele Entwickler klarer finden. Text steht in einfachen Anführungszeichen, doppelte markieren Namen. SELECT * FROM books zeigt alle Spalten aller Zeilen, SELECT title FROM books nur die Titel. Eine Anweisung endet am Semikolon, nicht am Zeilenende, und darf daher über mehrere Zeilen gehen. Schlüsselwörter und Namen unterscheiden keine Groß- und Kleinschreibung: SELECT ist select, und Books ist die Tabelle books.

Zuerst die ERROR-Zeile lesen

Scheitert eine Anweisung, antwortet PostgreSQL mit einer Zeile wie ERROR: relation "book" does not exist. Sie sagt, was schiefging, und nennt das Objekt: hier eine Tabelle book, die es nicht gibt, weil die Tabelle books heißt. psql ergänzt die Stelle (psql:main.sql:3:) und eine LINE-Zeile mit einem Zirkumflex unter der Fehlerstelle. Der Editor auf dieser Seite führt Ihre Datei so aus wie psql -X -q -v ON_ERROR_STOP=1 -f main.sql: Anweisung für Anweisung, mit Halt beim ersten Fehler. Was davor stand, ist gelaufen; was danach kommt, läuft nie. Beheben Sie also den ersten Fehler und starten Sie neu. Ein fehlendes Semikolon etwa meldet sich als Syntaxfehler beim nächsten Wort.

Quellen

Zuletzt geprüft am 30. September 2026