2 Häufig gestellte Fragen (FAQ) zu PostgreSQL
4 Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us).
6 Deutsche Übersetzung von Ian Barwick (barwick@gmx.net).
8 Letzte Aktualisierung der deutschen Übersetzung: So., den 16.1.2005,
11 Die aktuellste Version dieses Dokuments liegt auf der
13 * http://www.postgresql.org/files/documentation/faqs/FAQ.html
15 * http://www.postgresql.org/files/documentation/faqs/FAQ_german.html
18 Übersetzungen dieses Dokuments in andere Sprachen sowie plattform-
19 spezifische FAQs können unter http://www.postgresql.org/docs/faq/
21 _________________________________________________________________
25 1.1) Was ist PostgreSQL? Wie wird es ausgesprochen?
26 1.2) Welchem Copyright unterliegt PostgreSQL?
27 1.3) Auf welchen Unix-Plattformen läuft PostgreSQL?
28 1.4) Welche Nicht-Unix-Versionen sind verfügbar?
29 1.5) Woher bekomme ich PostgreSQL?
30 1.6) Wo bekomme ich Support für PostgreSQL?
31 1.7) Was ist die neueste Version von PostgreSQL?
32 1.8) Welche Dokumentation ist für PostgreSQL verfügbar?
33 1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
34 1.10) Wie kann ich SQL lernen?
35 1.11) Ist PostgreSQL Y2K (Jahr 2000) fähig?
36 1.12) Wie kann ich im Entwicklerteam mitarbeiten?
37 1.13) Wie sende ich einen Fehler-Bericht?
38 1.14) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
39 1.15) Wie kann ich PostgreSQL finanziell unterstützen?
41 Fragen zu Benutzerprogrammen
43 2.1) Gibt es ODBC-Treiber für PostgreSQL?
44 2.2) Welche Werkzeuge gibt es, um Web-Seiten mit PostgreSQL zu
46 2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
47 2.4) Welche Programmiersprachen können mit PostgreSQL kommunizieren?
51 3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
52 3.2) Wenn ich den postmaster starte, erhalte ich die Nachricht "Bad
53 System Call" bzw. "core dumped". Warum?
54 3.3) Wenn ich versuche, den postmaster zu starten, bekomme ich
55 "IpcMemoryCreate"-Fehlermeldungen. Warum?
56 3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich
57 "IpcSemaphoreCreate"-Fehlermeldungen. Warum?
58 3.5) Wie regle ich Zugriffe von anderen Rechnern?
59 3.6) Wie optimiere ich die Datenbank für bessere Leistung?
60 3.7) Welche Debugging-Funktionen sind bei PostgreSQL verfügbar?
61 3.8) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
62 Verbindung aufzubauen versuche. Warum?
63 3.9) Was befindet sich im Verzeichnis pgsql_tmp/?
64 3.10) Warum muß ich bei jeder neuen Hauptversion von PostgreSQL die
65 komplette Datenbank exportieren und anschließend reimportieren?
66 3.11) Welche Hardware eignet sich für den Betrieb mit PostgreSQL?
70 4.1) Worin besteht der Unterschied zwischen Binary Cursors und Normal
72 4.2) Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen
73 bzw. eine beliebige Zeile in einer Abfrage aus?
74 4.3) Wie finde ich heraus, welche Tabellen, Indizes, Datenbanken oder
75 Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql
77 4.4) Wie entferne ich eine Spalte aus einer Tabelle? Wie ändere ich
78 den Datentyp einer Spalte?
79 4.5) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine
81 4.6) Wieviel Plattenplatz wird benötigt, um die Daten aus einer
82 typischen Textdatei abzuspeichern?
83 4.7) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?
84 4.8) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer
85 ("GEQO") meine Abfrage auswertet?
86 4.9) Was ist ein R-Tree Index?
87 4.10) Was ist der "Genetic Query Optimizer"?
88 4.11) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei
89 einer Suche, bei der Groß- und Kleinschreibweisen ignoriert werden?
90 Wie verwende ich bei solchen Suchabfragen einen Index?
91 4.12) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
92 4.13) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
93 4.14.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung
95 4.14.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
96 4.14.3) Führt currval() zu einer Race-Condition mit anderen Nutzern?
97 4.14.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch
98 nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
99 Sequenz-/SERIAL-Spalte?
100 4.15) Was ist ein OID? Was ist ein TID?
101 4.16) Welche Bedeutung haben die verschiedenen Ausdrücke, die in
102 PostgreSQL benutzt werden (z.B. attribute, class,...)?
103 4.17) Wieso bekomme ich den Fehler: "FATAL: Memory exhausted in
105 4.18) Wie kann ich feststellen, welche PostgreSQL-Version bei mir
107 4.19) Bei "large-object"-Operationen kommt die Fehlermeldung: "invalid
108 large obj descriptor". Warum?
109 4.20) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die
110 aktuelle Uhrzeit enthalten soll?
111 4.21) Warum sind meine Unterabfragen (subqueries), die IN verwenden,
113 4.22) Wie führe ich einen OUTER JOIN durch?
114 4.23) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?
115 4.24) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
117 4.25) Warum kann ich temporäre Tabellen in PL/PgSQL-Funktionen nicht
118 zuverlässig erstellen bzw. löschen?
119 4.26) Welche Möglichkeiten zur Verschlüsselung gibt es?
123 5.1) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich
124 sie in psql aufrufe, kommt ein core dump. Warum?
125 5.2) Wie kann ich praktische neue Typen und Funktionen zu PostgreSQL
127 5.3) Wie schreibe ich eine Funktion in C, die einen Tupel
129 5.4) Ich habe eine der Quellendateien geändert. Warum macht sich die
130 Änderung beim erneuten Kompilieren nicht bemerkbar?
131 _________________________________________________________________
135 1.1) Was ist PostgreSQL? Wie wird es ausgesprochen?
137 Die (englische) Aussprache ist "Post-Gres-Q-L". Im allgemeinen
138 Sprachgebrauch hat sich die Kurzform "Postgres" auch durchgesetzt.
140 PostgreSQL ist eine Weiterentwicklung des POSTGRES-Datenbank-Systems,
141 eines zukunftsweisenden DBMS-Forschungsprototyps. Während PostgreSQL
142 das leistungsfähige Datenmodell und die reichhaltigen Datentypen von
143 POSTGRES beibehält, ersetzt es dessen PostQuel-Abfragesprache durch
144 eine erweiterte Teilmenge von SQL. PostgreSQL und dessen kompletter
145 Quellcode sind frei und öffentlich verfügbar.
147 Die PostgreSQL-Entwicklung wird von einem Entwickler-Team
148 durchgeführt, die alle Teilnehmer der
149 PostgreSQL-Entwicklungs-Mailingliste sind. Der aktuelle Koordinator
150 ist Marc G. Fournier (scrappy@postgresql.org) (Anmeldemöglichkeit:
151 siehe unten). Dieses Team ist für die Gesamtentwicklung von PostgreSQL
152 verantwortlich. Es handelt sich um ein Gemeinschaftsprojekt, das nicht
153 von einer bestimmten Firma kontrolliert wird. Lesen Sie die
154 Entwickler-FAQ: http://www.postgresql.org/docs/faqs/FAQ_DEV.html wenn
155 Sie an einer Mitarbeit interessiert sind.
157 Die Autoren von PostgreSQL 1.01 waren Andrew Yu und Jolly Chen. Viele
158 andere haben zur Portierung, zum Testen, zur Fehlersuche und zur
159 Verbesserung des Codes beigetragen. Der ursprüngliche Postgres-Code,
160 von dem PostgreSQL abstammt, ist auf die Arbeit von vielen
161 Studierenden und Diplomanden sowie Programmierern zurückzuführen, die
162 unter der Leitung des Professors Michael Stonebraker an der
163 Universität von Kalifornien, Berkeley arbeiteten.
165 Der ursprüngliche Name der Software in Berkeley war Postgres. Als die
166 SQL-Funktionalität 1995 hinzugefügt wurde, wurde sein Name zu
167 Postgres95 erweitert. Der Name wurde Ende 1996 in PostgreSQL geändert.
169 1.2).Welchem Copyright unterliegt PostgreSQL?
171 PostgreSQL unterliegt folgendem COPYRIGHT (Originaltext):
173 PostgreSQL Data Base Management System
175 Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
176 Portions Copyright (c) 1994-6 Regents of the University of California
178 Permission to use, copy, modify, and distribute this software and its
179 documentation for any purpose, without fee, and without a written
180 agreement is hereby granted, provided that the above copyright notice
181 and this paragraph and the following two paragraphs appear in all
184 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
185 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
186 INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
187 ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
188 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
190 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
191 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
192 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
193 PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
194 CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
195 UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
197 Bei der obigen Lizenz handelt es sich um die BSD-Lizenz, die klassiche
198 Open-Source-Lizenz. Sie schränkt die Verwendung des Quellcodes in
199 keine Weise ein. Wir mögen diese Lizenz und haben nicht vor, sie zu
202 Es gilt die Copyright-Klausel im Original!
204 1.3) Auf welchen Unix-Plattformen läuft PostgreSQL?
206 Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen
207 Plattform eingesetzt werden. Diejenigen Plattformen, die bei der
208 jeweiligen Versionsfreigabe getestet wurden, sind in den
209 Installations- Anleitungen aufgelistet.
211 1.4) Welche Nicht-Unix-Portierungen sind verfügbar?
213 Ab Version 8.0 läuft PostgreSQL auf Microsoft NT-basierten
214 Betriebssystemen wie Windows 2000, XP und Server 2003. Ein
215 vorgefertigtes Installationspaket (derzeit noch im Beta-Stadium) kann
216 von http://pgfoundry.org/projects/pginstaller heruntergeladen werden.
217 Einen Überblick über den aktuellen Stand bietet die Win32-FAQ:
218 http://pginstaller.projects.postgresql.org/FAQ_windows.html.
220 Unter Windows 95/98/ME ist es nur möglich, den Datenbankserver mit
221 Hilfe der Cygwin-Umgebung (Unix-Portierungsbibliotheken) zu betreiben.
222 Weitere Informationen hierzu gibt es in der CYGWIN-FAQ:
223 http://www.postgresql.org/docs/faqs/text/FAQ_CYGWIN.
225 Eine Portierung für Novell Netware 6 gibt es unter
226 http://forge.novell.com.
228 Für OS/2 (eComStation) gibt es eine Version hier:
229 http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
230 SQL&stype=all&sort=type&dir=%2F
232 1.5) Woher bekomme ich PostgreSQL?
234 Der zentrale FTP-Server für PostgreSQL ist der ftp-Server
235 ftp://ftp.postgresql.org/pub/. Weitere Mirror-Sites sind auf der
236 PostgreSQL-Website aufgelistet.
238 1.6) Wo bekomme ich Support für PostgreSQL?
240 Die zentrale (englischsprachige) Mailing-Liste ist:
241 mailto:pgsql-general@postgresql.org .
243 Die Liste ist Themen vorbehalten, die PostgreSQL betreffen. Die
244 Anmeldung erfolgt mit einer Email an die Adresse
245 pgsql-general-request@postgresql.org mit folgenden Zeilen im Text
246 (nicht in der Betreffzeile):
250 Es gibt auch eine Digest-Liste (eine Liste, die Mails zusammengefasst
251 sendet). Um sich an dieser Digest-Liste anzumelden, senden Sie eine
252 Email an pgsql-general-digest-request@postgresql.org mit folgendem
257 Es gibt noch die Bug-Mailingliste. Die Anmeldung für diese Liste
258 erfolgt durch eine Email an bugs-request@postgresql.org mit folgendem
263 Die Entwickler-Mailingliste kann mit einer Email an
264 pgsql-hackers-request@postgresql.org abonniert werden. Die Email muß
265 ebenfalls folgenden Text enthalten:
269 Eine deutschsprachige Mailing-Liste gibt es ebenfalls:
270 http://archives.postgresql.org/pgsql-de-allgemein/; die Liste kann
271 hier abonniert werden.
273 Weitere Mailinglisten und Informationen zu PostgreSQL befinden sich
274 auf der PostgreSQL-Homepage:
276 http://www.postgresql.org
278 Es gibt außerdem einen IRC-Channel bei EFNet und bei Freenode, Channel
279 #PostgreSQL. Unter UNIX/Linux können Sie mit z.B. irc -c '#PostgreSQL'
280 "$USER" irc.freenode.net. bzw. irc -c '#PostgreSQL' "$USER"
281 irc.phoenix.net daran teilnehmen.
283 Eine Liste von Unternehmen, die Support für PostgreSQL auf
284 kommerzieller Basis leisten, kann unter
285 http://techdocs.postgresql.org/companies.php eingesehen werden.
287 1.7) Was ist die neueste Version von PostgreSQL?
289 Die neueste Version von PostgreSQL ist 8.0.0 .
291 Die Freigabe einer neuen Version erfolgt im Schnitt alle 6 bis 8
294 1.8) Welche Dokumentation ist für PostgreSQL verfügbar?
296 Einige Handbücher, Man-Pages und einige kleine Testprogramme sind in
297 der Distribution enthalten. Siehe das /doc-Verzeichnis. Ausserdem sind
298 alle Handbücher online unter http://www.postgresql.org/docs/
301 Zwei Bücher zu PostgreSQL sind online verfügbar unter
302 http://www.postgresql.org/docs/awbook.html und
303 http://www.commandprompt.com/ppbook/ .
305 Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter
306 http://techdocs.postgresql.org/techdocs/bookreviews.php Diverse
307 technische Artikel befinden sich unter http://techdocs.postgresql.org/
310 psql hat einige nützliche \d-Befehle, um Informationen über Typen,
311 Operatoren, Funktionen, Aggregate, usw. zu zeigen.
313 1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
315 PostgreSQL unterstützt eine erweiterte Teilmenge von SQL-92. Siehe
316 unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html
317 für eine Auflistung der bekannten Bugs, fehlenden Features und
320 1.10) Wie kann ich SQL lernen?
322 Das PostgreSQL Book auf http://www.postgresql.org/docs/awbook.html
323 bietet eine Einführung in SQL. Ein weiteres PostgreSQL-Buch befindet
324 sich unter http://www.commandprompt.com/ppbook . Es gibt zudem nette
325 Tutorials unter http://www.intermedia.net/support/sql/sqltut.shtm ,
326 http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
327 und http://sqlcourse.com .
329 Eine weitere Empfehlung ist "Teach Yourself SQL in 21 Days, Second
330 Edition", es ist unter http://members.tripod.com/er4ebus/sql/index.htm
333 Viele PostgreSQL-Anwender mögen "The Practical SQL Handbook" (Bowman
334 et al., Addison Wesley). Andere dagegen mögen "The Complete Reference
335 SQL" (Groff et al., McGraw-Hill).
337 1.11) Ist PostgreSQL Y2K (Jahr 2000) fähig?
339 Ja, wir können Datumsangaben nach dem Jahr 2000 n.Chr. und vor 2000
340 v.Chr. leicht verarbeiten.
342 1.12) Wie kann ich im Entwicklerteam mitarbeiten?
344 Zuerst laden Sie die neuesten Quellen herunter und lesen Sie die
345 PostgreSQL-Entwicklerunterlagen auf unserer Website oder in der
346 Distribution. Dann melden Sie sich zu den Entwickler-Mailinglisten
347 pgsql-hackers und pgsql-patches an. Anschließend senden Sie qualitativ
348 hochwertige Patches an die pgsql-patches Mailingliste.
350 Es gibt ungefähr ein Dutzend Leute, die das commit-Recht im PostgreSQL
351 CVS-Archiv haben. Alle haben derart viele hochwertige Patches
352 eingebracht, dass es für die CVS-Verwalter schwer war, mitzuhalten.
353 Und wir hatten Vertrauen, dass die von ihnen festgelegten Änderungen
354 aller Wahrscheinlichkeit nach von hoher Qualität sind.
356 1.13) Wie sende ich einen Fehlerbericht?
358 Bitte besuchen Sie die PostgreSQL-BugTool-Seite
359 http://www.postgresql.org/bugform.html, die Hinweise und Anleitungen
360 zur Einreichung von Fehlerberichten enthält.
362 Überprüfe auch den ftp-Server ftp://ftp.postgresql.org/pub/, um
363 nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches
366 1.14) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
368 Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,
369 Performanz, Zuverlässigkeit, Support und Preis.
372 PostgreSQL besitt die meisten Eigenschaften - wie
373 Transaktionen, Unterabfragen (Subqueries), Trigger, Views und
374 verfeinertes Locking - die bei großen kommerziellen DBMS
375 vorhanden sind. Es bietet außerdem einige anderen
376 Eigenschaften, die diese nicht immer haben, wie
377 benutzerbestimmte Typen, Vererbung, Regeln, und die
378 Multi-Versionen-Steuerung zum Verringern konkurrierender Locks.
381 PostgreSQL weist eine Performanz auf, die mit der von
382 kommerziellen und anderen Open-Source-Datenbanken vergleichbar
383 ist. In manchen Bereichen ist es schneller, in anderen
386 Im Vergleich zu MySQL oder abgespeckten Datenbank-Systemen ist
387 PostgreSQL in Lastsituationen - z.B. bei zeitgleichen Zugriffen
388 durch mehrere Nutzer, bei komplexen Abfragen oder
389 gleichzeitigen Lese- und Schreibzugriffen schneller. MySQL ist
390 nur bei einfacheren SELECT-Abfragen mit wenigen Nutzern im
391 Vorteil. MySQL besitzt allerdings nur wenige der im Punkt
392 "Eigenschaften" genannten Features. PostgreSQL setzt auf
393 Zuverlässigkeit und Funktionsumfang, dabei wird selbstredend
394 ständig an Performanz-Verbesserungen gearbeitet.
397 Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht
398 zuverlässig arbeitet. Daher bemühen wir uns, nur streng
399 geprüften und beständigen Code freizugeben, der nur ein Minimum
400 an Programmfehlern aufweist. Jede Freigabe hat mindestens einen
401 Monat Betatest-Phase hinter sich, und unsere Freigabehistorie
402 beweist, dass wir stabile und solide Versionen freigeben, die
403 im Produktionsbetrieb genutzt werden können. Wir glauben, dass
404 wir im Vergleich mit anderer Datenbanksoftware vorteilhaft
408 Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit
409 einer großen Gruppe von Entwicklern und Benutzern mögliche
410 Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung
411 garantieren, kommerzielle DBMS tun dies aber auch nicht. Der
412 direkte Kontakt zur Entwickler- und Benutzergemeinschaft und
413 der Zugriff auf die Handbücher und den Quellcode ermöglicht
414 einen im Vergleich zu anderen DBMS höherwertigeren Support. Es
415 gibt jedoch auch Anbieter von kommerziellen Support-Leistungen
416 (siehe FAQ-Punkt 1.6).
419 PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie
420 auch für die nicht-kommerzielle Nutzung. Sie können den
421 PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in
422 der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr
425 1.15) Wie kann ich PostgreSQL finanziell unterstützen?
427 PostgreSQL hat seit dem Anfang in 1996 eine exzellente Infrastruktur.
428 Dies ist Marc Fournier zu verdanken, der sie über die Jahre hinweg
429 geschaffen und gepflegt hat.
431 Eine hochwertige Infrastruktur ist für ein Open-Source-Projekt wie
432 dieses sehr wichtig. Sie verhindert Probleme und Verzögerungen beim
433 Fortschritt des Projekts.
435 Selbstverständlich ist diese Infrastruktur nicht billig. Es gibt eine
436 Reihe von einmaligen und monatlich anfallenden Kosten, die für den
437 Betrieb beglichen werden müssen. Falls Sie oder Ihre Firma dazu
438 finanziell beitragen können, besuchen Sie bitte die URL
439 http://store.pgsql.com/shopping/ wo Sie eine Spende abgeben können.
441 Obwohl diese Web-Seite das Unternehmen "PostgreSQL, Inc." erwähnt, ist
442 der Bereich "contributions" (Beiträge) ausschliesslich für die
443 Unterstützung des PostgreSQL-Projekts da und nicht für die
444 Finanzierung einer bestimmten Firma. Sie können auch gerne einen
445 finanziellen Beitrag an die Kontaktadresse verschicken.
447 Eine Möglichkeit der nicht-finanziellen Untetstützung besteht übrigens
448 darin, für http://advocacy.postgresql.org (en.) bzw.
449 http://advocacy.postgresql.org/?lang=de (dt.) einen Bericht über den
450 erfolgreichen Einsatz von PostgreSQL in Ihrem Unternehmen oder in
451 Ihrer Organisation bereitzustellen.
452 _________________________________________________________________
454 Fragen zu Benutzerprogrammen
456 2.1) Gibt es ODBC-Treiber für PostgreSQL?
458 Es sind zwei ODBC-Treiber verfügbar: PsqlODBC und OpenLink ODBC.
461 http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
462 heruntergeladen werden.
464 OpenLink ODBC kann unter http://www.openlinksw.com bezogen werden. Die
465 Software arbeitet mit dem Standard-ODBC-Client dieser Firma, so dass
466 PostgreSQL-ODBC auf jeder Client-Plattform zur Verfügung steht, die
467 unterstützt wird (Win, Mac, Unix, VMS).
469 OpenLink wird dieses Produkt wahrscheinlich an Leute verkaufen, die
470 kommerziellen Support benötigen, dennoch wird immer eine
471 Freeware-Version verfügbar sein. Fragen dazu bitte an
472 postgres95@openlink.co.uk.
474 2.2) Welche Werkzeuge gibt es, um Web-Seiten mit PostgreSQL zu verbinden?
476 Eine nette Einführung zu datenbank-gestützten Webseiten kann unter
477 http://www.webreview.com (engl.) abgerufen werden.
479 Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP
480 gibt es bei http://www.php.net
482 Für komplexere Aufgaben bietet sich die Perl-Schnittstelle mit CGI.pm
485 2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
487 Es gibt mehrere grafische Schnittstellen für PostgreSQL, darunter
488 PgAccess ( http://www.pgaccess.org), pgAdmin III
489 (http://www.pgadmin.org, RHDB Admin (http://sources.redhat.com/rhdb/ )
490 und Rekall ( http://www.thekompany.com/products/rekall/,
491 GPL/proprietär). Es gibt außerdem phpPgAdmin (
492 http://phppgadmin.sourceforge.net/ ), eine web-basierte Schnittstelle.
494 2.4) Welche Programmiersprachen und Schnittstellen gibt es?
496 Die meisten gängigen Programmiersprachen bieten Schnittstellen für
499 Die folgenden Schnittstellen werden mit der PostgreSQL-Distribution
507 Weitere Schnittstellen für andere Sprachen können über
508 http://gborg.postgresql.org (Bereich Drivers/Interfaces) bezogen
510 _________________________________________________________________
512 Administrative Fragen
514 3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
516 Bei der Ausführung von configure die Option --prefix mit dem
517 Zielverzeichnis angeben.
519 3.2) Wenn ich den postmaster starte, erhalte ich einen Nachricht "Bad
520 System Call" bzw. "core dumped". Wieso?
522 Das kann verschiedene Ursachen haben. Überprüfen Sie zuerst, ob Ihr
523 Kernel System V Extensions unterstützt. PostgreSQL benötigt
524 Kernel-Unterstützung für Shared Memory und Semaphoren.
526 3.3) Wenn ich versuche, den postmaster zu starten, bekomme ich
527 "IpcMemoryCreate"-Fehlermeldungen. Warum?
529 Entweder ist Shared Memory in Ihrem Kernel nicht korrekt konfiguriert,
530 oder Sie müssen den Shared Memory Bereich vergrößern. Die genaue Größe
531 hängt von Ihrer Systemarchitektur und von der Anzahl der Puffer und
532 Serverprozesse ab, die Sie für postmaster konfiguriert haben. Bei den
533 voreingestellten Werten für Puffer und Prozesse benötigen Sie bei den
534 meisten Systemen ein Minimum von ca. 1 MB. Der "PostgreSQL
535 Administrator's Guide"
536 (http://www.postgresql.org/docs/current/static/kernel-resources.html)
537 enthält weitere Informationen zu Shared Memory und Semaphores.
539 3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich
540 "IpcSemaphoreCreate"-Fehlermeldungen. Warum?
542 Falls die Fehlermeldung "IpcSemaphoreCreate: semget failed (No space
543 left on device)" lautet, ist Ihr Kernel mit zu wenig Semaphoren
544 konfiguriert. PostgreSQL benötigt eine Semaphore pro möglichem
545 Backend-Prozess. Eine Zwischenlösung wäre, postmaster mit einer
546 geringeren Anzahl an Backend-Prozessen zu starten. Benutzen Sie dazu
547 die -N Option mit einem kleineren Wert als die standardmäßigen 32.
548 Eine dauerhafte Lösung wäre es, die Parameter SEMMNS und SEMMNI Ihres
551 Nichtfunktionierende Semaphores können außerdem bei hoher
552 Datenbanklast zu Abstürzen führen.
554 Falls die Fehlermeldung anders aussieht, ist möglicherweise keine
555 Semaphoren-Unterstützung in Ihrem Kernel aktiviert. Der "PostgreSQL
556 Administrator's Guide" enthält weitere Informationen zu Shared Memory
559 3.5) Wie regle ich Zugriffe von anderen Rechnern?
561 PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom
562 lokalen Rechner über Unix Domain Sockets möglich sind. Verbindungen
563 von anderen Rechnern über TCP/IP sind nur möglich, wenn der postmaster
564 mit der -i Option gestartet wird und / oder die Option
565 listen_addresses (in 7.x-Versionen: tcpip_sockets) in postgresql.conf
566 eingeschaltet wird, und die host-basierte Authentifizierung in der
567 Datei $PGDATA/pg_hba.conf entsprechend angepasst ist.
569 3.6) Wie optimiere ich die Datenbank für bessere Leistung?
571 Der Einsatz von Indizes sollte auf jeden Fall Abfragen beschleunigen.
572 Die Anweisung EXPLAIN ANALYZE zeigt, wie PostgreSQL Abfragen
573 interpretiert und welche Indizes benutzt werden.
575 Wenn Sie eine große Anzahl von INSERT-Anweisungen durchführen, sollten
576 Sie überlegen, ob die Durchführung mit der COPY-Anweisung in Frage
577 kommt. Dies funktioniert wesentlich schneller als einzelne
578 INSERT-Befehle. SQL-Anweisungen, die sich nicht in einem BEGIN
579 WORK/COMMIT Transaktions- Block befinden, werden als eigene
580 Transaktionen behandelt. Überlegen Sie, ob die Anweisungen nicht in
581 einen einzelnen Transaktionsblock zusammen- gefasst werden können. Das
582 reduziert den Transaktionsaufwand. Überlegen Sie auch, bei größeren
583 Datenänderungen Indizes zu löschen und danach wiederherzustellen.
585 Es gibt verschiedene Tuning-Optionen, die im Handbuch dokumentiert
586 sind (Administration Guide/Server Run-time Environment/Run-time
587 Configuration). Sie können fsync() ausschalten, indem Sie beim Starten
588 des postmaster die Optionen -o -F angeben. Das hindert
589 fsync()-Operationen daran, nach jeder Transaktion die Daten direkt auf
590 die Festplatte zu schreiben.
592 Sie können auch mit der shared_buffers Option des postmaster die
593 Anzahl der Shared Memory Puffer für die Backend-Prozesse erhöhen.
594 Falls Sie diesen Wert jedoch zu hoch setzen, kann es vorkommen, dass
595 der postmaster nicht startet, weil die Obergrenze der
596 Speicherzuweisung für Shared Memory überschritten wird. Jeder Puffer
597 ist 8 kB groß, voreingestellt sind 1000 Puffer.
599 Die sort_mem (ab PostgreSQL 8.0: work_mem)-Optionen des Backends
600 können benutzt werden, um die Größe des Speicherplatzes für temporäres
601 Sortieren zu erhöhen. Die Werte werden in Kilobyte gemessen und sind
602 standardmäßig auf 1024 (d.h. 1MB) festgelegt.
604 Die CLUSTER-Anweisung kann benutzt werden, um Daten in Basistabellen
605 zu gruppieren, so dass - um einen schnelleren Zugriff zu erreichen -
606 die physikalische Speicherung der Reihenfolge eines der Indexe
607 entspricht. Siehe auch die CLUSTER(l) Man-Page für weitere Details.
609 3.7) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?
611 PostgreSQL hat einige Möglichkeiten, Statusinformationen anzuzeigen,
612 die bei der Fehlersuche nützlich sein können.
614 Wenn Sie PostgreSQL mit dem --enable-cassert Option kompiliert haben,
615 verfolgen zahlreiche assert()-Anweisungen den Ablauf des Backends und
616 halten das Programm an, wenn etwas Unerwartetes passiert.
618 Sowohl der postmaster als auch postgres stellen mehrere Debug-Optionen
619 zur Verfügung. Zuerst sollten Sie sichergehen, dass Sie die Ausgaben
620 über den Standard-Output und den Standard-Error in eine Datei
621 umleiten, wenn Sie den postmaster starten:
623 ./bin/postmaster >server.log 2>&1 &
625 Dadurch wird die Datei server.log im PostgreSQL-Verzeichnis erzeugt.
626 Diese Datei enthält nützliche Informationen über Probleme oder Fehler,
627 die im Server aufgetreten sind. postmaster hat eine -d Option, die
628 noch detailliertere Informationen liefert. Zur -d Option wird eine
629 Nummer angegeben, die den Debug-Level - also die Menge der berichteten
630 Information - angibt. Achtung, hohe Debug-Levels erzeugen schnell
633 Wenn der postmaster nicht läuft, können Sie das postgres-Backend sogar
634 von der Befehlszeile ausführen und eine SQL-Anweisung direkt eingeben.
635 Dies ist allerdings nur für Debugging-Zwecke zu empfehlen. Beachten
636 Sie, dass hierbei ein Zeilenumbruch, und nicht - wie sonst üblich -
637 das Semikolon die SQL-Anweisung beendet. Falls Sie PostgreSQL mit
638 Debugging-Symbolen kompiliert haben, können Sie mit einem Debugger
639 sehen, was passiert. Da das Backend jedoch nicht vom postmaster
640 gestartet wurde, läuft es nicht in der gleichen Umgebung und deshalb
641 können einige locking-Vorgänge sowie die Kommunikation zwischen den
642 Backends nicht reproduziert werden.
644 Wenn der postmaster hingegen läuft, führen Sie psql in einem Fenster
645 aus, ermitteln Sie die Prozessnummer (PID) des postgres-Prozesses, der
646 von psql verwendet wird (mit SELECT pg_backend_pid()). Binden Sie
647 einen Debugger an diese PID und führen Sie Abfragen von psql aus. Wenn
648 Sie den postgres-Serverstart analysieren wollen, setzen Sie die
649 Umgebungsvariable PGOPTIONS="-W n", und starten Sie dann psql. Dies
650 verzögert den Start um n Sekunden, damit Sie einen Debugger an den
651 Prozess binden und ggf. Breakpoints setzen können, bevor die
652 Startsequenz begonnen wird.
654 Es gibt verschiedene Einstellungen (die log_*-Gruppe), die diverse
655 Server-Statistik ausgeben und daher bei der Fehlersuche und
656 Performanzmessung sehr nützlich sein können.
658 Sie können die Anwendung auch mit Profiling kompilieren, um zu sehen,
659 welche Funktionen wieviel Ausführungszeit beanspruchen. Das Backend
660 Profil wird im Verzeichnis pgsql/data/base/dbname abgelegt. Das
661 Client-Profil wird in das aktuelle Verzeichnis abgelegt. Bitte
662 beachtern Sie, dass unter Linux PostgreSQL mit der Option
663 -DLINUX_PROFILE kompiliert werden muß, um Profiling nutzen zu können.
665 3.8) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
666 Verbindung aufzubauen versuche. Warum?
668 Sie müssen die maximale Anzahl der gleichzeitig ausführbaren Backend-
671 Die Voreinstellung erlaubt 32 Prozesse. Sie können diese erhöhen,
672 indem Sie den postmaster mit einem entsprechenden -N Parameter starten
673 bzw. die Konfigurationsdatei postgresql.conf anpassen.
675 Bitte beachten Sie, dass Sie auch -B auf ein Wert größer als die
676 Voreinstellung von 64 setzen müssen, wenn Sie -N auf einen Wert höher
677 als 32 setzen; -B muss mindestens das Doppelte von -N betragen, und
678 einer besseren Performanz wegen sollte der Wert noch höher sein. Bei
679 einer hohen Anzahl von Backend-Prozessen kann es vorkommen, dass Sie
680 einige Unix-Kernel- Parameter ebenfalls erhöhen müssen. Folgende
681 Parameter sind zu überprüfen: die Maximalgröße der Shared Memory
682 Blocks SHMMAX; die Maximalanzahl der Semaphoren SEMMNS und SEMMNI; die
683 maximale Anzahl von Prozessen NPROC; die maximale Anzahl von Prozessen
684 pro User MAXUPRC; und die Maximalzahl der geöffneten Dateien NFILE und
685 NINODE. Durch die Begrenzung der Anzahl erlaubter Backend-Prozesse
686 wird verhindert, dass System-Ressourcen durch PostgreSQL aufgebraucht
689 3.9) Was befindet sich im Verzeichnis pgsql_tmp/?
691 Dieses Verzeichnis enthält temporäre Dateien, die durch den query
692 executor erzeugt werden. Wenn zum Beispiel eine Sortierung
693 durchgeführt werden muß, um ein ORDER BY auszuführen, und diese
694 Sortierung mehr Hauptspeicher benötigt, als mit dem Backend-Parameter
695 -S erlaubt wurde, dann werden diese Dateien erzeugt, um die Daten dort
698 Die temporären Dateien sollten automatisch gelöscht werden. Falls das
699 Backend jedoch während einer Sortierung abstürzen sollte, bleiben sie
700 erhalten. Nach einem Neustart des postmaster werden sie dann aber
701 wieder automatisch gelöscht.
703 3.10) Warum muß ich bei jeder neuen Hauptversion von PostgreSQL die
704 komplette Datenbank exportieren und anschließend reimportieren?
706 Zwischen "kleinen" PostgreSQL-Versionsänderungen (z.B. zwischen 7.2
707 und 7.2.1) werden keine strukturellen Änderungen durchgeführt, wodurch
708 ein erneutes Aus- und Einlesen der Daten nicht erforderlich ist.
709 Allerdings wird bei "großen" Versionsänderungen (z.B. zwischen 7.2 und
710 7.3) oft das interne Format der Systemtabellen und Datendateien
711 angepasst. Diese Änderungen sind oft sehr komplex, wodurch die
712 Rückwärtskompatibilität der Datendateien nicht gewährleistet werden
713 kann. Durch das Exportieren werden die Daten in einem generischen
714 Format ausgegeben, wodurch die Importierung in das neue interne Format
717 Bei Upgrades, bei denen keine Formatänderungen stattgefunden haben,
718 kann das pg_upgrade-Skript benutzt werden, um die Daten ohne Aus- und
719 Einlesen zu übertragen. Die jeweilige Dokumentation gibt an, ob für
720 die betreffende Version pg_upgrade verfügbar ist.
722 3.11) Welche Hardware eignet sich für den Betrieb mit PostgreSQL?
724 PostgreSQL läuft auf fast jeder Hardware-Kombination. Im PC-Bereich
725 gibt es allerdings sehr große Abweichungen in der Qualität. Für einen
726 Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend
727 sein, im Server-Betrieb jedoch lohnt sich auf jeden Fall die
728 Investition in teurere Bestandteile (Stichwörter ECC-Speicher, SCSI,
729 Hauptplatinen und Netzteile von namhaften Herstellern).
730 _________________________________________________________________
734 4.1) Worin besteht der Unterschied zwischen Binary Cursors und Normal
737 Vgl. die DECLARE Man-Page für eine Beschreibung.
739 4.2) Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw.
740 eine beliebige Zeile in einer Abfrage aus?
742 Vgl. die FETCH Man-Page, oder benutzen Sie SELECT ... LIMIT... .
744 Selbst wenn Sie nur die ersten paar Zeilen einer Tabelle abfragen
745 möchten, muß unter Umständen die komplette Abfrage abgearbeitet
746 werden. Ziehen Sie also möglichst eine Abfrage in Erwägung, die eine
747 ORDER BY-Anweisung benutzt, welche wiederum auf indizierte Spalten
748 verweist. In diesem Fall kann PostgreSQL direkt nach den gewünschten
749 Zeilen suchen und braucht nicht jede mögliche Ergebniszeile
752 Bitte beachten Sie, dass mit PostgreSQL 7.3 die Syntax LIMIT n, m
753 durch LIMIT n OFFSET m ersetzt wurde.
755 Um eine beliebige Zeile auszuwählen, nutzen Sie ORDER BY random():
762 4.3) Wie finde ich heraus, welche Tabellen, Indizes, Datenbanken oder
763 Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql
764 verwendeten Abfragen?
766 In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere
767 psql-Befehle lassen sich mit \? anzeigen. Sie können sich die Datei
768 pgsql/src/bin/psql/describe.c mit dem Quellcode für psql ansehen. Sie
769 enthält die SQL-Abfragen, die die Backslash-Kommandos (\) ausführen.
770 Sie können psql auch mit der -E Option starten. Danach gibt psql die
771 Abfragen aus, die es bei der Ausführung der Befehle benutzt. Außerdem
772 biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, das
773 Metainformation über die Datenbank zur Verfügung stellt.
775 Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele
776 SELECT- Abfragen, mit deren Hilfe man Information über die
777 Systemtabellen erhalten kann.
779 4.4) Wie entferne ich eine Spalte aus einer Tabelle? Wie ändere ich den
780 Datentyp einer Spalte?
782 Der Syntax ALTER TABLE DROP COLUMN wird ab PostgreSQL 7.3 unterstützt.
784 Bei früheren Versionen bietet das folgende Verfahren Ersatz:
786 LOCK TABLE old_table;
787 SELECT ... -- alle außer der zu entfernenden Spalte hier auswählen
790 DROP TABLE old_table;
791 ALTER TABLE new_table RENAME TO old_table;
794 Um den Datentyp einer Spalte zu ändern, gehen Sie wie folgt vor:
796 ALTER TABLE tabelle ADD COLUMN neue_spalte neuer_datentyp;
797 UPDATE tabelle SET neue_spalte = CAST(alte_spalte AS neuer_datentyp);
798 ALTER TABLE tabelle DROP COLUMN alte_spalte;
802 Um den Speicherplatz freizugeben, der von der gelöschten Spalte
803 verwendet wurde, führen Sie VACUUM FULL aus.
805 4.5) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?
807 Es bestehen folgende Obergrenzen:
808 Maximale Größe eine Datenbank? unbeschränkt (es existieren
809 Datenbanken mit 32 TB)
810 Maximale Größe einer Tabelle? 32 TB
811 Maximale Größe einer Zeile? 1,6 TB
812 Maximale Größe einer Spalte? 1 GB
813 Maximale Anzahl von Zeilen in einer Tabelle?
815 Maximale Anzahl von Spalten in einer Tabelle?
816 250-1600 je nach Spaltentyp
817 Maximale Anzahl von Indizies für eine Tabelle?
820 Selbstverständlich sind dies theoretische Werte, die oft durch die
821 verfügbaren Platten- und Speicherressourcen beschränkt werden. Extreme
822 Größen können zu Leistungseinbußen führen.
824 Die maximale Tabellengröße von 32 TB benötigt keine
825 Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in
826 Dateien mit einer Größe von je 1 GB aufgeteilt, wodurch etwaige
827 dateisystem-bedingte Beschränkungen nicht relevant sind.
829 Die maximale Tabellengröße und die maximale Anzahl von Spalten können
830 vervierfacht werden, indem man die Default-Blockgröße auf 32 KB
833 4.6) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen
834 Textdatei abzuspeichern?
836 Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen
837 Textdatei bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe
838 der Datei beanspruchen.
840 Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und
841 einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die
842 durchschnittliche Länge der Textbeschreibung 20 Byte beträgt. Die
843 einfache Datei würde 2,8 MB groß sein. Die Größe der
844 PostgreSQL-Datenbankdatei, die diese Daten enthält, liegt ungefähr bei
846 32 Bytes: jeder Zeilenkopf (ungefähr)
847 +24 Bytes: ein Integer-Feld und ein Textfeld
848 + 4 Bytes: Zeiger auf der Datenseite auf den Tupel
849 -----------------------------------------------
852 Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB),
855 --------------------- = 136 Zeilen pro Seite (abgerundet)
859 ------------------------ = 735 Datenbankseiten (aufgerundet)
862 735 Datenbankseiten * 8192 Bytes pro Seite = 6.021.120 Byte (6 MB)
864 Indizes beanspruchen nicht so viel Platz. Da sie jedoch die Daten
865 beinhalten, die sie indizieren, können auch sie sehr groß werden.
867 NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig
868 Platz in Anspruch nehmen.
870 4.7) Meine Abfragen sind langsam oder benutzen die Indizes nicht. Warum?
872 Indizes werden nicht automatisch bei jeder Abfrage verwendet. Indizes
873 werden nur dann verwendet, wenn die abzufragende Tabelle eine
874 bestimmte Größe übersteigt, und die Abfrage nur eine kleine
875 Prozentzahl der Tabellenzeilen abfragt. Der Grund hierfür ist der,
876 dass die durch einen Index verursachten Festplattenzugriffe manchmal
877 länger dauern würden als ein einfaches Auslesen aller Tabellenzeilen
878 (sequentieller Scan).
880 Um festzustellen, ob ein Index verwendet werden soll, braucht
881 PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden
882 durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand
883 der Statistiken kennt der Abfragenoptimierer die Anzahl der
884 Tabellenzeilen und kann besser entscheiden, ob Indizes verwendet
885 werden sollen. Statistiken sind auch bei der Ermittlung der optimalen
886 JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese
887 regelmässig durchgeführt werden, da sich der Inhalt einer Tabelle ja
890 In Versionen vor 8.0 werden Indizes oft nicht benutzt, wenn die
891 jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders
892 für Spalten mit numerischen und Integer-Werten.
894 Indizes werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs
895 verwendet. Ein sequentieller Scan mit anschließendem explizitem
896 Sortiervorgang ist normalerweise schneller als ein Index-Scan einer
897 großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen
898 mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein
899 kleiner Abschnitt der Tabelle zurückgeliefert wird. Dadurch wird es
900 auch möglich, die Minimal- und Maximalwerte einer Abfrage unter
901 Verwendung von Indizes zu ermitteln:
904 ORDER BY spalte [ DESC ]
907 (Die Aggregatfunktionen MIN() und MAX() verwenden keine Indizes).
909 Sollte es danach aussehen, also ob der Optimierer irrtümlich einen
910 sequentiellen Scan ausführt, führen Sie SET enable_seqscan TO 'off'
911 aus und prüfen Sie, ob die Indexabfrage dadurch scheller geworden ist.
913 Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können
914 Indizes nur unter bestimmten Umständen verwendet werden:
915 * Das Suchmuster muss sich an Anfang des Strings befinden, d.h.:
916 + LIKE-Suchmuster dürfen nicht mit % anfangen;
917 + ~ (reguläre Ausdrücke) müssen mit ^ anfangen.
918 * Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e])
921 Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B.
922 ILIKE bzw. ~*), verwenden keine Indizes. Stattdessen können
923 funktionale Indizes verwendet werden, die im Punkt 4.12 beschrieben
926 Die Standard-Locale "C" muss während der Datenbank-Initialisierung mit
927 initdb verwendet worden sein, da andere locales den nächstgrößten Wert
928 nicht ermitteln können. Es ist allerdings möglich, einen besonderen
929 text_pattern_ops-Index für solche Fälle zu erstellen.
931 4.8) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine
934 Vgl. die EXPLAIN Man-Page.
936 4.9) Was ist ein R-Tree Index?
938 Ein R-Tree Index wird benutzt, um räumliche Daten zu indizieren. Ein
939 Hash-Index kann nicht für Bereichssuchen genutzt werden. Ein B-Tree
940 Index kann nur für Bereichssuchen in eindimensionalen Daten genutzt
941 werden. R-Trees können hingegen auch mit multi-dimensionalen Daten
942 umgehen. Ein Beispiel: Wenn ein R-Tree Index auf ein Attribut vom Typ
943 POINT gebildet wird, dann kann das System Abfragen wie z.B. "Zeige
944 alle Punkte, die sich in einem umgebenden Rechteck befinden"
945 effizienter beantworten.
947 Die kanonische Veröffentlichung, die das originale R-Tree Design
950 Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial
951 Searching." Proc of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data,
954 Sie können dieses Werk auch in Stonebrakers "Readings in Database
957 Die eingebauten R-Trees können Polygone und Rechtecke verarbeiten.
958 Theoretisch können R-Trees auf eine hohe Anzahl von Dimensionen
959 erweitert werden. Für die Praxis bedeutet eine solche Erweiterung
960 allerdings eine Menge Arbeit und wir haben derzeit keinerlei
961 Dokumentation darüber, wie das zu machen wäre.
963 4.10) Was ist der "Genetic Query Optimizer"?
965 Das GEQO-Modul in PostgreSQL soll dazu dienen, das Optimierungsproblem
966 beim JOIN von vielen Tabellen auf der Basis genetischer Algorithmen
967 (GA) zu lösen. Es ermöglicht die Behandlung von großen JOIN-Queries
968 durch eine nicht-erschöpfende Suche.
970 4.11) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer
971 Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende
972 ich einen Index bei solchen Suchabfragen?
974 Der Operator ~ wendet einen regulären Ausdruck an und ~* wendet ihn
975 an, ohne die Groß- und Kleinschreibung zu beachten. Ebenso beachtet
976 LIKE die Groß- und Kleinschreibung, und ILIKE nicht.
978 Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,
979 werden in der Regel so ausgedruckt:
982 WHERE LOWER(spalte) = 'abc'
984 Hier kann kein normaler Index benutzt werden. Legt man hingegen einen
985 funktionalen Index an, so wird er auf jeden Fall verwendet:
986 CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))
988 4.12) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
990 Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.
992 4.13) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
994 Typ interner Name Bemerkungen
995 -------------------------------------------------
996 VARCHAR(n) varchar die Größe legt die Maximallänge fest; kein
997 Auffüllen mit Leerzeichen
998 CHAR(n) bpchar mit Leerzeichen gefüllt bis zur angegebenen Länge
999 TEXT text keine obere Schranke für die Länge
1000 BYTEA bytea Bytearray mit variabler Länge (auch für
1001 '\0'-Bytes geeignet)
1002 "char" char 1 Zeichen
1004 Der interne Name kommt vor allem in den Systemkatalogen und in manchen
1005 Fehlermeldungen vor.
1007 Die ersten vier Typen sind "varlena"-Typen (d.h. die ersten vier Bytes
1008 geben die Länge an, gefolgt von den Daten). Daher ist der tatsächlich
1009 belegte Platz immer etwas mehr als die deklarierte Feldgröße.
1010 Allerdings wird unter Umständen auf diese Datentypen Datenkompression
1011 durch das TOAST- Verfahren angewendet, womit der tatsächlich belegte
1012 Platz auch geringer als erwartet ausfallen kann.
1014 Für die Speicherung von Zeichenketten variabler Länge empfiehlt sich
1015 VARCHAR(n). Die maximale Länge eines VARCHAR(n)-Felds wird bei der
1016 Tabellendefinition festgelegt. TEXT setzt keine Längengrenze,
1017 allerdings gibt es eine systembedingte Obergrenze von 1 GB.
1019 CHAR(n) ist geeignet für die Speicherung von Zeichenketten, die alle
1020 die gleiche Länge haben. Bitte beachten Sie, dass CHAR(n) automatisch
1021 Zeichenketten bis zur definierten Feldlänge mit Leerzeichen ausfüllt,
1022 während bei VARCHAR(n) nur die tatsächlich eingegebene Zeichenkette
1025 BYTEA ist für binäre Daten, besonders für Werte, die NULL-Bytes haben.
1027 Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften
1030 4.14.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des
1031 Werts (serial/auto-increment)?
1033 PostgreSQL bietet einen SERIAL-Datentyp. Dieser erzeugt automatisch
1034 eine Sequenz auf die angegebene Spalte. Zum Beispiel:
1035 CREATE TABLE person (
1040 wird automatisch in:
1041 CREATE SEQUENCE person_id_seq;
1042 CREATE TABLE person (
1043 id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
1049 Die create_sequence Man-Page liefert weitere Informationen über
1050 Sequenzen. Es ist auch möglich, den OID-Wert jeder Spalte als
1051 einmaligen Wert einzusetzen. Sollten Sie allerdings die Datenbank
1052 exportieren und reimportieren wollen, müssen Sie die Option -o von
1053 pg_dump bzw. COPY WITH OIDS verwenden, um die OIDs beizubehalten.
1055 4.14.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
1057 Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten
1058 SERIAL-Wert von dem Sequenzobjekt vor der Auszuführung einer
1059 INSERT-Anweisung anzufordern und ihn dann explizit in die
1060 INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.14.1
1061 könnte dieser Vorgang in einer Pseudosprache so aussehen:
1062 new_id = output of execute("SELECT nextval('person_id_seq')");
1063 execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
1065 Danach stünde der neue Wert in der Variablen new_id für die Verwendung
1066 in weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel
1067 zur Tabelle 'person'). Bitte beachten Sie, dass der Name des
1068 automatisch erstellten SEQUENCE-Objektes folgenden Name hat:
1069 <table>_<serialcolumn>_seq wobei 'table' und 'serialcolumn' die Namen
1070 der jeweils betreffenden Tabelle / Spalte darstellen.
1072 Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den
1073 automatisch eingefügten SERIAL-Wert mit der currval()-Funktion
1075 execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
1076 new_id = output of execute("SELECT currval('person_id_seq')");
1078 Schließlich besteht noch die Möglichkeit, den von einer
1079 INSERT-Anweisung zurückgelieferten OID-Wert als einmaligen Wert zu
1080 verwenden. Dieser Ansatz ist allerdings PostgreSQL-spezifisch;
1081 außerdem wird nach ca. 4 Milliarden Einträgen der OID-Wert wieder auf
1082 eine kleine Zahl gesetzt, ist also nicht garantiert immer einmalig
1085 Mit zum Beispiel dem DBD::Pg-Modul von Perl wird der OID-Wert nach
1086 einem $sth->excute() über $sth->{pg_oid_status} zurückgeliefert.
1088 4.14.3) Führen currval() und nextval() zu einer Race-Condition mit anderen
1091 Nein. currval() liefert einen Wert zurück, der von Ihrem Backend
1092 bestimmt wird, und der anderen Benutzern nicht zur Verfügung steht.
1094 4.14.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht
1095 zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
1096 Sequenz-/SERIAL-Spalte?
1098 Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern,
1099 werden Sequenzen gerade nicht für andere Transaktionen gesperrt,
1100 sondern die Sequenznummern werden den laufenden Transaktionen sofort
1101 zugeteilt. Lücken in der Sequenznummerierung werden durch abgebrochene
1102 Transaktionen verursacht.
1104 4.15) Was ist ein OID? Was ist ein TID?
1106 OIDs sind PostgreSQLs Antwort auf eindeutige Zeilen-IDs. Jede Zeile,
1107 die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID. Alle
1108 OIDs, die durch initdb erzeugt werden, sind kleiner als 16384 (siehe
1109 include/access/transam.h). Alle OIDs, die durch den Benutzer erzeugt
1110 werden, sind größer oder gleich diesem Wert. Standardmäßig sind all
1111 OIDs nicht nur innerhalb einer Tabelle oder Datenbank, sondern in der
1112 gesamten PostgreSQL-Installation einmalig.
1114 PostgreSQL benutzt OIDs in seinen internen Systemtabellen, um Zeilen
1115 in JOINs zwischen Tabellen zu verknüpfen. Es ist möglich, einen Index
1116 für die OID-Spalte zu erstellen, wodurch schnellere Zugriffszeiten
1117 erreicht werden können. Es wird empfohlen, OID-Werte in Spalten vom
1118 Typ OID zu speichern.
1120 OIDs werden allen neuen Zeilen von einem zentralen Bereich, der von
1121 allen Datenbanken genutzt wird, zugewiesen. Nichts hindert Sie daran,
1122 die OID zu ändern, oder eine Kopie der Tabelle mit den originalen OIDs
1124 CREATE TABLE new_table(mycol int);
1125 SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table;
1126 COPY tmp_table TO '/tmp/pgtable';
1127 COPY new_table WITH OIDS FROM '/tmp/pgtable';
1128 DROP TABLE tmp_table;
1130 OIDs werden als 4-Byte Integer gespeichert und laufen bei einem Wert
1131 von ungefähr 4 Milliarden über. Niemand hat jemals davon berichtet,
1132 dass dies passiert wäre aber wir haben geplant, diese Beschränkung
1133 aufzuheben, bevor das jemand ausprobieren kann.
1135 TIDs werden benutzt, um bestimmte physikalische Zeilen durch Block und
1136 Offset Werte zu identifizieren. TIDs verändern sich, sobald Zeilen
1137 verändert oder zurückgeladen werden. Sie werden in Indexeinträgen
1138 benutzt um auf die physikalischen Zeilen zu zeigen.
1140 4.16) Welche Bedeutung haben die verschiedenen Ausdrücke, die in PostgreSQL
1141 benutzt werden (z.B. attribute, class,...)?
1143 Einige der Quelltexte und die ältere Dokumentation nutzen allgemeine
1144 Begriffe. Hier sind einige aufgeführt:
1145 * row, record, tuple
1146 * attribute, field, column
1153 * range variable, table name, table alias
1155 Eine allgemeine Liste der Datenbank-Terminologie erhalten Sie hier:
1156 http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
1157 /glossary.html (engl.).
1159 4.17) Wieso bekomme ich einen Fehler: "ERROR: Memory exhausted in
1162 Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System
1163 oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen.
1164 Probieren Sie vor dem Start von postmaster folgendes:
1168 Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich
1169 ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments
1170 für Prozesse erhöht werden und eventuell die erfolgreiche Ausführung
1171 der Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-CLient
1172 haben, weil das Backend zu viele Daten zurückliefert, versuchen Sie
1173 dies vor dem Start des SQL-Clients.
1175 4.18) Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft?
1177 Geben Sie in psql SELECT VERSION(); ein.
1179 4.19) Bei "large-object"-Operationen kommt die Fehlermeldung: "invalid
1180 large obj descriptor". Warum?
1182 Sie sollten die Anweisungen BEGIN WORK und COMMIT bei jeden Gebrauch
1183 von Large Objects benutzen. Also um lo_open ... lo_close.
1185 Derzeit erzwingt PostgreSQL diese Regel, indem es die Handles der
1186 Large Objects beim COMMIT der Transaktion schließt. So führt der erste
1187 Versuch, etwas mit dem Large Object zu machen, zu einer Meldung
1188 "invalid large obj descriptor". Solange Sie keine Transaktionen
1189 benutzen, wird der Code, der in älteren PostgreSQL-Versionen
1190 funktionierte, nun diese Fehlermeldung erzeugen.
1192 Falls Sie eine Client-Schnittstelle wie ODBC benutzen, kann es sein,
1193 dass die auto-commit-Option ausgeschaltet werden muss.
1195 4.20) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die
1196 aktuelle Uhrzeit enthalten soll?
1198 Dazu verwenden Sie CURRENT_TIMESTAMP:
1199 CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
1201 4.21) Warum sind meine Unterabfragen (subqueries), die IN verwenden, so
1204 In Versionen vor 7.4 werden Unterabfragen mit der äusseren Abfrage
1205 verbunden, in dem für jede Reihe der äusseren Query die Ergebnisse der
1206 Unterabfrage sequentiell geprüft werden. Um dies zu vermeiden, kann
1207 man IN durch EXISTS ersetzen, z.B.:
1210 WHERE spalte1 IN (SELECT spalte2 FROM tabelle_2)
1215 WHERE EXISTS (SELECT spalte2 FROM tabelle_2 WHERE spalte1 = spalte2)
1217 Damit diese Abfrage effizient durchgeführt wird, sollte für 'spalte2'
1218 ein Index angelegt worden sein. Ab PostgreSQL 7.4 verwendet IN die
1219 gleichen Methoden wie die normale Tabellenverknüpfung und ist daher
1220 soger EXISTS vorzuziehen.
1222 4.22) Wie führe ich einen OUTER JOIN durch?
1224 PostgreSQL ab der Version 7.1 unterstützt OUTER JOINs nach dem SQL-
1225 Standardsyntax. Hier zwei Beispiele:
1228 LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)
1233 LEFT OUTER JOIN tabelle_2 t2 USING (spalte)
1235 Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die
1236 Spalte 'spalte' und geben außerdem alle unverknüpften Zeilen in
1237 tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)
1238 zurück. Ein RIGHT JOIN würde hingegen alle unverknüpften Zeilen in
1239 tabelle_2 hinzufügen und ein FULL JOIN würde alle verknüpften Zeilen
1240 sowie jeweils alle unverknüpften Zeilen aus den beiden Tabellen
1241 zurückliefern. Die Angabe von OUTER ist nicht zwingend und kann in
1242 LEFT, RIGHT und FULL-Verknüpfungen weggelassen werden. Normale
1243 Verknüpfungen sind INNER JOINs.
1245 In früheren Versionen von PostgreSQL konnten OUTER JOINs mittels UNION
1246 und NOT IN simuliert werden. Zum Beispiel 'tabelle_1' und 'tabelle_2'
1247 können als LEFT OUTER JOIN auch so verknüpft werden:
1248 SELECT t1.spalte1, t2.spalte2
1249 FROM tabelle_1 t1, tabelle_2 t2
1250 WHERE t1.spalte1 = t2.spalte1
1252 SELECT t1.spalte1, NULL
1254 WHERE t1.spalte1 NOT IN (SELECT t2.spalte1 FROM tabelle_2 t2)
1257 4.23) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?
1259 Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine
1260 Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische
1261 Systemkataloge lädt, ist eine datenbankübergreifende Abfrage nicht
1264 contrib/dblink ist eine Erweiterung, die datenbankübergreifende
1265 Abfragen über Funktionsaufrufe ermöglicht.
1267 Es ist natürlich möglich, dass eine Client-Anwendung gleichzeitige
1268 Verbindungen zu verschiedenen Datenbanken aufbaut und selber
1269 Datensätze zusammenfügt.
1271 Ab 7.3 unterstützt PostgreSQL schemas, die die Aufteilung einer
1272 Datenbank in mehrere logische Bereiche ermöglichen. Bei vielen
1273 Anwendungen könnten diese einen geeigneten Ersatz für den Zugriff auf
1274 eine andere Datenbank bieten.
1276 4.24) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
1279 Ab 7.3 können Funktionen mehrere Zeilen und Spalten zurückgeben, vgl.:
1280 http://techdocs.postgresql.org/guides/SetReturningFunctions.
1282 4.25) Warum kann ich temporäre Tabellen in PL/PgSQL-Funktionen nicht
1283 zuverlässig erstellen bzw. löschen?
1285 PL/PgSQL verarbeitet die Inhalte einer Funktion in eine Cache. Dies
1286 hat eine unangenehme Nebenwirkung, nämlich dass wenn eine PL/PgSQL-
1287 Funktion auf eine temporäre Tabelle zugreift, und diese Tabelle
1288 anschließend gelöscht bzw. neu erstellt wird, die Funktion
1289 fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte
1290 temporäre Tabelle zeigen.
1292 Die Lösung für diese Probleme besteht darin, in der PL/PgSQL Funktion
1293 mittels EXECUTE auf temporäre Tabellen zuzugreifen. Diese bewirkt,
1294 dass bei jedem Funktionsruf die betreffende Abfrage neu geparst wird.
1296 4.26) Welche Möglichkeiten zur Verschlüsselung gibt es?
1298 * contrib/pgcrypto enthält diverse Funktionen für die Benützung mit
1300 * Um Verbindungen zwischen dem Server und Client-Anwendungen zu
1301 verschlüsseln, muss in der Server-Konfigurationsdatei
1302 postgresql.conf die ssl-Option auf true (Voreinstellung: false)
1303 gesetzt werden und ein passender host- bzw. hostssl-Eintrag muss
1304 in pg_hba.conf vorhanden sein. Zudem muss die sslmode-Einstellung
1305 beim Client nicht auf disable gesetzt werden. (Bitte beachten Sie
1306 auch, daß neben der eingebauten SSL-Unterstützung verschlüsselte
1307 Verbindungen auch über externe Anwendungen wie stunnel oder ssh
1308 aufgebaut werden können).
1309 * Die Passwörter der Datenbanknutzer werden ab Version 7.3
1310 automatisch verschlüsselt (in früheren Versionen muß der Parameter
1311 PASSWORD_ENCRYPTION in postgresql.conf explizit eingeschaltet
1313 * Betrieb des Servers auf einem verschlüsselten Dateisystem.
1314 _________________________________________________________________
1316 PostgreSQL erweitern
1318 5.1) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich sie in
1319 psql aufrufe, kommt ein core dump. Warum?
1321 Dieses Problem kann viele Ursachen haben. Testen Sie Ihre Funktion
1322 zuerst in einem eigenen Testprogramm.
1324 5.2) Wie kann ich praktische neue Typen und Funktionen zu PostgreSQL
1327 Senden Sie Ihre Beiträge an die Mailing Liste pgsql-hackers, und sie
1328 werden nach Prüfung eventuell ins contrib/ Verzeichnis des Quellcodes
1331 5.3) Wie schreibe ich eine Funktion in C, die einen Tupel zurückliefert?
1333 Ab PostgreSQL 7.3 werden Funktionen, die Tupel zurückliefern, in C,
1334 PL/PgSQL und SQL unterstützt. Der Programmer's Guide enthält weitere
1335 Informationen dazu. Ein Bespiel einer solchen Funktion befindet sich
1336 in contrib/tablefunc.
1338 5.4) Ich habe eine der Quellendateien geändert. Warum macht sich die
1339 Änderung beim erneuten Kompilieren nicht bemerkbar?
1341 Die Makefiles enthalten nicht die richtigen Abhängigkeiten für
1342 include- Dateien. Sie müssen ein "make clean" und dann ein weiteres
1343 "make" ausführen. Wenn Sie gcc benutzen, können Sie die
1344 "--enable-depend"-Option des configure- Skripts benutzen, damit der
1345 Compiler die Abhängigkeiten automatisch ermittelt.
1346 _________________________________________________________________
1348 Anmerkungen des Übersetzers
1350 Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher
1351 liegt die Übersetzung nicht immer auf dem aktuellsten Stand.
1353 Die aktuellste Version der deutschen Übersetzung befindet sich immer
1354 unter http://sql-info.de/de/postgresql/FAQ_german.html. Diese
1355 "Arbeitsversion" enthält eventuell Änderungen, die noch nicht auf der
1356 PostgreSQL-Website eingebunden worden sind.
1358 Über Verbesserungshinweise und Korrekturvorschläge sowie
1359 Verständnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch
1360 allgemeine Fragen zu PostgreSQL gerne entgegen, verweise jedoch auf
1361 die Mailing-Listen als schnelle und zuverlässige Anlaufstellen.