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
Das sollte man nicht tun. Das werde ich mir irgendwann einmal durchlesen.
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
actuallyUsingCaseInIdentifiersmöchte man eher vermeidenIch 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.)
(email, username)dieselbe E-Mail mehrfach mit einem null-Benutzernamen einfügenDem Rat, Daten zu normalisieren, sollte man mit Vorsicht begegnen
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
Solche Artikel zu lesen und 90 % davon zu verstehen, gibt einem ein gewisses berufliches Selbstbewusstsein für die Rollen, die man ausgeübt hat