Datenbank Tabellen Erstellen
Wenn du das Repo lokal oder auf coder beisammen hast, kannst du den branch mit git switch 00-introduction erreichen. Dann hast du alle benötigten Dateien.
Mit docker compose up -d kannst du in der Konsole/Terminal kannst du sicherstellen, dass es läuft.
Nutze pgadmin4 um eine Tabelle anzulegen.1
1 Falls du coder nutzt, und es nicht geht, fehlt eventuell die Port-Weiterleitung. Wenn du nicht weist, was das ist, frage einen Betreuer.
Bis auf die GUI Elemente, die nicht verwendet sind, ist bis und mit “To see data” eine gute Einführung ins Thema:
Du kannst eine beliebige Tabelle erstellen. Wenn du nicht weisst, was genau du machen sollst, haben wir hier ein Beispiel:

Beachte, dass eine eindeutige Identifikation im Regelfall benötigt wird, darum solltest du mindestens ein Feld mit dem Typ “Serial” (im Tabellen Erstellungsdialog) und dem Name “id” erstellen.
Folgendes ist das entsprechende SQL:
BEGIN;
CREATE TABLE IF NOT EXISTS public.example_table
(
id SERIAL PRIMARY KEY,
name character varying(20) NOT NULL,
description text,
img bytea,
age smallint
);
END;Frage: Schaue anschliessend, was der Typ und die Einschränkungen (constraint) sind. Warum ist das nicht vom Typ “Serial”? Was vermutest du, was der Sinn dahinter ist?
Am einfachsten in der Dokumentation nachschauen www.postgresql.org/docs/current/datatype-numeric.html
The data types smallserial, serial and bigserial are not true types, but merely a notational convenience for creating unique identifier columns (similar to the AUTO_INCREMENT property supported by some other databases). In the current implementation, specifying:
CREATE TABLE tablename (
colname SERIAL
);
is equivalent to specifying:
CREATE SEQUENCE tablename_colname_seq AS integer;
CREATE TABLE tablename (
colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
Thus, we have created an integer column and arranged for its default values to be assigned from a sequence generator. A NOT NULL constraint is applied to ensure that a null value cannot be inserted. (In most cases you would also want to attach a UNIQUE or PRIMARY KEY constraint to prevent duplicate values from being inserted by accident, but this is not automatic.) Lastly, the sequence is marked as “owned by” the column, so that it will be dropped if the column or table is dropped.
Dokumentation zum “wie” kannst du unter https://www.pgadmin.org/docs/pgadmin4/latest/table_dialog.html finden.
Du darfst das natürlich auch mit SQL machen, da ist die Anleitung für Postgres selbst zu finden https://www.postgresql.org/docs/current/sql-createtable.html.
Falls du postgREST ausprobieren möchtest (automatisch generierte Schnittstelle die von Webseiten genutzt werden können, mehr dazu in späteren Übungsteilen) muss manchmal ein Reload bei Änderungen ausgelöst werden. Dies kann erreicht werden, indem in der SQL Konsole im pgadmin (oder für Hardcorler in der Konsole des Postgres-Containers selbst) folgenden Befehl eingegeben werden kann:
NOTIFY pgrst, 'reload config';
Referenzen
Wie du bald noch erfahren wirst, braucht es hin und wieder Verweise auf andere Einträge in anderen Tabellen. Wir können das mit dem pgAdmin jetzt schon:
- Erstelle eine Tabelle
reference_testmit einer id (typ serial), einem Namen (typ text) und einer example_reference (typ integer) - Unter dem Reiter
ConstraintswähleForeign Keyund wähleexample_referenceund dann deine Tabelle von oben mit der Spalteid.

Das Resultat hat dann ungefähr diese Eigenschaften:

Löschen und aufräumen
Jetzt kannst du alle Tabellen wieder löschen (Drop Table), wir brauchen diese nicht mehr.
Postgres Datentypen
Auf https://www.postgresql.org/docs/current/datatype.html findest du verschiedene Datentypen.
- Welche sind gleich mit denjenigen, welche aus Python/Java bekannt sind?
- Ordne den Typen die Klassifizierung aus der Vorlesung zu (sind alle zu finden)?
- Welche sind anders?
- Was ist der Bytea Typ und für was kann man den brauchen?
- Daten speichern: Statt einer Datenbank kann man auch andere Systeme nutzen, wie zB Dateien. Wie im ersten Kursteil bereits gesehen, ist das Speichern einer Datei der übliche Prozess mit z.B. Word. Suche eine Quelle, welche erklärt, was der Unterschied ist.
- Warum macht man sich den Aufwand einer Datenbank, wenn man ja einfach das Dateisystem nutzen könnte.
- Wie funktioniert das speichern und laden im Vergleich zu einem reinem Dateisystem?
- Hat ein Datenbanksystem auch Dateien, welche gespeichert werden?