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 15.12.2002,
11 Die aktuellste Version dieses Dokuments liegt auf der PostgreSQL
13 * http://www.PostgreSQL.org/docs/faq-english.html (engl.)
14 * http://www.PostgreSQL.org/docs/faq-german.html (dt.)
16 Übersetzungen dieses Dokuments in andere Sprachen sowie plattform-
17 spezifische FAQs können unter
18 http://www.PostgreSQL.org/users-lounge/docs/faq.html eingesehen
20 _________________________________________________________________
24 1.1) Was ist PostgreSQL? Wie wird es ausgesprochen?
25 1.2) Welchem Copyright unterliegt PostgreSQL?
26 1.3) Auf welchen Unix-Plattformen läuft PostgreSQL?
27 1.4) Welche Nicht-Unix-Versionen sind verfügbar?
28 1.5) Woher bekomme ich PostgreSQL?
29 1.6) Wo bekomme ich Support für PostgreSQL?
30 1.7) Was ist die neueste Version von PostgreSQL?
31 1.8) Welche Dokumentation ist für PostgreSQL verfügbar?
32 1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
33 1.10) Wie kann ich SQL lernen?
34 1.11) Ist PostgreSQL Y2K (Jahr 2000) fähig?
35 1.12) Wie kann ich im Entwicklerteam mitarbeiten?
36 1.13) Wie sende ich einen Fehler-Bericht?
37 1.14) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
38 1.15) Wie kann ich PostgreSQL finanziell unterstützen?
40 Fragen zu Benutzerprogrammen
42 2.1) Gibt es ODBC-Treiber für PostgreSQL?
43 2.2) Welche Werkzeuge gibt es, um Web-Seiten mit PostgreSQL zu
45 2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
46 2.4) Welche Programmiersprachen können mit PostgreSQL kommunizieren?
50 3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
51 3.2) Wenn ich den postmaster starte, erhalte ich die Nachricht "Bad
52 System Call" bzw. "core dumped". Warum?
53 3.3) Wenn ich versuche, den postmaster zu starten, bekomme ich
54 "IpcMemoryCreate"-Fehlermeldungen. Warum?
55 3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich
56 "IpcSemaphoreCreate"-Fehlermeldungen. Warum?
57 3.5) Wie regle ich Zugriffe von anderen Rechnern?
58 3.6) Wie optimiere ich die Datenbank für bessere Leistung?
59 3.7) Welche Debugging-Funktionen sind bei PostgreSQL verfügbar?
60 3.8) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
61 Verbindung aufzubauen versuche. Warum?
62 3.9) Was befindet sich im Verzeichnis pgsql_tmp/?
63 3.10) Warum muß ich bei jeder neuen Hauptversion von PostgreSQL die
64 komplette Datenbank exportieren und anschließend reimportieren?
68 4.1) Worin besteht der Unterschied zwischen Binary Cursors und Normal
70 4.2) Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen in
72 4.3) Wie bekomme ich eine Liste der Tabellen oder anderen Dinge, die
73 ich in psql sehen kann?
74 4.4) Wie entferne ich eine Spalte aus einer Tabelle?
75 4.5) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine
77 4.6) Wieviel Plattenplatz wird benötigt, um die Daten aus einer
78 typischen Textdatei abzuspeichern?
79 4.7) Wie finde ich heraus, welche Indizes oder Operationen in der
80 Datenbank definiert sind?
81 4.8) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?
82 4.9) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer
83 ("GEQO") meine Abfrage auswertet?
84 4.10) Was ist ein R-Tree Index?
85 4.11) Was ist der "Genetic Query Optimizer"?
86 4.12) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei
87 einer Suche, bei der Groß- und Kleinschreibweisen ignoriert werden?
88 Wie verwende ich bei solchen Suchabfragen einen Index?
89 4.13) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
90 4.14) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
91 4.15.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung
93 4.15.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
94 4.15.3) Führen currval() und nextval() zu einer Race-Condition mit
96 4.15.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch
97 nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
98 Sequenz-/SERIAL-Spalte?
99 4.16) Was ist ein OID? Was ist ein TID?
100 4.17) Welche Bedeutung haben die verschiedenen Ausdrücke, die in
101 PostgreSQL benutzt werden (z.B. attribute, class,...)?
102 4.18) Wieso bekomme ich den Fehler: "FATAL: Memory exhausted in
104 4.19) Wie kann ich feststellen, welche PostgreSQL-Version bei mir
106 4.20) Bei "large-object"-Operationen kommt die Fehlermeldung: "invalid
107 large obj descriptor". Warum?
108 4.21) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die
109 aktuelle Uhrzeit enthalten soll?
110 4.22) Warum sind meine Unterabfragen (subqueries), die IN verwenden,
112 4.23) Wie führe ich einen OUTER JOIN durch?
113 4.24) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?
114 4.25) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
116 4.26) Warum kann ich temporäre Tabellen in PL/PgSQL-Funktionen nicht
117 zuverlässig erstellen bzw. löschen?
118 4.27) Welche Möglichkeiten zur Datenbank-Replikation gibt es?
119 4.28) 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".
139 PostgreSQL ist eine Weiterentwicklung des POSTGRES-Datenbank-Systems,
140 eines zukunftsweisenden DBMS-Forschungsprototyps. Während PostgreSQL
141 das leistungsfähige Datenmodell und die reichhaltigen Datentypen von
142 POSTGRES beibehält, ersetzt es dessen PostQuel-Abfragesprache durch
143 eine erweiterte Teilmenge von SQL. PostgreSQL und dessen kompletter
144 Quellcode sind frei und öffentlich verfügbar.
146 Die PostgreSQL-Entwicklung wird von einem Entwickler-Team
147 durchgeführt, die alle Teilnehmer der
148 PostgreSQL-Entwicklungs-Mailingliste sind. Der aktuelle Koordinator
149 ist Marc G. Fournier (scrappy@PostgreSQL.org) (Anmeldemöglichkeit:
150 siehe unten). Dieses Team ist für die Gesamtentwicklung von PostgreSQL
153 Die Autoren von PostgreSQL 1.01 waren Andrew Yu und Jolly Chen. Viele
154 andere haben zur Portierung, zum Testen, zur Fehlersuche und zur
155 Verbesserung des Codes beigetragen. Der ursprüngliche Postgres-Code,
156 von dem PostgreSQL abstammt, ist auf die Arbeit von vielen
157 Studierenden und Diplomanden sowie Programmierern zurückzuführen, die
158 unter der Leitung des Professors Michael Stonebraker an der
159 Universität von Kalifornien, Berkeley arbeiteten.
161 Der ursprüngliche Name der Software in Berkeley war Postgres. Als die
162 SQL-Funktionalität 1995 hinzugefügt wurde, wurde sein Name zu
163 Postgres95 geändert. Der Name wurde Ende 1996 in PostgreSQL geändert.
165 1.2).Welchem Copyright unterliegt PostgreSQL?
167 PostgreSQL unterliegt folgendem COPYRIGHT (Originaltext):
169 PostgreSQL Data Base Management System
171 Portions copyright (c) 1996-2002, PostgreSQL Global Development Group
172 Portions Copyright (c) 1994-6 Regents of the University of California
174 Permission to use, copy, modify, and distribute this software and its
175 documentation for any purpose, without fee, and without a written
176 agreement is hereby granted, provided that the above copyright notice
177 and this paragraph and the following two paragraphs appear in all
180 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
181 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
182 INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
183 ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
184 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
186 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
187 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
188 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
189 PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
190 CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
191 UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
193 Bei der obigen Lizenz handelt es sich um die BSD-Lizenz, die klassiche
194 Open-Source-Lizenz. Sie schränkt die Verwendung des Quellcodes in
195 keine Weise ein. Wir mögen diese Lizenz und haben nicht vor, sie zu
198 Es gilt die Copyright-Klausel im Original!
200 1.3) Auf welchen Unix-Plattformen läuft PostgreSQL?
202 Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen
203 Plattform eingesetzt werden. Diejenigen Plattformen, die bei der
204 jeweiligen Versionsfreigabe getestet wurden, sind in den
205 Installations- Anleitungen aufgelistet.
207 1.4) Welche Nicht-Unix-Portierungen sind verfügbar?
211 Es ist möglich, die libpq C-Bibliothek, psql sowie andere Client-
212 Anwendungen und Schnittstellen für den Einsatz auf
213 MS-Windows-Plattformen zu kompilieren. In diesem Fall läuft der Client
214 auf MS-Windows und steht über TCP/IP mit einem Server in Verbindung,
215 der auf einer der unterstützten Unix-Plattformen läuft. Die
216 Distribution enthält die Datei win32.mak, mit der Win32
217 libpq-Bibliothek und psql erzeugt werden können.
221 Der Datenbankserver selber kann mit Hilfe der Cygwin-Umgebung
222 (Unix/NT-Portierungsbibliotheken) auf Windows NT/2000 zum Laufen
223 gebracht werden. Hierzu bitte lesen Sie die in der Distribution
224 enthaltene Datei pgsql/doc/FAQ_MSWIN oder die MS-Windows-FAQ unter
225 http://www.PostgreSQL.org/docs/faq-mswin.html.
227 Eine eigenständige Portierung auf MS Win NT/2000/XP befindet sich in
230 1.5) Woher bekomme ich PostgreSQL?
232 Der zentrale FTP-Server für PostgreSQL ist der ftp-Server
233 ftp://ftp.postgreSQL.org/pub. Weitere Mirror-Sites sind auf der
234 PostgreSQL-Website aufgelistet.
236 1.6) Wo bekomme ich Support für PostgreSQL?
238 Die zentrale (englischsprachige) Mailing-Liste ist:
239 mailto:pgsql-general@PostgreSQL.org .
241 Die Liste ist Themen vorbehalten, die PostgreSQL betreffen. Die
242 Anmeldung erfolgt mit einer Email an die Adresse
243 pgsql-general-request@PostgreSQL.org mit folgenden Zeilen im Text
244 (nicht in der Betreffzeile):
248 Es gibt auch eine Digest-Liste (eine Liste, die Mails zusammengefasst
249 sendet). Um sich an dieser Digest-Liste anzumelden, senden Sie eine
250 Email an pgsql-general-digest-request@PostgreSQL.org mit folgendem
255 Es gibt noch die Bug-Mailingliste. Die Anmeldung für diese Liste
256 erfolgt durch eine Email an bugs-request@PostgreSQL.org mit folgendem
261 Die Entwickler-Mailingliste kann mit einer Email an
262 pgsql-hackers-request@PostgreSQL.org abonniert werden. Die Email muß
263 ebenfalls folgenden Text enthalten:
267 Weitere Mailinglisten und Informationen zu PostgreSQL befinden sich
268 auf der PostgreSQL-Homepage:
270 http://www.PostgreSQL.org
272 Es gibt außerdem einen IRC-Channel im EFNet, Channel #PostgreSQL. Der
273 FAQ-Autor Bruce Momjian nutzt den Unix-Befehl: irc -c '#PostgreSQL'
274 "$USER" irc.phoenix.net um daran teilzunehmen.
276 Eine Liste von Unternehmen, die Support für PostgreSQL auf
277 kommerzieller Basis leisten, kann unter
278 http://www.PostgreSQL.org/users-lounge/commercial-support.html
281 1.7) Was ist die neueste Version von PostgreSQL?
283 Die neueste Version von PostgreSQL ist 7.3.
285 Wir planen alle 4 Monate eine neue Version herauszugeben.
287 1.8) Welche Dokumentation ist für PostgreSQL verfügbar?
289 Einige Handbücher, Man-Pages und einige kleine Testprogramme sind in
290 der Distribution enthalten. Siehe das /doc-Verzeichnis. Ausserdem sind
291 alle Handbücher online unter
292 http://www.PostgreSQL.org/users-lounge/docs/ verfügbar.
294 Zwei Bücher zu PostgreSQL sind online verfügbar unter
295 http://www.PostgreSQL.org/docs/awbook.html und
296 http://www.commandprompt.com/ppbook/ .
298 Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter
299 http://www.ca.PostgreSQL.org/books/ Diverse technische Artikel
300 befinden sich unter http://techdocs.PostgreSQL.org/ .
302 psql hat einige nützliche \d-Befehle, um Informationen über Typen,
303 Operatoren, Funktionen, Aggregate, usw. zu zeigen.
305 1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
307 PostgreSQL unterstützt eine erweiterte Teilmenge von SQL-92. Siehe
308 unsere TODO-Liste unter http://developer.PostgreSQL.org/todo.php für
309 eine Auflistung der bekannten Bugs, fehlenden Features und zukünftigen
312 1.10) Wie kann ich SQL lernen?
314 Das PostgreSQL Book auf http://www.PostgreSQL.org/docs/awbook.html
315 bietet eine Einführung in SQL. Ein weiteres PostgreSQL-Buch befindet
316 sich unter http://www.commandprompt.com/ppbook . Es gibt zudem nette
317 Tutorials unter http://www.intermedia.net/support/sql/sqltut.shtm ,
318 http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
319 und http://sqlcourse.com .
321 Eine weitere Empfehlung ist "Teach Yourself SQL in 21 Days, Second
322 Edition", es ist unter http://members.tripod.com/er4ebus/sql/index.htm
325 Viele PostgreSQL-Anwender mögen "The Practical SQL Handbook" (Bowman
326 et al., Addison Wesley). Andere dagegen mögen "The Complete Reference
327 SQL" (Groff et al., McGraw-Hill).
329 1.11) Ist PostgreSQL Y2K (Jahr 2000) fähig?
331 Ja, wir können Datumsangaben nach dem Jahr 2000 n.Chr. und vor 2000
332 v.Chr. leicht verarbeiten.
334 1.12) Wie kann ich im Entwicklerteam mitarbeiten?
336 Zuerst laden Sie die neuesten Quellen herunter und lesen Sie die
337 PostgreSQL-Entwicklerunterlagen auf unserer Website oder in der
338 Distribution. Dann melden Sie sich zu den Entwickler-Mailinglisten
339 pgsql-hackers und pgsql-patches an. Anschließend senden Sie qualitativ
340 hochwertige Patches an die pgsql-patches Mailingliste.
342 Es gibt ungefähr ein Dutzend Leute, die das commit-Recht im PostgreSQL
343 CVS-Archiv haben. Alle haben derart viele hochwertige Patches
344 eingebracht, dass es für die CVS-Verwalter schwer war, mitzuhalten.
345 Und wir hatten Vertrauen, dass die von ihnen festgelegten Änderungen
346 aller Wahrscheinlichkeit nach von hoher Qualität sind.
348 1.13) Wie sende ich einen Fehlerbericht?
350 Bitte besuchen Sie die PostgreSQL-BugTool-Seite
351 http://www.PostgreSQL.org/bugs/, die Hinweise und Anleitungen zur
352 Einreichung von Fehlerberichten enthält.
354 Überprüfe auch den ftp-Server ftp://ftp.PostgreSQL.org/pub, um
355 nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches
358 1.14) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
360 Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,
361 Leistung, Zuverlässigkeit, Support und Preis.
364 PostgreSQL besitt die meisten Eigenschaften - wie
365 Transaktionen, Unterabfragen (Subqueries), Trigger, Views und
366 verfeinertes Locking - die bei großen kommerziellen DBMS
367 vorhanden sind. Es bietet außerdem einige anderen
368 Eigenschaften, die diese nicht haben, wie benutzerbestimmte
369 Typen, Vererbung, Regeln, und die Multi-Versionen-Steuerung zum
370 Verringern konkurrierender Locks.
373 PostgreSQL weist eine Performanz auf, die mit der von
374 kommerziellen und anderen Open-Source-Datenbanken vergleichbar
375 ist. In manchen Bereichen ist es schneller, in anderen
376 langsamen. Im Vergleich zu MySQL oder abgespeckten
377 Datenbank-Systemen sind INSERT- und UPDATE-Anweisungen aufgrund
378 des Transaktionsaufwands langsamer. MySQL hat allerdings keine
379 der oben erwähnten Eigenschaften. PostgreSQL setzt auf
380 Zuverlässigkeit und Funktionsumfang, obwohl selbstredend
381 ständig an Performanz- Verbesserungen gearbeitet wird. Ein
382 interessanter Vergleich zwischen PostgreSQL und MySQL befindet
383 sich unter dieser URL:
384 http://openacs.org/philosophy/why-not-mysql.html
387 Wir stellen fest, dass ein DBMS wertlos ist, wenn es nicht
388 zuverlässig arbeitet. Wir bemühen uns, nur streng geprüften,
389 beständigen Code freizugeben, der nur ein Minimum an
390 Programmfehler aufweist. Jede Freigabe hat mindestens einen
391 Monat Betatest-Phase hinter sich, und unsere Freigabehistorie
392 beweist, dass wir stabile, solide Versionen freigeben, die im
393 Produktionsbetrieb genutzt werden können. Wir glauben, dass wir
394 im Vergleich mit anderer Datenbanksoftware vorteilhaft
398 Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit
399 einer großen Gruppe von Entwicklern und Benutzern mögliche
400 Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung
401 garantieren, kommerzielle DBMS tun dies aber auch nicht. Der
402 direkte Kontakt zur Entwickler- und Benutzergemeinschaft, der
403 Zugriff auf die Handbücher und auf den Quellcode ermöglicht
404 einen im Vergleich zu anderen DBMS höherwertigen Support. Es
405 gibt jedoch auch Anbieter von kommerziellen Support-Leistungen
406 (siehe FAQ-Punkt 1.6).
409 PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie
410 für die nicht-kommerzielle Nutzung. Sie können den
411 PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in
412 der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr
415 1.15) Wie kann ich PostgreSQL finanziell unterstützen?
417 PostgreSQL hat seit dem Anfang in 1996 eine exzellente Infrastruktur.
418 Dies ist Marc Fournier zu verdanken, der sie über die Jahre hinweg
419 geschaffen und gepflegt hat.
421 Eine hochwertige Infrastruktur ist für ein Open-Source-Projekt wie
422 dieses sehr wichtig. Sie verhindert Probleme und Verzögerungen beim
423 Fortschritt des Projekts.
425 Selbstverständlich ist diese Infrastruktur nicht billig. Es gibt eine
426 Reihe von einmaligen und monatlich wiederkehrenden Kosten, die für den
427 Weiterbetrieb beglichen werden müssen. Falls Sie oder Ihre Firma dazu
428 finanziell beitragen können, besuchen Sie bitte die URL
429 http://store.pgsql.com/shopping/ wo Sie eine Spende abgeben können.
431 Obwohl diese Web-Seite das Unternehmen "PostgreSQL, Inc." erwähnt, ist
432 der Bereich "contributions" (Beiträge) ausschliesslich für die
433 Unterstützung des PostgreSQL-Projekts da und nicht für die
434 Finanzierung einer bestimmten Firma. Sie können auch gerne einen
435 finanziellen Beitrag an die Kontaktadresse verschicken.
436 _________________________________________________________________
438 Fragen zu Benutzerprogrammen
440 2.1) Gibt es ODBC-Treiber für PostgreSQL?
442 Es sind zwei ODBC-Treiber verfügbar: PsqlODBC und OpenLink ODBC.
445 http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
446 heruntergeladen werden.
448 OpenLink ODBC kann unter http://www.openlinksw.com geholt werden. Die
449 Software arbeitet mit dem Standard-ODBC-Client dieser Firma, so dass
450 PostgreSQL-ODBC auf jeder Client-Plattform zur Verfügung steht, die
451 unterstützt wird (Win, Mac, Unix, VMS).
453 OpenLink wird dieses Produkt wahrscheinlich an Leute verkaufen, die
454 kommerziellen Support benötigen, dennoch wird immer eine
455 Freeware-Version verfügbar sein. Fragen dazu bitte an
456 postgres95@openlink.co.uk.
458 2.2) Welche Werkzeuge gibt es, um Web-Seiten mit PostgreSQL zu verbinden?
460 Eine nette Einführung zu datenbank-gestützten Webseiten kann unter
461 http://www.webreview.com (engl.) abgerufen werden.
463 Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP
464 gibt es bei http://www.php.net
466 Für komplexere Aufgaben bietet sich die Perl-Schnittstelle mit CGI.pm
469 2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
471 Es gibt mehrere grafische Schnittstellen für PostgreSQL, darunter
472 PgAccess ( http://www.pgaccess.org), PgAdmin II
473 (http://www.pgadmin.org, nur für Win32), RHDB Admin
474 (http://sources.redhat.com/rhdb/ ) und Rekall (
475 http://www.thekompany.com/products/rekall/, proprietär). Es gibt
476 außerdem PHPPgAdmin ( http://phppgadmin.sourceforge.net/ ), eine
477 web-basierte Schnittstelle.
479 2.4) Welche Programmiersprachen und Schnittstellen gibt es?
481 Die meisten gängigen Programmiersprachen bieten Schnittstellen für
484 Die folgenden Schnittstellen werden mit der PostgreSQL-Distribution
492 Weitere Schnittstellen für andere Sprachen können über
493 http://gborg.postgresql.org (Bereich Drivers/Interfaces) bezogen
495 _________________________________________________________________
497 Administrative Fragen
499 3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
501 Bei der Ausführung von configure die Option --prefix mit dem
502 Zielverzeichnis angeben.
504 3.2) Wenn ich den postmaster starte, erhalte ich einen Nachricht "Bad
505 System Call" bzw. "core dumped". Wieso?
507 Das kann verschiedene Ursachen haben. Überprüfen Sie zuerst, ob Ihr
508 Kernel System V Extensions unterstützt. PostgreSQL benötigt
509 Kernel-Unterstützung für Shared Memory und Semaphoren.
511 3.3) Wenn ich versuche, den postmaster zu starten, bekomme ich
512 "IpcMemoryCreate"-Fehlermeldungen. Warum?
514 Entweder ist Shared Memory in Ihrem Kernel nicht korrekt konfiguriert,
515 oder Sie müssen den Shared Memory Bereich vergrößern. Die genaue Größe
516 hängt von Ihrer Systemarchitektur und von der Anzahl der Puffer und
517 Serverprozesse ab, die Sie für postmaster konfiguriert haben. Bei den
518 voreingestellten Werten für Puffer und Prozesse benötigen Sie bei den
519 meisten Systemen ein Minimum von ca. 1 MB. Der "PostgreSQL
520 Administrator's Guide"
521 (http://www.PostgreSQL.org/idocs/index.php?kernel-resources.html)
522 enthält weitere Informationen zu Shared Memory und Semaphores.
524 3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich
525 "IpcSemaphoreCreate"-Fehlermeldungen. Warum?
527 Falls die Fehlermeldung "IpcSemaphoreCreate: semget failed (No space
528 left on device)" lautet, ist Ihr Kernel mit zu wenig Semaphoren
529 konfiguriert. PostgreSQL benötigt eine Semaphore pro möglichem
530 Backend-Prozess. Eine Zwischenlösung wäre, postmaster mit einer
531 geringeren Anzahl an Backend-Prozessen zu starten. Benutzen Sie dazu
532 die -N Option mit einem kleineren Wert als die standardmäßigen 32.
533 Eine dauerhafte Lösung wäre es, die Parameter SEMMNS und SEMMNI Ihres
536 Nichtfunktionierende Semaphores können außerdem bei hoher
537 Datenbanklast zu Abstürzen führen.
539 Falls die Fehlermeldung anders aussieht, ist möglicherweise keine
540 Semaphoren-Unterstützung in Ihrem Kernel aktiviert. Der "PostgreSQL
541 Administrator's Guide" enthält weitere Informationen zu Shared Memory
544 3.5) Wie regle ich Zugriffe von anderen Rechnern?
546 PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom
547 lokalen Rechner über Unix Domain Sockets möglich sind. Verbindungen
548 von anderen Rechnern über TCP/IP sind nur möglich, wenn der postmaster
549 mit der -i Option gestartet wird und die host-basierte
550 Authentifizierung in der Datei $PGDATA/pg_hba.conf entsprechend
553 3.6) Wie optimiere ich die Datenbank für bessere Leistung?
555 Der Einsatz von Indizes sollte auf jeden Fall Abfragen beschleunigen.
556 Die Anweisung EXPLAIN zeigt, wie PostgreSQL Abfragen interpretiert und
557 welche Indizes benutzt werden.
559 Wenn Sie eine große Anzahl von INSERT-Anweisungen durchführen, sollten
560 Sie überlegen, ob die Durchführung mit der COPY-Anweisung in Frage
561 kommt. Dies funktioniert wesentlich schneller als einzelne
562 INSERT-Befehle. SQL-Anweisungen, die sich nicht in einem BEGIN
563 WORK/COMMIT Transaktions- Block befinden, werden als eigene
564 Transaktionen behandelt. Überlegen Sie, ob die Anweisungen nicht in
565 einen einzelnen Transaktionsblock zusammen- gefasst werden können. Das
566 reduziert den Transaktionsaufwand. Überlegen Sie auch, bei größeren
567 Datenänderungen Indizes zu löschen und danach wiederherzustellen.
569 Es gibt verschiedene Tuning-Optionen. Sie können fsync() ausschalten,
570 indem Sie beim Starten des postmaster die Optionen -o -F angeben. Das
571 hindert fsync()-Operationen daran, nach jeder Transaktion die Daten
572 direkt auf die Festplatte zu schreiben.
574 Sie können auch mit der -B Option des postmaster die Anzahl der Shared
575 Memory Puffer für die Backend-Prozesse erhöhen. Falls Sie diesen Wert
576 jedoch zu hoch setzen, kann es vorkommen, dass der postmaster nicht
577 startet, weil die Obergrenze der Speicherzuweisung für Shared Memory
578 überschritten wird. Jeder Puffer ist 8 kB groß, standardmäßig gibt es
581 Sie können auch die -S Option des Backends nutzen, um die Größe des
582 Speicherplatzes für temporäres Sortieren zu erhöhen. Der -S Wert wird
583 in Kilobyte gemessen und ist standardmäßig auf 512 kB festgelegt.
585 Die CLUSTER-Anweisung kann benutzt werden, um Daten in Basistabellen
586 zu gruppieren, so dass sie auf einen Index zusammengebracht werden.
587 Siehe auch die CLUSTER(l) Man-Page für weitere Details.
589 3.7) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?
591 PostgreSQL hat einige Möglichkeiten, Statusinformationen anzuzeigen,
592 die bei der Fehlersuche nützlich sein können.
594 Wenn Sie PostgreSQL mit dem --enable-cassert Option kompiliert haben,
595 verfolgen zahlreiche assert()-Anweisungen den Ablauf des Backends und
596 halten das Programm an, wenn etwas Unerwartetes passiert.
598 Sowohl der postmaster als auch postgres stellen mehrere Debug-Optionen
599 zur Verfügung. Stellen Sie zuerst sicher, dass Sie den Standard-Output
600 und den Fehlerkanal in eine Datei umleiten, wenn Sie den postmaster
603 ./bin/postmaster >server.log 2>&1 &
605 Dadurch wird die Datei server.log im PostgreSQL-Verzeichnis erzeugt.
606 Diese Datei enthält nützliche Informationen über Probleme oder Fehler,
607 die im Server aufgetreten sind. postmaster hat eine -d Option, die
608 noch detailliertere Informationen liefert. Zur -d Option wird eine
609 Nummer angegeben, die den Debug-Level - also die Menge der berichteten
610 Information - angibt. Achtung, hohe Debug-Levels erzeugen schnell
613 Wenn der postmaster nicht läuft, können Sie sogar den postgres-Backend
614 von der Befehlszeile ausführen und eine SQL-Anweisung direkt eingeben.
615 Dies ist nur für Debugging-Zwecke zu empfehlen. Beachten Sie, dass ein
616 Zeilenumbruch, und nicht das Semikolon die SQL-Anweisung beendet.
617 Falls Sie PostgreSQL mit Debugging-Symbolen kompiliert haben, können
618 Sie mit einem Debugger sehen, was passiert. Da das Backend jedoch
619 nicht vom postmaster gestartet wurde, läuft es nicht in der gleichen
620 Umgebung und deshalb können einige locking/backend Operationen nicht
623 Wenn dagegen der postmaster läuft, führen Sie psql in einem Fenster
624 aus, dann ermitteln Sie die Prozessnummer (PID) des
625 postgres-Prozesses, der von psql verwendet wird. Binden Sie einen
626 Debugger an diese PID und führen Sie Abfragen von psql aus. Wenn Sie
627 den postgres-Serverstart analysieren wollen, setzen Sie die
628 Umgebungsvariable PGOPTIONS="-W n", und starten Sie dann psql. Dies
629 verzögert den Start um n Sekunden, damit Sie einen Debugger an den
630 Prozess binden können und ggf. Breakpoints setzen, bevor die
631 Startsequenz begonnen wird.
633 Das Programm postgres hat auch die Optionen -s, -A und -t, die bei der
634 Fehlersuche und Performanzmessung sehr nützlich sein können.
636 Sie können die Anwendung auch mit Profiling kompilieren, um zu sehen,
637 welche Funktionen wieviel Ausführungszeit beanspruchen. Das Backend
638 Profil wird im Verzeichnis pgsql/data/base/dbname abgelegt. Das
639 Client-Profil wird in das aktuelle Verzeichnis abgelegt. Bitte
640 beachtern Sie, dass unter Linux PostgreSQL mit der Option
641 -DLINUX_PROFILE kompiliert werden muß, um Profiling nutzen zu können.
643 3.8) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
644 Verbindung augzubauen versuche. Warum?
646 Sie müssen die maximale Anzahl der gleichzeitig ausfühbaren Backend-
649 Die Voreinstellung ist 32 Prozesse. Sie können diese erhöhen, indem
650 Sie den postmaster mit einem entsprechenden -N Parameter starten bzw.
651 die Konfigurationsdatei postgresql.conf anpassen.
653 Bitte beachten Sie, dass Sie auch -B auf ein Wert größer als die
654 Voreinstellung von 64 setzen müssen, wenn Sie -N auf einen Wert höher
655 als 32 setzen; -B muss mindestens das Doppelte von -N betragen, und
656 einer besseren Performanz wegen sollte der Wert noch höher sein. Bei
657 einer hohen Anzahl von Backend-Prozessen kann es vorkommen, dass Sie
658 einige Unix-Kernel- Parameter ebenfalls erhöhen müssen. Folgende
659 Parameter sind zu überprüfen: die Maximalgröße der Shared Memory
660 Blocks SHMMAX; die Maximalanzahl der Semaphoren SEMMNS und SEMMNI; die
661 maximale Anzahl von Prozessen NPROC; die maximale Anzahl von Prozessen
662 pro User MAXUPRC; und die Maximalzahl der geöffneten Dateien NFILE und
663 NINODE. Durch die Begrenzung der Anzahl erlaubter Backend-Prozesse
664 wird verhindert, dass System-Ressourcen durch PostgreSQL aufgebraucht
667 In den PostgreSQL-Versionen vor 6.5 war die maximale Anzahl von
668 Backends auf 64 festgelegt und eine Änderung setzte eine erneute
669 Kompilierung voraus, bei der die Konstante MaxBackendId in
670 include/storage/sinvaladt.h entsprechend angepasst werden mußte.
672 3.9) Was befindet sich im Verzeichnis pgsql_tmp/?
674 Dieses Verzeichnis enthält temporäre Dateien, die durch den query
675 executor erzeugt werden. Wenn zum Beispiel eine Sortierung
676 durchgeführt werden muß, um ein ORDER BY auszuführen, und diese
677 Sortierung mehr Hauptspeicher benötigt, als mit dem Backend-Parameter
678 -S erlaubt wurde, dann werden diese Dateien erzeugt, um die Daten dort
681 Die temporären Dateien sollten automatisch gelöscht werden. Falls das
682 Backend jedoch während einer Sortierung abstürzen sollte, bleiben sie
683 erhalten. Nach einem Neustart des postmaster werden sie auomatisch
686 3.10) Warum muß ich bei jeder neuen Hauptversion von PostgreSQL die
687 komplette Datenbank exportieren und anschließend reimportieren?
689 Zwischen "kleinen" PostgreSQL-Versionsänderungen (z.B. zwischen 7.2
690 und 7.2.1) werden keine strukturellen Änderungen durchgeführt, wodurch
691 ein erneutes Aus- und Einlesen der Daten nicht benötigt wird.
692 Allerdings wird bei "großen" Versionsänderungen (z.B. zwischen 7.2 und
693 7.3) oft das interne Format der Systemtabellen und Datendateien
694 angepasst. Diese Änderungen sind oft sehr komplex, wodurch die
695 Rückwärtskompatibilität der Datendateien nicht gewährleistet werden
696 kann. Durch das Exportieren werden die Daten in einem generischen
697 Format ausgegeben, wodurch die Importierung in das neue interne Format
700 Bei Versionenwechseln, wo kein Formatänderungen stattgefunden haben,
701 kann das pg_upgrade-Skript benutzt werden, um die Daten ohne Aus- und
702 Einlesen zu übertragen. Die jeweilige Dokumentation gibt an, ob für
703 die betreffende Version pg_upgrade verfügbar ist.
704 _________________________________________________________________
708 4.1) Worin besteht der Unterschied zwischen Binary Cursors und Normal
711 Vgl. die DECLARE Man-Page für eine Beschreibung.
713 4.2) Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen in einer
716 Vgl. die FETCH Man-Page, oder benutzen Sie SELECT ... LIMIT... .
718 Selbst wenn Sie nur die ersten paar Zeilen einer Tabelle abfragen
719 möchten, muß unter Umständen die komplette Abfrage abgearbeitet
720 werden. Ziehen Sie also möglichst eine Abfrage in Erwägung, die eine
721 ORDER BY-Anweisung benutzt, die wiederum auf indizierte Spalten
722 verweist. In diesem Fall kann PostgreSQL direkt nach den gewünschten
723 Zeilen suchen und braucht nicht jede mögliche Ergebniszeile
726 Bitte beachten Sie, dass mit PostgreSQL 7.3 die Syntax LIMIT n, m
727 durch LIMIT n OFFSET m ersetzt wurde.
729 4.3) Wie bekomme ich eine Liste der Tabellen oder anderen Dinge, die ich in
732 Sie können sich die Datei pgsql/src/bin/psql/describe.c mit dem
733 Quellcode für psql ansehen. Sie enthält die SQL-Abfragen, die die
734 Backslash-Kommandos (\) ausführen. Sie können psql auch mit der -E
735 Option starten. Danach gibt psql die Abfragen aus, die es bei der
736 Ausführung der Befehle benutzt.
738 4.4) Wie entferne ich eine Spalte aus einer Tabelle?
740 Der Syntax ALTER TABLE DROP COLUMN wird erst ab PostgreSQL 7.3
743 Bei früheren Versionen bietet das folgende Verfahren Ersatz:
745 LOCK TABLE old_table;
746 SELECT ... -- alle außer der zu entfernenden Spalte hier auswählen
749 DROP TABLE old_table;
750 ALTER TABLE new_table RENAME TO old_table;
753 4.5) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?
755 Es bestehen folgende Obergrenzen:
756 Maximale Größe eine Datenbank? unbeschränkt (es existieren
757 Datenbanken mit >1TB)
758 Maximale Größe einer Tabelle? 16 TB
759 Maximale Größe einer Zeile? 1,6 TB
760 Maximale Größe einer Spalte? 1 GB
761 Maximale Anzahl von Zeilen in einer Tabelle?
763 Maximale Anzahl von Spalten in einer Tabelle?
764 250-1600 je nach Spaltentyp
765 Maximale Anzahl von Indizies für eine Tabelle?
768 Selbstverständlich sind dies theoretische Werte, die oft durch die
769 verfügbaren Platten- und Speicherressourcen eingeschränkt sind.
770 Extreme Größen können zu Leistungseinbußen führen.
772 Die maximale Tabellengröße von 16 TB benötigt keine
773 Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in
774 Dateien mit einer Größe von 1 GB aufgeteilt, wodurch etwaige
775 dateisystem-bedingte Beschränkungen nicht relevant sind.
777 Die maximale Tabellengröße und die maximale Anzahl von Spalten können
778 gesteigert werden, wenn die Default-Blockgröße auf 32 KB heraufgesetzt
781 4.6) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen
782 Textdatei abzuspeichern?
784 Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen
785 Textdatei bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe
786 der Datei beanspruchen.
788 Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und
789 einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die
790 durchschnittliche Länge der Textbeschreibung 20 Byte beträgt. Die
791 einfache Datei würde 2,8 MB groß sein. Die Größe der
792 PostgreSQL-Datenbankdatei, die diese Daten enthält, liegt ungefähr bei
794 36 Bytes: jeder Zeilenkopf (ungefähr)
795 +24 Bytes: ein Integer-Feld und ein Textfeld
796 + 4 Bytes: Zeiger auf der Datenseite auf den Tupel
797 -----------------------------------------------
800 Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB),
803 --------------------- = 128 Zeilen pro Seite (abgerundet)
807 ----------------------- = 782 Datenbankseiten (aufgerundet)
810 782 Datenbankseiten * 8192 Bytes pro Seite = 6.406.144 Byte (6,4 MB)
812 Indizes beanspruchen nicht so viel Platz. Da sie jedoch die Daten
813 beinhalten, die sie indizieren, können auch sie sehr groß werden.
815 NULL-Werte werden in Bitmaps gespeichert, wodurch sie sehr wenig Platz
818 4.7) Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank
821 psql hat eine Vielzahl von Backslash-Befehlen, mit denen solche
822 Informationen angezeigt werden können. Der Befehl \? zeigt eine
823 Übersicht. Außerdem zeigt der Befehl \l eine Liste von allen
824 verfügbaren Datenbanken an.
826 Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele
827 SELECT-Anweisungen, mit deren Hilfe man Information über die
828 Systemtabellen erhalten kann.
830 4.8) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?
832 Indizes werden nicht automatisch bei jeder Abfrage verwendet. Indizes
833 werden nur dann verwendet, wenn die abzufragende Tabelle eine
834 bestimmte Größe übersteigt, und die Abfrage nur eine kleine
835 Prozentzahl der Tabellenzeilen abfragt. Grund hierfür ist, dass die
836 durch einen Index verursachten Festplattenzugriffe manchmal langsamer
837 sind als ein einfaches Auslesen aller Tabellenzeilen (sequentieller
840 Um festzustellen, ob ein Index verwendet werden soll, braucht
841 PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden
842 durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand
843 der Statistiken kennt der Abfragenoptimierer die Anzahl der
844 Tabellenzeilen und kann besser entscheiden, ob Indizes verwendet
845 werden sollen. Statistiken sind auch bei der Feststellung optimaler
846 JOIN-Reihenfolge und -Methoden wertvoll.
848 Indizes werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs
849 verwendet. Ein sequentieller Scan mit anschließendem explizitem
850 Sortiervorgang ist normalerweise schneller als ein Index-Scan einer
851 großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen
852 mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein
853 kleiner Abschnitt der Tabelle zurückgeliefert wird. Dadurch wird es
854 auch möglich, die Minimal- und Maximalwerte einer Abfrage unter
855 Verwendung von Indizes zu ermitteln:
858 ORDER BY spalte [ DESC ]
861 (Die Aggregatfunktionen MIN() und MAX() verwenden keine Indizes).
863 Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können
864 Indizes nur unter bestimmten Umständen verwendet werden:
865 * Der Anfang des Suchmusters muß mit dem Anfang des Strings
866 verknüpft werden, d.h.:
867 + LIKE-Suchmuster dürfen nicht mit % anfangen;
868 + ~ (reguläre Ausdrücke) müssen mit ^ anfangen.
869 * Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e])
872 Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B.
873 ILIKE bzw. ~*), verwenden keine Indizes. Stattdessen können
874 funktionale Indizes verwendet werden, die im Punkt 4.12 beschrieben
877 Die C-Locale muß während der Datenbank-Initialisierung mit initdb
878 bestimmt worden sein.
880 4.9) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine
883 Vgl. die EXPLAIN Man-Page.
885 4.10) Was ist ein R-Tree Index?
887 Ein R-Tree Index wird benutzt, um räumliche Daten zu indizieren. Ein
888 Hash-Index kann nicht für Bereichssuchen genutzt werden. Ein B-Tree
889 Index kann nur für Bereichssuchen in eindimensionalen Daten genutzt
890 werden. R-Trees können multi-dimensionale Daten abhandeln. Ein
891 Beispiel: Wenn ein R-Tree Index auf ein Attribut vom Typ POINT
892 gebildet wird, dann kann das System Abfragen wie z.B. "Zeige alle
893 Punkte, die sich in einem umgebenden Rechteck befinden" effizienter
896 Die kanonische Veröffentlichung, die das originale R-Tree Design
899 Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial
900 Searching." Proc of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data,
903 Sie können dieses Werk auch in Stonebrakers "Readings in Database
906 Die eingebauten R-Trees können Polygone und Rechtecke verarbeiten.
907 Theoretisch können R-Trees auf eine hohe Anzahl von Dimensionen
908 erweitert werden. Praktisch bedingt diese Erweiterung eine Menge
909 Arbeit und wir haben derzeit keinerlei Dokumentation darüber, wie das
912 4.11) Was ist der "Genetic Query Optimizer"?
914 Das GEQO-Modul in PostgreSQL soll dazu dienen, das Optimierungsproblem
915 beim JOIN von vielen Tabellen auf der Basis genetischer Algorithmen
916 (GA) zu lösen. Es ermöglicht die Behandlung von großen JOIN-Queries
917 durch eine nicht-erschöpfende Suche.
919 4.12) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer
920 Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende
921 ich einen Index bei solchen Suchabfragen?
923 Der Operator ~ bewirkt die Anwendung eines regulären Ausdrucks. ~*
924 führt zur Anwendung eines regulären Ausdrucks mit Ignorierung der
925 Groß- und Kleinschreibung.
927 Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,
928 werden in der Regel so ausgedruckt:
931 WHERE LOWER(spalte) = 'abc'
933 Ein funktionaler Index, der wie folgt erstellt wird, wird auf jeden
935 CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))
937 4.13) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
939 Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.
941 4.14) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
943 Typ interner Name Bemerkungen
944 -------------------------------------------------
945 "char" char 1 Zeichen
946 CHAR(n) bpchar mit Leerzeichen gefüllt bis zur angegebenen Länge
947 VARCHAR(n) varchar die Größe legt die Maximallänge fest; kein
948 Ausfüllen mit Leerzeichen
949 TEXT text Die Länge wird nur durch die maximale Zeilenlänge
951 BYTEA bytea Bytearray mit variabler Länge
953 Der interne Name kommt vor allem in den Systemkatalogen und in manchen
956 Die letzten vier Typen sind "varlena"-Typen (d.h. die ersten vier
957 Bytes geben die Länge an, gefolgt von den Daten). Daher ist der
958 tatsächlich belegte Platz immer etwas mehr als die deklarierte
959 Feldgröße. Allerdings wird unter Umständen auf diese Datentypen
960 Datenkompression durch das TOAST- Verfahren angewendet, womit der
961 tatsächlich belegte Platz auch geringer als erwartet ausfallen kann.
963 CHAR(n) ist geeignet für die Speicherung von Zeichenketten ähnlicher
964 Länge. VARCHAR(n) ist geeignet für Zeichenketten abweichender Längen,
965 setzt jedoch eine maximale Länge. TEXT setzt keine Längengrenze,
966 allerdings gibt es eine systembedingte Obergrenze von 1 GB. BYTEA ist
967 für binäre Daten, besonders für Werte, die NULL-Bytes haben. Die
968 erwähnten Typen weisen ähnliche Performanzeigenschaften auf.
970 4.15.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des
973 PostgreSQL bietet einen SERIAL-Datentyp. Dieser erzeugt automatisch
974 eine Sequenz und einen Index auf die angegebene Spalte. Zum Beispiel:
975 CREATE TABLE person (
981 CREATE SEQUENCE person_id_seq;
982 CREATE TABLE person (
983 id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
986 CREATE UNIQUE INDEX person_id_key ON person ( id );
990 Die create_sequence Man-Page liefert weitere Informationen über
991 Sequenzen. Es ist auch möglich, den OID-Wert jeder Spalte als
992 einmaligen Wert einzusetzen. Sollten Sie allerdings die Datenbank
993 exportieren und reimportieren wollen, müssen Sie die Option -o von
994 pg_dump bzw. COPY WITH OIDS verwenden, um die OIDs beizubehalten.
996 4.15.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
998 Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten
999 SERIAL-Wert von dem Sequenzobjekt vor der Auszuführung einer
1000 INSERT-Anweisung anzufordern und ihn dann explizit in die
1001 INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.15.1
1002 könnte dieser Vorgang in einer Pseudosprache so aussehen:
1003 new_id = output of execute("SELECT nextval('person_id_seq')");
1004 execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
1006 Danach stünde der neue Wert in der Variablen new_id für die Verwendung
1007 in weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel
1008 zur Tabelle 'person'). Bitte beachten Sie, dass der Name des
1009 automatisch erstellten SEQUENCE-Objektes folgenden Name hat:
1010 <table>_<serialcolumn>_seq wobei 'table' und 'serialcolumn' die Namen
1011 der jeweils betreffenden Tabelle / Spalte darstellen.
1013 Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den
1014 automatisch eingefügten SERIAL-Wert mit der currval()-Funktion
1016 execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
1017 new_id = output of execute("SELECT currval('person_id_seq')");
1019 Schließlich besteht noch die Möglichkeit, den von einer
1020 INSERT-Anweisung zurückgelieferten OID-Wert als einmaligen Wert zu
1021 verwenden. In Perl mit dem DBD::Pg-Modul von Edmund Mergl wird der
1022 OID-Wert nach einem $sth->excute() über $sth->{pg_oid_status}
1025 4.15.3) Führen currval() und nextval() zu einer Race-Condition mit anderen
1028 Nein. Die Funktionen liefern einen Wert zurück, der von Ihrem Backend
1029 bestimmt wird, und der anderen Benutzern nicht zur Verfügung steht.
1031 4.15.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht
1032 zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
1033 Sequenz-/SERIAL-Spalte?
1035 Um die konkurrente Verarbeitung zu verbessern, werden Sequenzwerte
1036 nach Bedarf an laufende Transaktionen zugeteilt und erst beim Abschluß
1037 der Transaktion gesperrt. Durch abgebrochene Transaktionen werden
1038 Lücken in der Sequenznummerierung verursacht.
1040 4.16) Was ist ein OID? Was ist ein TID?
1042 OIDs sind PostgreSQLs Antwort auf eindeutige Zeilen-IDs. Jede Zeile,
1043 die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID. Alle
1044 OIDs, die durch initdb erzeugt werden, sind kleiner als 16384 (siehe
1045 include/access/transam.h). Alle OIDs, die durch den Benutzer erzeugt
1046 werden, sind gleich oder größer als dieser Wert. Standardmäßig sind
1047 all OIDs nicht nur innerhalb einer Tabelle oder Datenbank, sondern in
1048 der gesamten PostgreSQL-Installation einmalig.
1050 PostgreSQL benutzt OIDs in seinen internen Systemtabellen, um Zeilen
1051 in JOINs zwischen Tabellen zu verknüpfen. Es ist möglich, einen Index
1052 für die OID-Spalte zu erstellen, wodurch schnellere Zugriffszeiten
1053 erreicht werden können. Es wird empfohlen, OID-Werte in Spalten vom
1054 Typ OID zu speichern.
1056 OIDs werden allen neuen Zeilen von einem zentralen Bereich, der von
1057 allen Datenbanken genutzt wird, zugewiesen. Nichts hindert Sie daran,
1058 die OID zu ändern, oder eine Kopie der Tabelle mit den originalen Oids
1060 CREATE TABLE new_table(old_oid OID, mycol INT);
1061 SELECT INTO new SELECT old_oid, mycol FROM old;
1062 COPY new TO '/tmp/pgtable';
1064 COPY new WITH OIDS FROM '/tmp/pgtable';
1066 4.17) Welche Bedeutung haben die verschiedenen Ausdrücke, die in PostgreSQL
1067 benutzt werden (z.B. attribute, class,...)?
1069 Einige der Quelltexte und die ältere Dokumentation nutzen allgemeine
1070 Begriffe. Hier sind einige aufgeführt:
1071 * row, record, tuple
1072 * attribute, field, column
1079 * range variable, table name, table alias
1081 Eine allgemeine Liste der Datenbank-Terminologie erhalten Sie hier:
1082 http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
1083 /glossary.html (engl.).
1085 4.18) Wieso bekomme ich einen Fehler: "ERROR: Memory exhausted in
1088 Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System
1089 oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen.
1090 Probieren Sie vor dem Start von postmaster folgendes:
1094 Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich
1095 ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments
1096 für Prozesse erhöht werden und eventuell die erfolgreiche Ausführung
1097 der Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-CLient
1098 haben, weil das Backend zu viele Daten zurückliefert, versuchen Sie
1099 dies vor dem Start des SQL-Clients.
1101 4.19) Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft?
1103 Geben Sie in psql SELECT VERSION(); ein.
1105 4.20) Bei "large-object"-Operationen kommt die Fehlermeldung: "invalid
1106 large obj descriptor". Warum?
1108 Sie sollten die Anweisungen BEGIN WORK und COMMIT bei jeden Gebrauch
1109 von Large Objects benutzen. Also um lo_open ... lo_close.
1111 Derzeit erzwingt PostgreSQL diese Regel, indem es die Handles der
1112 Large Objects beim COMMIT der Transaktion schließt. So führt der erste
1113 Versuch, etwas mit dem Large Object zu machen, zu einer Meldung
1114 "invalid large obj descriptor". Solange Sie keine Transaktionen
1115 benutzen, wird der Code, der in älteren PostgreSQL-Versionen
1116 funktionierte, nun diese Fehlermeldung erzeugen.
1118 Falls Sie eine Client-Schnittstelle wie ODBC benutzen, kann es sein,
1119 dass die auto-commit-Option ausgeschaltet werden muss.
1121 4.21) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die
1122 aktuelle Uhrzeit enthalten soll?
1124 Dazu verwenden Sie CURRENT_TIMESTAMP:
1125 CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
1127 4.22) Warum sind meine Unterabfragen (subqueries), die IN verwenden, so
1130 Derzeit werden Unterabfragen mit der äusseren Abfrage verbunden, indem
1131 für jede Reihe der äusseren Query die Ergebnisse der Unterabfrage
1132 sequentiell geprüft werden. Um dies zu vermeiden, kann man IN durch
1133 EXISTS ersetzen, z.B.:
1136 WHERE spalte1 IN (SELECT spalte2 FROM tabelle_2)
1141 WHERE EXISTS (SELECT spalte2 FROM tabelle_2 WHERE spalte1 = spalte2)
1143 Damit diese Abfrage effizient durchgeführt wird, sollte für 'spalte2'
1144 ein Index angelegt worden sein. Die Einschränkung von Abfragen mit IN
1145 soll in einer künftigen PotsgreSQL-Version behoben werden.
1147 4.23) Wie führe ich einen OUTER JOIN durch?
1149 PostgreSQL ab der Version 7.1 unterstützt OUTER JOINs nach dem SQL-
1150 Standardsyntax. Hier zwei Beispiele:
1153 LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)
1158 LEFT OUTER JOIN tabelle_2 t2 USING (spalte)
1160 Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die
1161 Spalte 'spalte' und geben außerdem alle unverknüpften Zeilen in
1162 tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)
1163 zurück. Ein FULL JOIN würde dagegen alle verknüpften Zeilen sowie
1164 jeweils alle unverknüpften Zeilen aus den beiden Tabellen verknüpfen.
1165 Die Angabe von OUTER ist nicht zwingend und kann in LEFT, RIGHT und
1166 FULL-Verknüpfungen weggelassen werden. Normale Verknüpfungen sind
1169 In früheren Versionen von PostgreSQL können OUTER JOINs mittels UNION
1170 und NOT IN simuliert werden. Zum Beispiel 'tabelle_1' und 'tabelle_2'
1171 können als LEFT OUTER JOIN auch so verknüpft werden:
1172 SELECT t1.spalte1, t2.spalte2
1173 FROM tabelle_1 t1, tabelle_2 t2
1174 WHERE t1.spalte1 = t2.spalte1
1176 SELECT t1.spalte1, NULL
1178 WHERE t1.spalte1 NOT IN (SELECT t2.spalte1 FROM tabelle_2 t2)
1181 4.24) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?
1183 Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine
1184 Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische
1185 Systemkataloge lädt, ist eine datenbankübergreifende Abfrage nicht
1188 contrib/dblink ermöglicht datenbankübergreifende Abfragen.
1190 Es ist natürlich möglich, dass eine Client-Anwendung gleichzeitige
1191 Verbindungen zu verschiedenen Datenbanken aufbaut und selber
1192 Datensätze zusammenfügt.
1194 4.25) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
1197 "Result sets" können mittels refcursors von PL/PgSQL-Funktionen
1198 zurückgegeben werden. Vgl.:
1199 http://www.postgresql.org/idocs/index.php?plpgsql-cursors.html
1200 (Abschnitt 23.7.3.3).
1202 4.26) Warum kann ich temporäre Tabellen in PL/PgSQL-Funktionen nicht
1203 zuverlässig erstellen bzw. löschen?
1205 PL/PgSQL verarbeitet die Inhalte einer Funktion in einer Cache. Dies
1206 hat eine unangenehme Nebenwirkung, nämlich dass wenn eine PL/PgSQL-
1207 Funktion auf eine temporäre Tabelle zugreift, und diese Tabelle
1208 anschließend gelöscht bzw. neu erstellt wird, die Funktion
1209 fehlschlagen wird, da die gecachte Funktionsinhalte noch auf die alte
1210 temporäre Tabelle zeigen.
1212 Die Lösung für diese Probleme besteht darin, in der Funktion mittels
1213 EXECUTE auf temporäre Tabellen zuzugreifen. Diese bewirkt, dass bei
1214 jedem Funktionsruf die betreffende Abfrage von PL/PgSQL neu geparst
1217 4.27) Welche Möglichkeiten zur Datenbank-Replikation gibt es?
1219 Es existieren mehrere Ansätze zur Master/Slave-Replikation in
1220 PostgreSQL. In diesen werden Datenänderungen in der Master-Datenbank
1221 durchgeführt und an Slave-Datenbanken weitergeleitet. Informationen
1222 über diese Lösungen befinden sich auf der folgenden Seite (unten):
1223 http://gborg.PostgreSQL.org/genpage?replication_research .
1225 Eine Multi-Master-Lösung befindet sich in der Entwicklung. Näheres
1226 dazu befindet sich hier:
1227 http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php .
1229 4.28) Welche Möglichkeiten zur Verschlüsselung gibt es?
1231 * contrib/pgcrypto enthält diverse Funktionen für die Benützung mit
1233 * die einzige Möglichkeit, Kommunikationen zwischen Client und
1234 Server zu verschlüsseln, ist durch die Anwendung von hostssl in
1236 * Die Passwörter der Datenbanknutzer werden ab Version 7.3
1237 automatisch verschlüsselt (in früheren Versionen muß der Parameter
1238 PASSWORD_ENCRYPTION in postgresql.conf explizit eingeschaltet
1240 * der Server läuft auf einem verschlüsselten Dateisystem.
1241 _________________________________________________________________
1243 PostgreSQL erweitern
1245 5.1) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich sie in
1246 psql aufrufe, kommt ein core dump. Warum?
1248 Dieses Problem kann viele Ursachen haben. Testen Sie Ihre Funktion
1249 zuerst in einem eigenen Testprogramm.
1251 5.2) Wie kann ich praktische neue Typen und Funktionen zu PostgreSQL
1254 Senden Sie Ihre Beiträge an die Mailing Liste pgsql-hackers, und sie
1255 werden nach Prüfung eventuell ins contrib/ Verzeichnis des Quellcodes
1258 5.3) Wie schreibe ich eine Funktion in C, die einen Tupel zurückliefert?
1260 Ab PostgreSQL 7.3 werden Funktionen, die Tupel zurückliefern, in C,
1261 PL/PgSQL und SQL unterstützt. Der Programmer's Guide enthält weitere
1262 Informationen dazu. Ein Bespiel einer solchen Funktion befindet sich
1263 in contrib/tablefunc.
1265 5.4) Ich habe eine der Quellendateien geändert. Warum macht sich die
1266 Änderung beim erneuten Kompilieren nicht bemerkbar?
1268 Die Makefiles enthalten nicht die richtigen Abhängigkeiten für
1269 include- Dateien. Sie müssen ein "make clean" und dann ein weiteres
1270 "make" ausführen. Wenn Sie gcc benutzen, können Sie die
1271 "--enable-depend"-Option des configure- Skripts benutzen, damit der
1272 Compiler die Abhängigkeiten automatisch ermittelt.
1273 _________________________________________________________________
1275 Anmerkungen des Übersetzers
1277 Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher
1278 liegt die Übersetzung nicht immer auf dem aktuellsten Stand.
1280 Über Verbesserungshinweise und Korrekturvorschläge sowie
1281 Verständnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch
1282 allgemeine Fragen zu PostgreSQL gerne entgegen, kann aber leider keine
1283 zeitige Antwort garantieren.
1285 Diese Übersetzung basiert teilweise auf einer früheren Übersetzung von
1286 Karsten Schulz (schulz@linux-systemhaus.de).