Inhalt | 6 |
1 Einführung und Geschichte | 12 |
1.1 Einführung und Motivation | 12 |
1.2 Die Geschichte von PostgreSQL | 13 |
1.3 Verwendete Version | 14 |
1.4 Konventionen | 14 |
2 Installation und Quellen | 16 |
2.1 Paketinstallation | 16 |
2.2 Installation aus dem Quellcode | 18 |
2.2.1 Installation aus dem Quellcode unter Linux | 18 |
2.2.2 Installation aus dem Quellcode unter Windows | 20 |
2.3 Erste Schritte | 21 |
3 Server und Datenbank konfigurieren und administrieren | 26 |
3.1 Parameter-Einstellungen vornehmen | 26 |
3.1.1 Parameter für System-Ressourcen | 27 |
3.1.2 Parameter für Write Ahead Log (WAL) und Checkpoints | 29 |
3.1.3 Parameter für den Background Writer | 30 |
3.1.4 Parameter für Archivierung, Streaming Replication und Standby-Server | 31 |
3.1.5 Parameter für Verbindung und Authentifizierung | 32 |
3.1.6 Parameter für Client-Standards | 33 |
3.1.7 Parameter für VACUUM | 34 |
3.1.8 Parameter für SQL Tuning | 34 |
3.1.9 Parameter für Logging und Tracing | 35 |
3.1.10 Benutzerspezifische Parameter | 37 |
3.1.11 Parameter für Entwickler | 37 |
3.2 Die WAL-Archivierung einschalten | 38 |
3.3 Authentifizierung von Clients | 40 |
3.4 Einen Connection Pool aufsetzen | 42 |
3.5 Concurrency | 44 |
3.6 Datenbanken verwalten | 46 |
3.7 Wartungsaufgaben | 51 |
3.7.1 VACUUM | 51 |
3.7.2 ANALYZE | 55 |
3.8 Nützliche Skripte und Hinweise | 55 |
3.8.1 Eine Passwort-Datei verwenden | 56 |
3.8.2 Welche Parameter sind Nicht-Standard? | 56 |
3.8.3 Eine Session killen | 56 |
3.8.4 Ein Tabelle nach Excel kopieren | 57 |
3.8.5 Die Datei .psqlrc | 58 |
3.8.6 Einen WAL-Switch manuell auslösen | 58 |
3.8.7 Die PostgreSQL-Server Log-Datei in eine Tabelle laden | 59 |
3.8.8 Automatisches Rotieren von Log-Dateien | 59 |
3.8.9 Nicht verwendete Indexe identifizieren | 60 |
3.8.10 Microsoft Excel als Datenbank-Client | 60 |
3.8.11 Den Inhalt der Kontrolldatei ausgeben | 61 |
3.8.12 Platzverbrauch von Tabellen | 62 |
3.8.13 Die Anzahl von Verbindungen begrenzen | 63 |
3.8.14 Tabellen und Indexe in eine andere Tablespace legen | 64 |
3.8.15 Updateable Views | 65 |
3.8.16 Temporäre Tablespaces verwalten | 66 |
3.8.17 Lang laufende SQL-Anweisungen | 66 |
4 Sicherung und Wiederherstellung | 68 |
4.1 SQL Dump | 68 |
4.2 Offline-Sicherung auf Dateisystem-Ebene | 72 |
4.3 Online-Sicherung mit Point-in-time-Recovery | 73 |
4.4 Funktionen zur Sicherung und Wiederherstellung | 76 |
5 Sicherheit und Überwachung | 78 |
5.1 Sicherheit | 79 |
5.1.1 Datenbank-Rollen und -Privilegien | 79 |
5.1.2 Authentifizierung und Zugangskontrolle | 85 |
5.1.3 Rechteverwaltung (Privilegien) | 87 |
5.1.4 Optionen für die Verschlüsselung | 92 |
5.1.5 Out-of-the-box-Sicherheit | 95 |
5.2 Hacker-Attacken abwehren | 97 |
5.2.1 Brute-Force-Attacken | 97 |
5.2.2 Network Spoofing | 99 |
5.2.3 SQL Injection | 100 |
5.3 Überwachung | 101 |
5.3.1 Auditing | 102 |
5.3.2 Monitoring | 104 |
6 Performance Tuning | 110 |
6.1 PostgreSQL Server-Tuning | 110 |
6.1.1 Goldene Regeln für neue Server und Datenbanken | 111 |
6.1.2 Tuning mit „pgtune“ | 112 |
6.1.3 Optimierung der Memory-Parameter | 113 |
6.2 Performance-Analyse | 116 |
6.2.1 Analyse mit dem „Statistics Collector“ | 116 |
6.2.2 Der Background Writer | 119 |
6.2.3 Analyse mit „pgstatspack“ | 120 |
6.3 Partitionierung | 125 |
6.3.1 Vererbung von Tabellen | 126 |
6.3.2 Tabellen partitionieren | 127 |
6.4 Benchmarks | 129 |
6.4.1 Ein TPCC-Benchmark | 131 |
6.4.2 Fazit des Benchmarks | 135 |
7 Hot Standby und Streaming Replication | 136 |
7.1 Eine Standby-Datenbank aufsetzen | 137 |
7.1.1 Vorbereitung und Planung | 137 |
7.1.2 Konfiguration und Aktivierung | 138 |
7.1.3 Streaming Replication einsetzen | 141 |
7.1.4 Die Replikation überwachen | 142 |
7.1.5 Synchrone Replikation | 142 |
7.2 Eine Hot-Standby-Datenbank betreiben | 143 |
7.3 Failover und Switchover | 146 |
8 Entwicklung von Applikationen für PostgreSQL | 150 |
8.1 Client-Programmierung | 150 |
8.1.1 Die PostgreSQL Frontend Library „libpq“ | 150 |
8.1.2 PostgreSQL-Applikationen mit Java entwickeln | 163 |
8.2 Server-Programmierung | 172 |
8.2.1 Integrierte Prozedurale Sprachen | 172 |
8.2.2 Trigger | 194 |
8.2.3 SQL erweitern | 196 |
9 Das Regelsystem | 202 |
9.1 Das Regelsystem für SELECT-Anweisungen | 203 |
9.2 Das Regelsystem für DML-Anweisungen | 204 |
9.3 Regeln und Views | 207 |
10 Optimierung von SQL-Anweisungen | 210 |
10.1 Der Query Optimizer | 210 |
10.2 Indexe effektiv einsetzen | 212 |
10.3 Optimierung von SQL-Anweisungen | 215 |
10.3.1 Der EXPLAIN-Befehl | 216 |
10.3.2 Ausführungspläne verstehen | 219 |
11 PostGIS | 224 |
11.1 PostGIS und PostgreSQL | 224 |
11.2 PostGIS installieren | 225 |
11.2.1 Paketorientierte Installation | 225 |
11.2.2 Installation aus dem Quellcode | 227 |
11.3 Erste Schritte mit PostGIS | 227 |
11.4 SQL-Abfragen in PostGIS | 233 |
12 PostgreSQL in die IT-Landschaft einbinden | 236 |
12.1 Funktionen und Features | 236 |
12.2 Datensicherung und Wiederherstellung | 237 |
12.3 Desaster Recovery (DR) | 238 |
12.4 Überwachung | 239 |
12.5 Administrierbarkeit | 239 |
12.6 Verfügbarkeit | 240 |
12.7 Datensicherheit und Auditing | 240 |
12.8 Performance und Skalierbarkeit | 241 |
12.9 Schnittstellen und Kommunikation | 242 |
12.10 Support | 242 |
12.11 Fazit | 243 |
13 Migration von MySQL nach PostgreSQL | 244 |
13.1 Unterschiede zwischen MySQL und PostgreSQL | 244 |
13.2 Eine Migration durchführen | 246 |
14 Von Oracle auf PostgreSQL umsteigen | 252 |
14.1 Den Umstieg planen | 252 |
14.2 Unterschiede zwischen Oracle und PostgreSQL | 254 |
14.2.1 Unterschiede bei Datentypen | 254 |
14.2.2 Steigerung der Kompatibilität von PostgreSQL | 258 |
14.3 Portierung von Oracle PL/SQL | 259 |
14.4 Tools zur Unterstützung der Migration | 262 |
14.5 Technisches Vorgehen | 262 |
14.6 Eine Beispiel-Migration | 263 |
14.6.1 Übernahme der Daten | 267 |
15 Replikation zwischen PostgreSQL und Oracle | 270 |
15.1 Datenbank-Link zwischen Oracle und PostgreSQL | 270 |
15.2 Replikation mit Transaktionslog | 276 |
15.2.1 Replikation mit Oracle Streams Heterogeneous Information Sharing | 277 |
15.2.2 Replikation mit Oracle XStream | 281 |
15.2.3 Replikation von Oracle zu PostgreSQL mit „XStream Out“ | 282 |
Index | 296 |