# Erweiterte Datentypen in PostgreSQL
- Andreas Scherbaum. Arbeitet seit 1998 mit Postgres
- Hat nen krassen Blog: andreas.scherbaum.la
- Welche Datentypen nutzen wir so?
- Datenbank an sich weiß nix über Datentypen. Diese sind nur Extensions
- Everything is a star!
- Alles ist nichts!
- Man kann Datenbanken, Tabellen und Inhalte in non printable whitespace machen. Einfach weils geht
- Nicht Money-Type verwenden.
	- Man kann nur eine Währung speichern, also keine Konvertierung
	- Je nach Umgebungavariable wird bspw. decimal separator anders interpretiert.
- Währungen mit NUMERIC Type speichern. Bis 1000 Stellen Genauigkeit
- Arrays. Man kann alles in Arrays packen. Mittlerweile wird mehr JSON für flexible Daten genutzt.
- Arrays beginnen bei 1!
- JSON(B): JSONB ist das was man haben will, da mehr Funktionen.
	- JSONB wird beim speichern geparsed. JSON wird beim lesen geparsed, heißt man kann ungültiges JSON abspeichern
	- Datum in JSONB speichern ist wegen Validierung schlecht.
- Composite Types:
	- Wird auch Row Type oder Record
	- Datentyp definieren und dann kann man diesen in der Datenbank weiter verwenden.
- Besseres Feature als Composite Types: Domains
	- Ein Datentyp mit zusätzlichen Constraints
	- Beliebig viele Constraints und man kann den Datentyp in allen Tabellen verwenden.
	- Sind sehr umfangreich und im SQL Standard integriert.
	- Chacks kann man in Domain Type auslagern anstatt krasse Funktionen zu schreiben.
- Range Types:
	- Anfang und Ende
	- Kann man als eigene Typen erstellen
	- Sinnvoll für Zeitspannen. Man kann wieder Checks drauf laufen lassen
	- GIST Index darauf bilden. Daraufhin kann man ORDER BY nur über Index scan ausführen lassen -> sehr schnell
- Create your own type:
	- Wie hat PHP Postgres Boolean Typen vor PDO Treiber behandelt? Hat es gar nicht behandelt. Hat alles als Text behandelt.
	- Deshalb true/false auf Integer umwandeln. Also besser einfach PDO verwenden.
