Inhalt | 7 |
1 Einführung und Geschichte | 13 |
1.1 Die Geschichte von PostgreSQL | 14 |
1.2 Verwendete Version | 15 |
1.3 Konventionen | 15 |
1.4 Software und Skripte | 15 |
2 Installation aus Paketen und Quellcode | 17 |
2.1 Paketinstallation | 17 |
2.1.1 Paketinstallation unter Linux | 17 |
2.1.2 Paketinstallation unter Windows | 18 |
2.2 Installation aus dem Quellcode | 20 |
2.2.1 Installation aus dem Quellcode unter Linux | 20 |
2.2.2 Installation aus dem Quellcode unter Windows | 21 |
2.3 Erste Schritte | 24 |
3 Upgrade auf Version 10 | 29 |
3.1 Upgrade mit pg_dumpall | 29 |
3.2 Upgrade mit pg_upgrade | 31 |
3.3 Migration nach Native Partitioning | 33 |
3.4 Regressionstests | 35 |
4 Die Architektur von PostgreSQL | 37 |
4.1 Überblick | 37 |
4.2 Memory und Prozesse | 38 |
4.2.1 Hintergrundprozesse | 39 |
4.2.2 Der Shared Memory | 41 |
4.3 VACUUM | 49 |
4.4 Cluster, Datenbanken und Tabellen | 52 |
5 Server und Datenbanken administrieren | 57 |
5.1 Parameter-Einstellungen | 57 |
5.1.1 Einstellungen im Betriebssystem | 57 |
5.1.2 Cluster-Einstellungen | 59 |
5.1.3 Gebietsschema und Zeichensatz | 69 |
5.2 Datenbanken verwalten | 72 |
5.3 Konkurrenz | 75 |
5.4 Die WAL-Archivierung einschalten | 78 |
5.5 Wartungsaufgaben | 80 |
5.5.1 VACUUM | 80 |
5.5.2 ANALYZE | 83 |
5.6 Nützliche Skripte und Hinweise | 83 |
5.6.1 Eine Passwortdatei verwenden | 84 |
5.6.2 Welche Parameter sind Nicht-Standard? | 84 |
5.6.3 Eine Session killen | 85 |
5.6.4 Eine Tabelle nach Excel kopieren | 85 |
5.6.5 Die Datei .psqlrc | 86 |
5.6.6 Einen WAL-Switch manuell auslösen | 87 |
5.6.7 Die PostgreSQL-Server-Logdatei in eine Tabelle laden | 87 |
5.6.8 Automatisches Rotieren von Logdateien | 88 |
5.6.9 Nicht verwendete Indexe identifizieren | 88 |
5.6.10 Microsoft Excel als Datenbank-Client | 89 |
5.6.11 Den Inhalt der Kontrolldatei ausgeben | 91 |
5.6.12 Platzverbrauch von Tabellen | 92 |
5.6.13 Die Anzahl von Verbindungen begrenzen | 92 |
5.6.14 Tabellen und Indexe in einen anderen Tablespace legen | 93 |
5.6.15 Temporäre Dateien verwalten | 94 |
5.6.16 Lang laufende SQL-Anweisungen | 94 |
5.7 Beispielschemata | 95 |
6 Neue Features | 97 |
6.1 Neue Features in Version 10 | 97 |
6.1.1 Native Table Partitioning | 98 |
6.1.2 Paralleles SQL | 100 |
6.1.3 Logische Replikation | 100 |
6.1.4 Änderungen der Architektur | 102 |
6.1.5 SQL-Anweisungen | 104 |
6.1.6 Monitoring | 110 |
6.1.7 Werkzeuge | 111 |
6.1.8 Konfigurationsparameter | 114 |
6.2 Neue Features in den Versionen 9.2 bis 9.6 | 114 |
6.2.1 Backend | 114 |
6.2.2 Replikation | 115 |
6.2.3 Performance | 116 |
7 Sicherung und Wiederherstellung | 117 |
7.1 Online-Sicherung mit Point-in-time-Recovery | 118 |
7.2 Offline-Sicherung auf Dateisystemebene | 123 |
7.3 SQL Dump | 123 |
8 Sicherheit und Überwachung | 129 |
8.1 Sicherheit | 130 |
8.1.1 Rollen und Privilegien | 130 |
8.1.2 Authentifizierung und Zugangskontrolle | 137 |
8.1.3 Rechteverwaltung | 139 |
8.1.4 Sichere Verbindungen | 144 |
8.1.5 Out-of-the-box-Sicherheit | 148 |
8.1.6 Hacker-Attacken abwehren | 149 |
8.2 Überwachung | 154 |
8.2.1 Auditing | 154 |
8.2.2 Monitoring | 156 |
9 Replikation zwischen Clustern | 163 |
9.1 Physische Replikation | 164 |
9.1.1 Vorbereitung und Planung | 164 |
9.1.2 Konfiguration und Aktivierung | 165 |
9.1.3 Kaskadenförmige Replikation | 169 |
9.1.4 Hot Standby | 170 |
9.1.5 Synchrone Replikation | 171 |
9.1.6 Die Replikation überwachen | 173 |
9.1.7 Failover und Switchover | 175 |
9.2 Logische Replikation | 180 |
9.3 Logical Decoding | 186 |
9.3.1 Logical Decoding mit Java als Consumer | 187 |
10 Das Regelsystem | 191 |
10.1 Das Regelsystem für SELECT-Anweisungen | 192 |
10.2 Das Regelsystem für DML-Anweisungen | 193 |
10.3 Regeln und Views | 197 |
11 Performance Tuning | 199 |
11.1 Out-of-the-box-Tuning | 199 |
11.1.1 Goldene Regeln für neue Server und Datenbanken | 200 |
11.1.2 Das Utility „pgTune“ | 201 |
11.1.3 Optimierung von Memory-Parametern | 202 |
11.2 Performance-Analyse | 205 |
11.2.1 Analyse mit dem „Statistics Collector“ | 205 |
11.2.2 Der Background Writer | 212 |
11.2.3 Analyse mit „pgstatspack“ | 213 |
12 Optimierung von SQL-Anweisungen | 217 |
12.1 Ausführungsschritte | 218 |
12.2 Der SQL-Optimizer | 219 |
12.3 Statistiken und Histogramme | 220 |
12.4 Zugriffsmethoden | 223 |
12.5 Join-Methoden | 224 |
12.6 SQL-Optimierung | 227 |
12.6.1 Der EXPLAIN-Befehl | 228 |
12.6.2 Ausführungspläne verstehen und optimieren | 231 |
13 Einsatz großer Datenbanken | 241 |
13.1 Partitionierung von Tabellen | 242 |
13.1.1 Native Table Partitioning | 242 |
13.2 Paralleles SQL | 245 |
13.3 Materialized Views | 250 |
13.4 BRIN-Indexe | 252 |
14 PostGIS | 257 |
14.1 PostGIS und PostgreSQL | 257 |
14.2 PostGIS installieren | 258 |
14.2.1 Paketorientierte Installation | 258 |
14.2.2 Installation aus dem Quellcode | 261 |
14.3 Erste Schritte mit PostGIS | 262 |
14.4 PostGIS in der Praxis anwenden | 267 |
15 Applikationen für PostgreSQL entwickeln | 273 |
15.1 Applikationsdesign | 273 |
15.2 Entwicklungswerkzeuge | 277 |
15.3 PostgreSQL Extensions | 278 |
16 SQL-Erweiterungen | 281 |
16.1 Datentypen | 281 |
16.2 Funktionen und Sprachen | 282 |
16.2.1 SQL-Funktionen | 283 |
16.2.2 Funktionen mit prozeduralen Programmiersprachen | 287 |
16.2.3 C-Funktionen | 291 |
16.3 Operatoren | 296 |
16.4 Das Extension-Netzwerk | 298 |
16.4.1 Extensions entwickeln | 299 |
16.4.2 Extensions publizieren | 302 |
17 PL/pgSQL-Funktionen und Trigger | 307 |
17.1 PL/pgSQL-Funktionen | 307 |
17.1.1 Abfragen und Resultsets | 311 |
17.1.2 Cursor verwenden | 313 |
17.1.3 DML-Anweisungen | 315 |
17.1.4 Dynamische SQL-Anweisungen | 317 |
17.1.5 Fehlerbehandlung | 318 |
17.2 Trigger | 319 |
18 Embedded SQL (ECPG) | 323 |
19 Java-Programmierung | 333 |
19.1 Eine Entwicklungsumgebung einrichten | 333 |
19.2 Verarbeitung von Resultsets | 336 |
19.3 DML-Anweisungen und Transaktionen | 339 |
19.4 Bindevariablen verwenden | 341 |
19.5 Java und Stored Functions | 342 |
19.6 Large Objects | 346 |
19.7 JDBC-Tracing | 350 |
20 Die C-Library libpq | 353 |
20.1 Die Entwicklungsumgebung einrichten | 353 |
20.2 Programme mit „libpq“ erstellen | 358 |
21 PHP-Applikationen | 371 |
21.1 Installation und Konfiguration | 372 |
21.2 Applikationen mit PHP entwickeln | 374 |
21.3 Die PDO-API | 382 |
22 Client-Programmierung mit Perl-DBI | 385 |
22.1 SELECT-Anweisungen und Resultsets | 388 |
22.2 DML-Anweisungen | 392 |
22.3 Bindevariablen verwenden | 393 |
22.4 Fehlerbehandlung und Tracing | 395 |
22.5 Nützliche Skripte und Beispiele | 398 |
22.5.1 Mehrere Server abfragen | 398 |
22.5.2 Parallele Verbindungen | 399 |
22.5.3 Large Objects verarbeiten | 402 |
22.5.4 Asynchrone Abfragen | 402 |
22.5.5 Datenbanken vergleichen | 403 |
23 Large Objects | 407 |
24 PostgreSQL in die IT-Landschaft einbinden | 413 |
24.1 Features und Funktionen | 413 |
24.2 Datensicherheit und Wiederherstellung | 414 |
24.3 Desaster Recovery | 415 |
24.4 Überwachung | 416 |
24.5 Administrierbarkeit | 416 |
24.6 Verfügbarkeit | 417 |
24.7 Datensicherheit und Auditing | 418 |
24.8 Performance und Skalierbarkeit | 418 |
24.9 Schnittstellen und Kommunikation | 419 |
24.10 Support | 420 |
24.11 Fazit | 420 |
25 Migration von MySQL-Datenbanken | 421 |
25.1 Unterschiede zwischen MySQL und PostgreSQL | 421 |
25.2 Eine Migration durchführen | 423 |
26 Von Oracle nach PostgreSQL migrieren | 429 |
26.1 Die Migration planen | 429 |
26.2 Unterschiede zwischen Oracle und PostgreSQL | 431 |
26.2.1 Unterschiede der Datentypen | 431 |
26.2.2 Syntaktische und logische Unterschiede | 432 |
26.2.3 Steigerung der Kompatibilität von PostgreSQL | 435 |
26.3 Portierung von Oracle PL/SQL | 436 |
26.4 Tools zur Unterstützung der Migration | 439 |
26.5 Technisches Vorgehen | 441 |
26.6 Ein Migrationsbeispiel | 441 |
26.6.1 Manuelle Migration | 442 |
26.6.2 Migration unter Verwendung von „Ora2Pg“ | 448 |
26.6.3 Große Tabellen laden | 452 |
27 Replikation zwischen Oracle und PostgreSQL | 455 |
27.1 Datenbanklink zwischen Oracle und PostgreSQL | 455 |
27.2 Replikation mit Oracle XStream | 461 |
28 PostgreSQL in der Cloud | 475 |
28.1 Private Cloud | 476 |
28.2 Public Cloud | 478 |
Index | 481 |