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