Datenbank-Anwendungen mit PostgreSQL Datenbank- Anwendungen mit PostgreSQL Einführung in die Programmierung mit SQL, Java, C/C++, Perl, PHP und Delphi Ewald Geschwinde Hans-Jürgen Schönig new technology Markt+TechnikVerlag BibliografischeInformationDerDeutschenBibliothek DieDeutscheBibliothekverzeichnetdiesePublikationinderDeutschenNationalbibliografie;detailliertebibliografische DatensindimInternetüber<http://dnb.ddb.de>abrufbar. DieInformationenindiesemBuchwerdenohneRücksichtaufeineneventuellenPatentschutzveröffentlicht. WarennamenwerdenohneGewährleistungderfreienVerwendbarkeitbenutzt. BeiderZusammenstellungvonTextenundAbbildungenwurdemitgrößterSorgfaltvorgegangen.Trotzdemkönnen Fehlernichtvollständigausgeschlossenwerden.Verlag,HerausgeberundAutorenkönnenjedochfürfehlerhafte AngabenundderenFolgenwedereinejuristischeVerantwortungnochirgendeineHaftungübernehmen.Für VerbesserungsvorschlägeundHinweisesindVerlagundHerausgeberdankbar. AlleRechtevorbehalten,auchdiederfotomechanischenWiedergabeundSpeicherunginelektronischenMedien.Die gewerblicheNutzungderindiesemProduktgezeigtenModelleundArbeitenistnichtzulässig.FastalleHardware-und Softwarebezeichnungen,dieindiesemBucherwähntwerden,sindgleichzeitigeingetrageneWarenzeichenoder solltenalssolchebetrachtetwerden. Umwelthinweis:DiesesBuchwurdeaufchlorfreigebleichtemPapiergedruckt.DieEinschrumpffolie–zumSchutzvor Verschmutzung–istausumweltverträglichemundrecyclingfähigemPE-Material. 10 9 8 7 6 5 4 3 2 1 06 05 04 03 02 ISBN3-8272-6394-8 (cid:1)c 2002Markt+TechnikVerlag einImprintderPearsonEducationDeutschlandGmbH Martin-Kollar-Straße10–12,D-81829München/Germany AlleRechtevorbehalten Lektorat:BorisKarnikowski,[email protected] Fachkorrektorat:Dr.MichaelMeskes,Jülich Korrektorat:BrigittaKeul,München,BrigitteHamerski,Willich Umschlaggestaltung:adesso21,ThomasArlt,München Herstellung:UlrikeHempel,[email protected] Satz:HilmarSchlegel,Berlin–gesetztinMonotypeTimesNewRoman,LinotypeOptima,LetterGothic DruckundVerarbeitung:BerckerGraphischerBetrieb,Kevelaer PrintedinGermany Inhaltsverzeichnis Widmung 13 Danksagung 13 Kapitel1 Überblick 15 1.1 ÜberPostgreSQL 16 1.2 Lizenz 17 Kapitel2 Installation 19 2.1 UnterstützteBetriebssysteme 20 2.2 InstallationaufUNIX-Systemen 21 2.2.1 InstallationundDeinstallationvonRPM-PaketenunterLinux 21 2.2.2 InstallationaufDebian-basiertenSystemen 23 2.2.3 SourceinstallationunterLinuxundFreeBSD 23 2.2.4 SourceinstallationmitJavaSupportunterLinux 28 2.2.5 SourceinstallationunterSolaris 29 2.3 InstallationunterWindows 30 2.4 TestenderDatenbankundInfoszumFrontend 31 Kapitel3 SQL 35 3.1 Datenbankenanlegenundlöschen 36 3.2 EinfacheSQL-Operationen 38 3.2.1 Tabellenanlegenundlöschen 38 3.2.2 Dateneinfügenundabfragen 42 3.2.3 Datenmodifizieren 47 3.2.4 Datenlöschen 49 3.2.5 Datenverknüpfen 50 3.2.6 Sortieren 54 3.2.7 Sequenzen 56 3.2.8 Aggregierungen 59 3.2.9 Views 64 3.2.10 MengenoperationenmitUNION,INTERSECTundEXCEPT 65 3.2.11 Datenstrukturenmodifizieren 68 3.2.12 Subselects 69 6 Inhaltsverzeichnis 3.3 ImportundExportvonDaten 74 3.3.1 COPY 74 3.3.2 DatenverarbeitungmittelsShell 78 3.3.3 ArbeitenmitBinärdaten 82 3.3.4 ArbeitenmitFremdsystemenundByteorder 83 3.3.5 Laufzeitüberlegungen 84 3.4 Indizierung 85 3.5 GeometrischeDaten 90 3.5.1 GeometrischeDatentypen 90 3.5.2 OperatorenfürgeometrischeAbfragen 95 3.5.3 EineÜbersichtüberallegeometrischenOperatoren 101 3.6 SpeichernvonNetzwerkinformationen 101 3.7 ArbeitenmitDatum 103 3.7.1 date 103 3.7.2 time 104 3.7.3 interval 105 3.7.4 Datumsberechnungen 105 3.8 Transaktionen 107 3.8.1 Grundlagen 108 3.8.2 TransaktionenundSequenzen 112 3.8.3 TransaktionenundZeitfunktionen 113 3.9 Constraints 114 3.9.1 IntegrityConstraints 114 3.9.2 BeschränkungderEingabedaten 119 3.10 BinäreObjekte 120 3.10.1 EinfügenundLöschenvonDateien 120 3.10.2 LöschenvonObjekten 122 3.11 FortgeschrittenesSQL 123 3.11.1 SelektierenvonAggregatinformationen 123 3.11.2 RegularExpressions 125 3.11.3 Vererbung 131 3.11.4 Auto-Joins 134 3.11.5 LEFTundRIGHTJoins 135 3.11.6 VersteckteSpalten 137 Kapitel4 AdministrationundTuning 139 4.1 Laufzeitparameter 140 4.1.1 ÜbersichtüberdiewichtigstenParameter 140 Inhaltsverzeichnis 7 4.1.2 ÄnderungenzurLaufzeit 144 4.2 Netzwerkkonfiguration 145 4.2.1 SSL 147 4.3 Benutzerrechte 150 4.3.1 Benutzer-undGruppenverwaltung 150 4.3.2 Rechtevergabe 154 4.3.3 Superuser 157 4.4 Tuning 157 4.4.1 Indices 158 4.4.2 VACUUM 160 4.4.3 TunendesOptimizers 161 Kapitel5 PL/pgSQLundArbeitenmitRules 169 5.1 Einführung 170 5.1.1 EinfacheFunktionen 171 5.1.2 Kontrollstrukturen 174 5.1.3 ArbeitenmitAbfragen 176 5.1.4 Fehlerabfragen 179 5.1.5 Cursor 181 5.1.6 Effizienzsteigerung 182 5.2 Trigger 182 5.2.1 DefinierenvonTriggern 183 5.2.2 VordefinierteVariablen 185 5.3 Rules 187 5.4 MathematischeFunktionen 189 5.4.1 HyperbolischeFunktionen 190 5.4.2 RekursionenmitPL/pgSQL 192 5.4.3 IterationenmitPL/pgSQL 193 Kapitel6 C/C++ 195 6.1 DieC-Schnittstelle 196 6.1.1 Datenbankverbindungen 196 6.1.2 Datenmodifizieren 199 6.1.3 EinfacheAbfragen 200 6.1.4 Metadaten 203 6.1.5 BinäreCursor 204 6.1.6 BLOBs 206 6.2 WeitereFunktionen 208 8 Inhaltsverzeichnis 6.3 PgEasy 208 6.4 DieC++-Schnittstelle 210 6.4.1 EineinfachesBeispiel 210 6.4.2 EinÜberblicküberdieC++-Schnittstelle 213 Kapitel7 ECPG–DerSQL-Preprocessor 217 7.1 WasistECPG? 218 7.2 Grundlagen 218 7.3 Fehlerbehandlung 222 7.4 ArbeitenmitmehrerenDatenbankverbindungen 229 7.5 SQL-Abfragen 230 7.6 ArbeitenmitTransaktionen 232 7.7 BauenvonAbfragetools 235 7.7.1 AbfragenvonDetailinformationen 235 7.7.2 AbfragenvonDatenundSpaltenköpfen 238 Kapitel8 Perl 243 8.1 PL/Perl 244 8.1.1 Grundlegendes 244 8.1.2 EinfacheFunktionen 245 8.1.3 TabellenalsInputparameter 246 8.1.4 Datenbankzugriffe 247 8.1.5 UntrustedPerl 248 8.2 DasPg-ModulvonPostgreSQL 249 8.2.1 VerbindenzurDatenbank 249 8.2.2 EinfügenundAbfragenvonDaten 251 8.2.3 BehandelnvonNULL-WertenundFeldlängen 255 8.2.4 ArbeitenmitCOPY 256 8.2.5 Tracing 257 8.2.6 ExceptionHandling 259 8.2.7 Fazit 260 8.3 DBI-Programmierung 260 8.3.1 Installation 261 8.3.2 Datenbankverbindungen 262 8.3.3 Abfragen 264 8.3.4 ExceptionHandling 266 8.3.5 DurchführenvonModifikationen 267 8.3.6 Bind-Variablen 268 Inhaltsverzeichnis 9 8.3.7 COPY 269 8.3.8 DBI-Parameter 270 8.3.9 Binärobjekte 272 8.4 DBI-Proxies 274 Kapitel9 PHP 279 9.1 Grundfunktionen 280 9.1.1 VerbindenzurDatenbank 280 9.1.2 AbfragenvonVerbindungsparametern 282 9.1.3 Datenabfragen 284 9.1.4 Metadaten 286 9.1.5 COPY 288 9.1.6 Tracing 289 9.2 ArbeitenmitBinärobjekten 290 9.3 PersistenteDatenbankverbindungen 293 9.3.1 Allgemeines 293 9.3.2 Befehle 294 Kapitel10 Python 295 10.1 PL/Python 296 10.1.1 EinfacheBeispiele 296 10.1.2 TriggerundDatenbankschnittstellen 297 10.2 PythonalsScriptsprache 299 10.2.1 Datenbankverbindungen 299 10.2.2 Datenabfragen 301 10.2.3 COPY 304 10.2.4 DieDBWrapper-Klasse 304 Kapitel11 EinewissenschaftlicheAnwendung:EFEU 307 11.1 ÜberEFEU 308 11.1.1 LizenzundVerfügbarkeit 308 11.1.2 Aufbau 308 11.2 Installation 309 11.3 eshalsInterpretersprache 310 11.4 Datenbankinteraktion 311 11.5 MehrdimensionaleDatenmatrizen 312 11.6 TextgenerierungmitEfeudoc 315 11.7 Fazit 318 10 Inhaltsverzeichnis Kapitel12 Tcl 319 12.1 PL/Tcl 320 12.1.1 TrustedPL/Tcl 320 12.1.2 UntrustedPL/Tcl 324 12.2 Tcl-Scripts 325 12.2.1 Datenbankverbindungen 325 12.2.2 Datenmodifikationen 326 12.2.3 Abfragen 327 12.3 TriggerProcedures 329 Kapitel13 JavaundPostgreSQLimTeam 331 13.1 Grundlagen 332 13.1.1 VerbindenzurDatenbank 332 13.1.2 EinfacheStatementsausführen 334 13.1.3 AbfragenvonDaten 336 13.2 ExceptionHandling 342 13.2.1 Fehlerabfangen 342 13.2.2 Warnungenabfragen 344 13.2.3 StackTracing 346 13.3 VorbereiteteAbfragen 347 13.4 Transaktionen 349 13.4.1 AutoCommit&Co 349 13.4.2 TransactionIsolationLevels 350 13.5 BinäreObjekte 352 Kapitel14 Delphi/Kylix 353 14.1 Theoretisches 354 14.2 pgExpress 354 14.2.1 Installation 354 14.2.2 Beispiele 356 Kapitel15 PostgreSQL-Interna 361 15.1 DasAbarbeitenvonStatements 362 15.1.1 DerParser 362 15.1.2 DasRewriteSystemvonPostgreSQL 362 15.1.3 DerOptimizer 363 15.1.4 DerExecutor 363 15.2 DasFrontend/Backend-Protokoll 364