]> granicus.if.org Git - postgresql/blob - doc/FAQ_german
incorporates latest changes in the English original.
[postgresql] / doc / FAQ_german
1
2                   Häufig gestellte Fragen (FAQ) zu PostgreSQL
3                                        
4    Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us).
5    
6    Deutsche Übersetzung von Ian Barwick (barwick@gmx.net).
7    
8    Letzte Aktualisierung der deutschen Übersetzung: So., den 15.12.2002,
9    18:00 CET
10    
11    Die aktuellste Version dieses Dokuments liegt auf der PostgreSQL
12    Website:
13      * http://www.PostgreSQL.org/docs/faq-english.html (engl.)
14      * http://www.PostgreSQL.org/docs/faq-german.html (dt.)
15        
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
19    werden.
20      _________________________________________________________________
21    
22                              Allgemeine Fragen
23                                       
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?
39    
40                         Fragen zu Benutzerprogrammen
41                                       
42    2.1) Gibt es ODBC-Treiber für PostgreSQL?
43    2.2) Welche Werkzeuge gibt es, um Web-Seiten mit PostgreSQL zu
44    verbinden?
45    2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
46    2.4) Welche Programmiersprachen können mit PostgreSQL kommunizieren?
47    
48                            Administrative Fragen
49                                       
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?
65    
66                              Fragen zum Betrieb
67                                       
68    4.1) Worin besteht der Unterschied zwischen Binary Cursors und Normal
69    Cursors?
70    4.2) Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen in
71    einer Abfrage aus?
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
76    Datenbank?
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
92    des Wertes?
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
95    anderen Nutzern?
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
103    AllocSetAlloc()"?
104    4.19) Wie kann ich feststellen, welche PostgreSQL-Version bei mir
105    läuft?
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,
111    so langsam?
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
115    zurückgeben lassen?
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?
120    
121                             PostgreSQL erweitern
122                                       
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
126    hinzufügen?
127    5.3) Wie schreibe ich eine Funktion in C, die einen Tupel
128    zurückliefert?
129    5.4) Ich habe eine der Quellendateien geändert. Warum macht sich die
130    Änderung beim erneuten Kompilieren nicht bemerkbar?
131      _________________________________________________________________
132    
133                              Allgemeine Fragen
134                                       
135     1.1) Was ist PostgreSQL? Wie wird es ausgesprochen?
136     
137    Die (englische) Aussprache ist "Post-Gres-Q-L".
138    
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.
145    
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
151    verantwortlich.
152    
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.
160    
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.
164    
165     1.2).Welchem Copyright unterliegt PostgreSQL?
166     
167    PostgreSQL unterliegt folgendem COPYRIGHT (Originaltext):
168    
169    PostgreSQL Data Base Management System
170    
171    Portions copyright (c) 1996-2002, PostgreSQL Global Development Group
172    Portions Copyright (c) 1994-6 Regents of the University of California
173    
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
178    copies.
179    
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.
185    
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.
192    
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
196    ändern.
197    
198    Es gilt die Copyright-Klausel im Original!
199    
200     1.3) Auf welchen Unix-Plattformen läuft PostgreSQL?
201     
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.
206    
207     1.4) Welche Nicht-Unix-Portierungen sind verfügbar?
208     
209    Client
210    
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.
218    
219    Server
220    
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.
226    
227    Eine eigenständige Portierung auf MS Win NT/2000/XP befindet sich in
228    Vorbereitung.
229    
230     1.5) Woher bekomme ich PostgreSQL?
231     
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.
235    
236     1.6) Wo bekomme ich Support für PostgreSQL?
237     
238    Die zentrale (englischsprachige) Mailing-Liste ist:
239    mailto:pgsql-general@PostgreSQL.org .
240    
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):
245     subscribe
246     end
247
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
251    Text:
252     subscribe
253     end
254
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
257    Text:
258     subscribe
259     end
260
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:
264     subscribe
265     end
266
267    Weitere Mailinglisten und Informationen zu PostgreSQL befinden sich
268    auf der PostgreSQL-Homepage:
269    
270      http://www.PostgreSQL.org
271      
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.
275    
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
279    eingesehen werden.
280    
281     1.7) Was ist die neueste Version von PostgreSQL?
282     
283    Die neueste Version von PostgreSQL ist 7.3.
284    
285    Wir planen alle 4 Monate eine neue Version herauszugeben.
286    
287     1.8) Welche Dokumentation ist für PostgreSQL verfügbar?
288     
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.
293    
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/ .
297    
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/ .
301    
302    psql hat einige nützliche \d-Befehle, um Informationen über Typen,
303    Operatoren, Funktionen, Aggregate, usw. zu zeigen.
304    
305     1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
306     
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
310    Pläne.
311    
312     1.10) Wie kann ich SQL lernen?
313     
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 .
320    
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
323    erhältlich.
324    
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).
328    
329     1.11) Ist PostgreSQL Y2K (Jahr 2000) fähig?
330     
331    Ja, wir können Datumsangaben nach dem Jahr 2000 n.Chr. und vor 2000
332    v.Chr. leicht verarbeiten.
333    
334     1.12) Wie kann ich im Entwicklerteam mitarbeiten?
335     
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.
341    
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.
347    
348     1.13) Wie sende ich einen Fehlerbericht?
349     
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.
353    
354    Überprüfe auch den ftp-Server ftp://ftp.PostgreSQL.org/pub, um
355    nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches
356    gibt.
357    
358     1.14) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
359     
360    Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,
361    Leistung, Zuverlässigkeit, Support und Preis.
362    
363    Eigenschaften
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.
371           
372    Performanz
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
385           
386    Zuverlässigkeit
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
395           dastehen.
396           
397    Support
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).
407           
408    Preis
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
413           Produkt integrieren.
414           
415     1.15) Wie kann ich PostgreSQL finanziell unterstützen?
416     
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.
420    
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.
424    
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.
430    
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      _________________________________________________________________
437    
438                         Fragen zu Benutzerprogrammen
439                                       
440     2.1) Gibt es ODBC-Treiber für PostgreSQL?
441     
442    Es sind zwei ODBC-Treiber verfügbar: PsqlODBC und OpenLink ODBC.
443    
444    PsqlODBC kann von
445    http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
446    heruntergeladen werden.
447    
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).
452    
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.
457    
458     2.2) Welche Werkzeuge gibt es, um Web-Seiten mit PostgreSQL zu verbinden?
459     
460    Eine nette Einführung zu datenbank-gestützten Webseiten kann unter
461    http://www.webreview.com (engl.) abgerufen werden.
462    
463    Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP
464    gibt es bei http://www.php.net
465    
466    Für komplexere Aufgaben bietet sich die Perl-Schnittstelle mit CGI.pm
467    oder mod_perl.
468    
469     2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
470     
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.
478    
479     2.4) Welche Programmiersprachen und Schnittstellen gibt es?
480     
481    Die meisten gängigen Programmiersprachen bieten Schnittstellen für
482    PostgreSQL.
483    
484    Die folgenden Schnittstellen werden mit der PostgreSQL-Distribution
485    ausgeliefert:
486      * C (libpq)
487      * Embedded C (ecpg)
488      * Java (jdbc)
489      * Python (PyGreSQL)
490      * TCL (libpgtcl)
491        
492    Weitere Schnittstellen für andere Sprachen können über
493    http://gborg.postgresql.org (Bereich Drivers/Interfaces) bezogen
494    werden.
495      _________________________________________________________________
496    
497                            Administrative Fragen
498                                       
499     3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
500     
501    Bei der Ausführung von configure die Option --prefix mit dem
502    Zielverzeichnis angeben.
503    
504     3.2) Wenn ich den postmaster starte, erhalte ich einen Nachricht "Bad
505     System Call" bzw. "core dumped". Wieso?
506     
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.
510    
511     3.3) Wenn ich versuche, den postmaster zu starten, bekomme ich
512     "IpcMemoryCreate"-Fehlermeldungen. Warum?
513     
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.
523    
524     3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich
525     "IpcSemaphoreCreate"-Fehlermeldungen. Warum?
526     
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
534    Kernels zu erhöhen.
535    
536    Nichtfunktionierende Semaphores können außerdem bei hoher
537    Datenbanklast zu Abstürzen führen.
538    
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
542    und Semaphores.
543    
544     3.5) Wie regle ich Zugriffe von anderen Rechnern?
545     
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
551    angepasst ist.
552    
553     3.6) Wie optimiere ich die Datenbank für bessere Leistung?
554     
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.
558    
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.
568    
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.
573    
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
579    64 Puffer.
580    
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.
584    
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.
588    
589     3.7) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?
590     
591    PostgreSQL hat einige Möglichkeiten, Statusinformationen anzuzeigen,
592    die bei der Fehlersuche nützlich sein können.
593    
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.
597    
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
601    starten:
602       cd /usr/local/pgsql
603       ./bin/postmaster >server.log 2>&1 &
604
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
611    große Logdateien!
612    
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
621    reproduziert werden.
622    
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.
632    
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.
635    
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.
642    
643     3.8) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
644     Verbindung augzubauen versuche. Warum?
645     
646    Sie müssen die maximale Anzahl der gleichzeitig ausfühbaren Backend-
647    Prozesse hochsetzen.
648    
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.
652    
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
665    werden.
666    
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.
671    
672     3.9) Was befindet sich im Verzeichnis pgsql_tmp/?
673     
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
679    zu auszulagern.
680    
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
684    gelöscht.
685    
686     3.10) Warum muß ich bei jeder neuen Hauptversion von PostgreSQL die
687     komplette Datenbank exportieren und anschließend reimportieren?
688     
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
698    ermöglicht wird.
699    
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      _________________________________________________________________
705    
706                              Fragen zum Betrieb
707                                       
708     4.1) Worin besteht der Unterschied zwischen Binary Cursors und Normal
709     Cursors?
710     
711    Vgl. die DECLARE Man-Page für eine Beschreibung.
712    
713     4.2) Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen in einer
714     Abfrage aus?
715     
716    Vgl. die FETCH Man-Page, oder benutzen Sie SELECT ... LIMIT... .
717    
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
724    abzuarbeiten.
725    
726    Bitte beachten Sie, dass mit PostgreSQL 7.3 die Syntax LIMIT n, m
727    durch LIMIT n OFFSET m ersetzt wurde.
728    
729     4.3) Wie bekomme ich eine Liste der Tabellen oder anderen Dinge, die ich in
730     psql sehen kann?
731     
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.
737    
738     4.4) Wie entferne ich eine Spalte aus einer Tabelle?
739     
740    Der Syntax ALTER TABLE DROP COLUMN wird erst ab PostgreSQL 7.3
741    unterstützt.
742    
743    Bei früheren Versionen bietet das folgende Verfahren Ersatz:
744       BEGIN;
745       LOCK TABLE old_table;
746       SELECT ...  -- alle außer der zu entfernenden Spalte hier auswählen
747         INTO TABLE new_table
748         FROM old_table;
749       DROP TABLE old_table;
750       ALTER TABLE new_table RENAME TO old_table;
751       COMMIT;
752
753     4.5) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?
754     
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?
762                                              unbeschränkt
763     Maximale Anzahl von Spalten in einer Tabelle?
764                                              250-1600 je nach Spaltentyp
765     Maximale Anzahl von Indizies für eine Tabelle?
766                                              unbeschränkt
767
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.
771    
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.
776    
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
779    wird.
780    
781     4.6) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen
782     Textdatei abzuspeichern?
783     
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.
787    
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
793    6,4 MB:
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    -----------------------------------------------
798     64 Bytes pro Zeile
799
800    Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB),
801    also:
802    8192 Bytes pro Seite
803    ---------------------   =  128 Zeilen pro Seite (abgerundet)
804      64 Bytes pro Zeile
805
806    100.000 Datenzeilen
807    -----------------------  =  782 Datenbankseiten (aufgerundet)
808        128 Zeilen pro Seite
809
810    782 Datenbankseiten * 8192 Bytes pro Seite  =  6.406.144 Byte (6,4 MB)
811
812    Indizes beanspruchen nicht so viel Platz. Da sie jedoch die Daten
813    beinhalten, die sie indizieren, können auch sie sehr groß werden.
814    
815    NULL-Werte werden in Bitmaps gespeichert, wodurch sie sehr wenig Platz
816    in Anspruch nehmen.
817    
818     4.7) Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank
819     definiert sind?
820     
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.
825    
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.
829    
830     4.8) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?
831     
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
838    Scan).
839    
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.
847    
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:
856        SELECT spalte
857          FROM tabelle
858      ORDER BY spalte [ DESC ]
859         LIMIT 1
860
861    (Die Aggregatfunktionen MIN() und MAX() verwenden keine Indizes).
862    
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])
870        anfangen
871        
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
875    werden.
876    
877    Die C-Locale muß während der Datenbank-Initialisierung mit initdb
878    bestimmt worden sein.
879    
880     4.9) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine
881     Abfrage auswertet?
882     
883    Vgl. die EXPLAIN Man-Page.
884    
885     4.10) Was ist ein R-Tree Index?
886     
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
894    beantworten.
895    
896    Die kanonische Veröffentlichung, die das originale R-Tree Design
897    beschreibt, ist:
898    
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,
901    45-57.
902    
903    Sie können dieses Werk auch in Stonebrakers "Readings in Database
904    Systems" finden.
905    
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
910    zu machen wäre.
911    
912     4.11) Was ist der "Genetic Query Optimizer"?
913     
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.
918    
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?
922     
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.
926    
927    Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,
928    werden in der Regel so ausgedruckt:
929       SELECT *
930         FROM tabelle
931        WHERE LOWER(spalte) = 'abc'
932
933    Ein funktionaler Index, der wie folgt erstellt wird, wird auf jeden
934    Fall verwendet:
935       CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))
936
937     4.13) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
938     
939    Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.
940    
941     4.14) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
942     
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
950                                beschränkt
951 BYTEA         bytea           Bytearray mit variabler Länge
952
953    Der interne Name kommt vor allem in den Systemkatalogen und in manchen
954    Fehlermeldungen vor.
955    
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.
962    
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.
969    
970     4.15.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des
971     Werts?
972     
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 (
976           id   SERIAL,
977           name TEXT
978       )
979
980    wird automatisch in:
981       CREATE SEQUENCE person_id_seq;
982       CREATE TABLE person (
983         id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
984         name TEXT
985       );
986       CREATE UNIQUE INDEX person_id_key ON person ( id );
987
988    umgewandelt.
989    
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.
995    
996     4.15.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
997     
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')");
1005
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.
1012    
1013    Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den
1014    automatisch eingefügten SERIAL-Wert mit der currval()-Funktion
1015    zurückgeben lassen:
1016     execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
1017     new_id = output of execute("SELECT currval('person_id_seq')");
1018
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}
1023    zurückgeliefert.
1024    
1025     4.15.3) Führen currval() und nextval() zu einer Race-Condition mit anderen
1026     Nutzern?
1027     
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.
1030    
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?
1034     
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.
1039    
1040     4.16) Was ist ein OID? Was ist ein TID?
1041     
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.
1049    
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.
1055    
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
1059    anzulegen:
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';
1063       DELETE FROM new;
1064       COPY new WITH OIDS FROM '/tmp/pgtable';
1065
1066     4.17) Welche Bedeutung haben die verschiedenen Ausdrücke, die in PostgreSQL
1067     benutzt werden (z.B. attribute, class,...)?
1068     
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
1073      * table, class
1074      * retrieve, SELECT
1075      * replace, UPDATE
1076      * append, INSERT
1077      * oid, serial value
1078      * portal, cursor
1079      * range variable, table name, table alias
1080        
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.).
1084    
1085     4.18) Wieso bekomme ich einen Fehler: "ERROR: Memory exhausted in
1086     AllocSetAlloc()"?
1087     
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:
1091       ulimit -d 262144
1092       limit datasize 256m
1093
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.
1100    
1101     4.19) Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft?
1102     
1103    Geben Sie in psql SELECT VERSION(); ein.
1104    
1105     4.20) Bei "large-object"-Operationen kommt die Fehlermeldung: "invalid
1106     large obj descriptor". Warum?
1107     
1108    Sie sollten die Anweisungen BEGIN WORK und COMMIT bei jeden Gebrauch
1109    von Large Objects benutzen. Also um lo_open ... lo_close.
1110    
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.
1117    
1118    Falls Sie eine Client-Schnittstelle wie ODBC benutzen, kann es sein,
1119    dass die auto-commit-Option ausgeschaltet werden muss.
1120    
1121     4.21) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die
1122     aktuelle Uhrzeit enthalten soll?
1123     
1124    Dazu verwenden Sie CURRENT_TIMESTAMP:
1125       CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
1126
1127     4.22) Warum sind meine Unterabfragen (subqueries), die IN verwenden, so
1128     langsam?
1129     
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.:
1134       SELECT *
1135         FROM tabelle_1
1136        WHERE spalte1 IN (SELECT spalte2 FROM tabelle_2)
1137
1138    in:
1139       SELECT *
1140         FROM tabelle_1
1141        WHERE EXISTS (SELECT spalte2 FROM tabelle_2 WHERE spalte1 = spalte2)
1142
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.
1146    
1147     4.23) Wie führe ich einen OUTER JOIN durch?
1148     
1149    PostgreSQL ab der Version 7.1 unterstützt OUTER JOINs nach dem SQL-
1150    Standardsyntax. Hier zwei Beispiele:
1151       SELECT *
1152         FROM tabelle_1 t1
1153              LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)
1154
1155    bzw.:
1156       SELECT *
1157         FROM tabelle_1 t1
1158              LEFT OUTER JOIN tabelle_2 t2 USING (spalte)
1159
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
1167    INNER JOINs.
1168    
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
1175        UNION ALL
1176       SELECT t1.spalte1, NULL
1177         FROM tabelle_1 t1
1178        WHERE t1.spalte1 NOT IN (SELECT t2.spalte1 FROM tabelle_2 t2)
1179        ORDER BY spalte1
1180
1181     4.24) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?
1182     
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
1186    möglich.
1187    
1188    contrib/dblink ermöglicht datenbankübergreifende Abfragen.
1189    
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.
1193    
1194     4.25) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
1195     zurückgeben lassen?
1196     
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).
1201    
1202     4.26) Warum kann ich temporäre Tabellen in PL/PgSQL-Funktionen nicht
1203     zuverlässig erstellen bzw. löschen?
1204     
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.
1211    
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
1215    wird.
1216    
1217     4.27) Welche Möglichkeiten zur Datenbank-Replikation gibt es?
1218     
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 .
1224    
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 .
1228    
1229     4.28) Welche Möglichkeiten zur Verschlüsselung gibt es?
1230     
1231      * contrib/pgcrypto enthält diverse Funktionen für die Benützung mit
1232        SQL-Abfragen;
1233      * die einzige Möglichkeit, Kommunikationen zwischen Client und
1234        Server zu verschlüsseln, ist durch die Anwendung von hostssl in
1235        pg_hba.conf;
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
1239        werden);
1240      * der Server läuft auf einem verschlüsselten Dateisystem.
1241      _________________________________________________________________
1242    
1243                             PostgreSQL erweitern
1244                                       
1245     5.1) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich sie in
1246     psql aufrufe, kommt ein core dump. Warum?
1247     
1248    Dieses Problem kann viele Ursachen haben. Testen Sie Ihre Funktion
1249    zuerst in einem eigenen Testprogramm.
1250    
1251     5.2) Wie kann ich praktische neue Typen und Funktionen zu PostgreSQL
1252     hinzufügen?
1253     
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
1256    aufgenommen werden.
1257    
1258     5.3) Wie schreibe ich eine Funktion in C, die einen Tupel zurückliefert?
1259     
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.
1264    
1265     5.4) Ich habe eine der Quellendateien geändert. Warum macht sich die
1266     Änderung beim erneuten Kompilieren nicht bemerkbar?
1267     
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      _________________________________________________________________
1274    
1275     Anmerkungen des Übersetzers
1276     
1277    Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher
1278    liegt die Übersetzung nicht immer auf dem aktuellsten Stand.
1279    
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.
1284    
1285    Diese Übersetzung basiert teilweise auf einer früheren Übersetzung von
1286    Karsten Schulz (schulz@linux-systemhaus.de).