7 Punkte von GN⁺ 2024-11-13 | 2 Kommentare | Auf WhatsApp teilen

Dinge, die ich gern über Postgres gewusst hätte

  • Der enorme Umfang der Postgres-Dokumentation: Die offizielle Dokumentation von Postgres ist sehr gut, aber so umfangreich, dass es für Einsteiger-Entwickler schwierig ist, sie von Anfang bis Ende zu lesen.

Datennormalisierung

  • Datennormalisierung: Der Prozess, redundante Daten aus einem Datenbankschema zu entfernen. Zum Beispiel ist es besser, in der Tabelle documents keine Spalte user_email zu haben, sondern sie über einen Fremdschlüssel mit der Tabelle users zu verknüpfen.
  • Die Notwendigkeit der Denormalisierung: Manchmal ist Denormalisierung nötig, um bestimmte Daten schneller lesen zu können. Denormalisierte Daten gehen jedoch mit den Kosten von Dateninkonsistenzen oder erhöhter Schreibkomplexität einher.

Dem Rat der Postgres-Macher folgen

  • Die „Dinge, die man nicht tun sollte“ im Postgres-Wiki: Im offiziellen Postgres-Wiki gibt es eine Liste mit „Dingen, die man nicht tun sollte“. Auch wenn man nicht alles versteht, kann man damit Fehler vermeiden.
  • Empfehlungen: Für die Speicherung von Text immer den Typ text verwenden, für alle Zeitstempel timestampz/time with time zone verwenden, und Tabellennamen in snake_case schreiben.

Allgemeine SQL-Eigenheiten

  • SQL ist nicht case-sensitive: SQL-Schlüsselwörter unterscheiden nicht zwischen Groß- und Kleinschreibung. Das gilt nicht nur für Postgres.
  • Die Besonderheit von NULL: NULL in SQL bedeutet „unbekannt“ und führt in Kombination mit den meisten Operatoren ebenfalls zu NULL. Mit Operatoren wie IS NULL und IS NOT NULL kann man NULL vergleichen.

psql nützlicher machen

  • Bessere Lesbarkeit der Ausgabe: Man kann einen Terminal-Pager verwenden, damit lange Ausgaben besser lesbar sind. less lässt sich als Pager konfigurieren.
  • Mehrdeutiges NULL verdeutlichen: In psql kann man eine Zeichenkette für NULL festlegen, damit NULL in der Ausgabe klarer erkennbar ist.
  • Autovervollständigung verwenden: psql unterstützt Autovervollständigung, sodass sich SQL-Schlüsselwörter oder Tabellennamen leichter eingeben lassen.

Die Wirkung zusätzlicher Indizes

  • Definition von Indizes: Ein Index ist eine Datenstruktur, die hilft, Daten schnell abzufragen.
  • Grenzen von Indizes: In einer lokalen Datenbank mit kaum vorhandenen Zeilen sind Indizes möglicherweise nicht nützlich. Wenn mehrere Spalten indiziert werden, ist die Reihenfolge wichtig.

Einsatz von JSONB

  • Vor- und Nachteile von JSONB: Postgres bietet Funktionen, um JSON effizient zu speichern und abzufragen, aber bei falscher Nutzung kann die Performance leiden.
  • Strukturelle Grenzen von JSONB: Eine JSONB-Spalte garantiert keine Struktur und ist daher nicht so selbstdokumentierend wie ein klassisches Tabellenschema.

Weitere nützliche Tipps

  • Probleme mit langen Transaktionen: Wenn eine Transaktion zu lange läuft, kann sie andere Clients beim Zugriff auf die Datenbank behindern.
  • Die starken Funktionen von Postgres: Postgres bietet die Stärken dokumentenorientierter Datenbanken und kann über JSONB Daten effizient speichern und abfragen.

2 Kommentare

 
bbulbum 2024-11-19

Das sollte man nicht tun. Das werde ich mir irgendwann einmal durchlesen.

 
GN⁺ 2024-11-13
Hacker-News-Kommentare
  • Postgres unterscheidet zwischen Groß- und Kleinschreibung, aber dass Schlüsselwörter in Abfragen großgeschrieben werden, dient der besseren Lesbarkeit. Das ist nicht zwingend erforderlich, aber beim Debugging ist es nützlich, Abfragen in eine leichter lesbare Form zu bringen

    • Ähnlich wie beim Aufräumen von Code in anderen Sprachen verkürzen konsistente Einrückungen usw. die Zeit zum Verstehen, sodass man sich auf die wichtigen Teile konzentrieren kann
    • Bezeichner mit Großbuchstaben wie actuallyUsingCaseInIdentifiers möchte man eher vermeiden
  • Ich habe zum ersten Mal den Wiki-Eintrag "Don't Do This" entdeckt, und er ist sehr nützlich

  • Vieles davon ist nicht auf Postgres beschränkt (z. B. die Eigenheiten von null, die Reihenfolge von Indexspalten usw.)

    • Zum Beispiel ist auch in MySQL nicht intuitiv, wie null mit Indizes und Unique-Constraints interagiert
    • Wenn es in einer Benutzertabelle eine E-Mail-Spalte gibt, die null nicht zulässt, und eine Benutzernamen-Spalte, die null zulässt, dann kann man bei einem Unique-Constraint wie (email, username) dieselbe E-Mail mehrfach mit einem null-Benutzernamen einfügen
  • Dem Rat, Daten zu normalisieren, sollte man mit Vorsicht begegnen

    • Der Autor erwähnte 10 verschiedene Arten der Normalisierung, aber die meisten Menschen werden 7 davon nie brauchen
  • Ich wünschte, Entwickler würden sich mehr um Normalisierung kümmern und aufhören, alles in JSON(b)-Spalten zu stecken

  • Das Wort "Journey" wirkt in Blogs wegen der übermäßigen Verwendung unangenehm

  • Der Code-Abschnitt ist auf Mobilgeräten so unhandlich, dass man fast gar nicht scrollen kann

  • In der JSON-Spezifikation ist 'null' ein konstanter Wert und unterscheidet sich von SQL-NULL

  • Das Hinzufügen eines Index kann auch überhaupt keinen Effekt haben

    • Teile der Postgres-Philosophie sind zu dogmatisch oder schwer verständlich
    • Hoffentlich wird in künftigen Versionen Unterstützung für Hints hinzugefügt
  • Solche Artikel zu lesen und 90 % davon zu verstehen, gibt einem ein gewisses berufliches Selbstbewusstsein für die Rollen, die man ausgeübt hat