Don't intercept SIGQUIT as a signal to trigger failover; that's what
[PostgreSQL.git] / doc / FAQ_german
blob1459e5a08c4d8c0527c3c5d9862306c3bd883bbd
2                   Häufig gestellte Fragen (FAQ) zu PostgreSQL
3                                        
4    Current maintainer: Bruce Momjian (bruce@momjian.us).
5    
6    Deutsche Übersetzung von Ian Barwick (barwick@gmail.com).
7    
8    Letzte Aktualisierung der deutschen Übersetzung: Fr., den 19.10.2007,
9    17:00 MEZ
10    
11    Die aktuellste Version dieses Dokuments liegt auf der
12    PostgreSQL-Website:
13      * http://www.postgresql.org/docs/faqs.FAQ.html (engl.)
14      * http://www.postgresql.org/docs/faqs.FAQ_german.html (dt.)
15        
16    Übersetzungen dieses Dokuments in anderen Sprachen sowie plattform-
17    spezifische FAQs können unter http://www.postgresql.org/docs/faq/
18    eingesehen werden.
19      _________________________________________________________________
20    
21                              Allgemeine Fragen
22                                       
23    1.1) Was ist PostgreSQL? Wie wird es ausgesprochen?
24    1.2) Wer kontrolliert PostgreSQL?
25    1.3) Welchem Copyright unterliegt PostgreSQL?
26    1.4) Auf welchen Plattformen läuft PostgreSQL?
27    1.5) Woher bekomme ich PostgreSQL?
28    1.6) Was ist die neueste Version von PostgreSQL?
29    1.7) Wo bekomme ich Support für PostgreSQL?
30    1.8) Wie kann ich einen Fehlerbericht abgeben?
31    1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
32    1.10) Welche Dokumentation ist für PostgreSQL verfügbar?
33    1.11) Wie kann ich SQL lernen?
34    1.12) Wie kann ich im Entwicklerteam mitarbeiten?
35    1.13) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
36    1.14) Kommt PostgreSQL mit den Anpassungen der Sommerzeit in
37    verschiedenen Ländern klar?
38    
39                         Fragen zu Benutzerprogrammen
40                                       
41    2.1) Welche Schnittstellen gibt es für PostgreSQL?
42    2.2) Wie kann man PostgreSQL mit einer Website nutzen?
43    2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
44    
45                            Administrative Fragen
46                                       
47    3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
48    3.2) Wie regle ich Zugriffe von anderen Rechnern?
49    3.3) Wie kann ich eine bessere Performanz erreichen?
50    3.4) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?
51    3.5) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
52    Verbindung aufzubauen versuche. Warum?
53    3.6) Wie wird PostgreSQL aktualisiert?
54    3.7) Welche Hardware eignet sich für den Betrieb mit PostgreSQL?
55    
56                              Fragen zum Betrieb
57                                       
58    4.1) Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen
59    bzw. eine beliebige Zeile in einer Abfrage aus?
60    4.2) Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder
61    Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql
62    verwendeten Abfragen?
63    4.3) Wie ändere ich den Datentyp einer Spalte?
64    4.4) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine
65    Datenbank?
66    4.5) Wieviel Plattenplatz wird benötigt, um die Daten aus einer
67    typischen Textdatei abzuspeichern?
68    4.6) Meine Abfragen sind langsam oder benutzen die Indexe nicht.
69    Warum?
70    4.7) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine
71    Abfrage auswertet?
72    4.8) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei
73    einer Suche, bei der Groß- und Kleinschreibweisen ignoriert werden?
74    Wie verwende ich einen Index bei solchen Suchabfragen?
75    4.9) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
76    4.10) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
77    4.11.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung
78    des Wertes?
79    4.11.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
80    4.11.3) Führt currval() zu einer Race-Condition mit anderen Nutzern?
81    4.11.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch
82    nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
83    Sequenz-/SERIAL-Spalte?
84    4.12) Was ist ein OID? Was ist ein CTID?
85    4.13) Wieso bekomme ich den Fehler: "FATAL: Memory exhausted in
86    AllocSetAlloc()"?
87    4.14) Wie kann ich feststellen, welche PostgreSQL-Version bei mir
88    läuft?
89    4.15) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die
90    aktuelle Uhrzeit enthalten soll?
91    4.16) Wie führe ich eine OUTER JOIN durch?
92    4.17) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?
93    4.18) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
94    zurückgeben lassen?
95    4.19) Warum bekomme ich eine Fehlermeldung wie
96    "relation with OID ##### does not exist" wenn ich temporäre Tabellen
97    in
98    PL/PgSQL-Funktionen benutze?
99    4.20) Welche Replikationslösungen gibt es?
100    4.21) Warum werden die Tabellen- und Spaltennamen in meiner Abfrage
101    nicht erkannt? Warum werden Großbuchstaben umgewandelt?
102      _________________________________________________________________
103    
104                              Allgemeine Fragen
105                                       
106   1.1) Was ist PostgreSQL? Wie wird es ausgesprochen?
107   
108    Die (englische) Aussprache ist "Post-Gres-Q-L". Im allgemeinen
109    Sprachgebrauch hat sich die Kurzform "Postgres" auch durchgesetzt.
110    (Für diejenigen, die es interessiert: eine MP3-Datei mit der
111    amerikanischen Aussprache befindet sich hier:
112    http://www.postgresql.org/files/postgresql.mp3
113    
114    PostgreSQL ist ein objektrelationales Datenbanksystem, das die Vorzüge
115    von kommerziellen Datenbanksystemen mit zukunftsweisenden Innovationen
116    kombiniert. PostgreSQL ist freie Software und dessen kompletter
117    Quellcode ist öffentlich verfügbar.
118    
119    Die PostgreSQL-Entwicklung wird von einem Team von meist freiwilligen
120    Entwicklern durchgeführt. Dieses Team ist für die Gesamtentwicklung
121    von PostgreSQL verantwortlich. Es handelt sich um ein
122    Gemeinschaftsprojekt, das nicht von einer bestimmten Firma
123    kontrolliert wird. Lesen Sie die Entwickler-FAQ:
124    http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn Sie an einer
125    Mitarbeit interessiert sind.
126    
127   1.2) Wer kontrolliert PostgreSQL?
128   
129    Falls Sie nach dem Namen eines etwaigen Inhabers bzw. nach einem
130    allmächtigen Zentralkommittee suchen - sparen Sie sich die Mühe, sowas
131    existiert gar nicht. Es gibt zwar das "Core Committee" sowie
132    Entwickler, die CVS-Schreibberechtigung haben, jedoch haben diese
133    Gruppen eher nur eine administrative Rolle. Das Projekt wird durch die
134    Community gesteuert, die aus den Entwicklern sowie natürlich auch den
135    Nutzern besteht - jeder kann daran teilnehmen. (Lesen Sie die
136    Entwickler-FAQ: http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn
137    Sie an der PostgreSQL-Entwicklung teilnehmen möchten).
138    
139   1.3) Welchem Copyright unterliegt PostgreSQL?
140   
141    PostgreSQL wird unter der klassischen BSD-Lizenz herausgegeben. Im
142    Grunde genommen erlaubt diese den Nutzern, beliebig mit dem Code
143    umzugehen, auch der Weiterverkauf von Binärversionen ohne Quellcode
144    ist erlaubt. Die einzige Einschränkung besteht darin, dass PostgreSQL
145    auf keinen Fall für etwaige Probleme mit der Software haftet. Außerdem
146    muß der Copyright- Text in allen Kopien der Software enthalten sein.
147    Dies ist der Originaltext der BSD-Lizenz:
148    
149    PostgreSQL Data Base Management System
150    
151    Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
152    Portions Copyright (c) 1994-6 Regents of the University of California
153    
154    Permission to use, copy, modify, and distribute this software and its
155    documentation for any purpose, without fee, and without a written
156    agreement is hereby granted, provided that the above copyright notice
157    and this paragraph and the following two paragraphs appear in all
158    copies.
159    
160    IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
161    FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
162    INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
163    ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
164    ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
165    
166    THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
167    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
168    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
169    PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
170    CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
171    UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
172    
173    Es gilt die Copyright-Klausel im Original!
174    
175   1.4) Auf welchen Plattformen läuft PostgreSQL?
176   
177    Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen
178    Plattform eingesetzt werden. Diejenigen Plattformen, die bei der
179    jeweiligen Versionsfreigabe getestet wurden, sind in den
180    Installationsanleitungen aufgelistet.
181    
182    PostgreSQL läuft auch auf Microsoft NT-basierten Betriebssystemen wie
183    Windows 2000 SP4, XP und Server 2003. Ein vorgefertigtes
184    Installationspaket kann von http://pgfoundry.org/projects/pginstaller
185    heruntergeladen werden. DOS-basierte Windows-Versionen (Win95, Win98,
186    WinMe) können PostgreSQL nur mit Hilfe der Cygwin-Umgebung ausführen.
187    
188    Eine Portierung für Novell Netware 6 gibt es unter
189    http://forge.novell.com sowie eine OS/2 (eComStation) version unter
190    http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
191    SQL&stype=all&sort=type&dir=%2F.
192    
193   1.5) Woher bekomme ich PostgreSQL?
194   
195    Per Web-Browser hier: http://www.postgresql.org/ftp/ und per FTP hier:
196    ftp://ftp.postgresql.org/pub/.
197    
198   1.6) Was ist die neueste Version von PostgreSQL?
199   
200    Die neueste Version von PostgreSQL ist 8.2.5.
201    
202    Die Freigabe einer neuen Hauptversion erfolgt in der Regel jährlich,
203    kleinere Korrekturversionen alle paar Monaten.
204    
205   1.7) Wo bekomme ich Support für PostgreSQL?
206   
207    Die PostgreSQL-Community bietet Unterstützung per Mailing-Liste. Die
208    Web-Seite http://www.postgresql.org/community/lists/ bietet einen
209    Überblick. Die Listen general und bugs bieten einen guten Einstieg.
210    
211    Eine deutschsprachige Mailing-Liste gibt es hier:
212    http://archives.postgresql.org/pgsql-de-allgemein/.
213    
214    Der wichtigsten IRC-Channel ist #postgresql auf Freenode
215    (irc.freenode.net). Unter UNIX/Linux können Sie mit z.B. irc -c
216    '#postgresql' "$USER" irc.freenode.net. daran teilnehmen. Auf Freenode
217    gibt es einen spanischsprachigen Channel #postgresql-es, einen
218    französischen, #postgresqlfr sowie einen brasilianischen,
219    #postgresql-br . Es gibt außerdem einen PostgreSQL-Channel bei EFNet.
220    
221    Eine Liste von Unternehmen, die Support für PostgreSQL auf
222    kommerzieller Basis leisten, kann unter
223    http://www.postgresql.org/support/professional_support eingesehen
224    werden.
225    
226   1.8) Wie kann ich einen Fehlerbericht abgeben?
227   
228    Nutzen Sie das Formular unter
229    http://www.postgresql.org/support/submitbug. Schauen Sie aber vorher
230    unter ftp://ftp.postgresql.org/pub/ nach, ob es mittlerweile eine
231    neuere PostgreSQL-Version gibt, in der der Fehler behoben wurde.
232    
233    Bugs, die über das Formular bzw. eine der Mailing-Listen
234    bekanntgegeben wurden, erhalten typischerweise einer der folgenden
235    Reaktionen:
236      * es ist kein Bug, der Grund wird benannt
237      * es ist ein bereits bekannter Bug, der bereits auf der TODO-Liste
238        aufgenommen wurde
239      * der Bug wurde in der aktuellen Version behoben
240      * der Bug wurde bereits behoben, befindet sich aber noch nicht in
241        einer offiziell veröffentlichten Version
242      * es wird um eingehendere Informationen gebeten, z.B.:
243           + Betriebssystem
244           + PostgreSQL-Version
245           + reproduzierbarer Fallbeispiel
246           + Debugging-Information
247           + Debugger-Backtrace-Ausgabe
248      * der Bug ist neu. Folgendes könnte passieren:
249           + ein Patch wird erstellt und in der nächsten Version
250             eingebaut;
251           + oder der Bug kann nicht sofort behoben werden und wird auf
252             die TODO-Liste gesetzt
253        
254   1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
255   
256    PostgreSQL unterstützt eine erweiterte Teilmenge von SQL:2003. Siehe
257    unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html
258    für eine Auflistung der bekannten Bugs, fehlenden Features und
259    zukünftigen Pläne.
260    
261    Eine Anfrage nach einem neuen Feature führt normalerweise zu einer der
262    folgenden Antworten:
263      * das Feature ist bereits auf der TODO-Liste
264      * das Feature ist nicht wünschenswert, weil:
265           + es vorhandene Funktionalität dupliziert, welche bereits dem
266             SQL-Standard folgt
267           + es würde die Komplexität der Code-Basis erhöhen, ohne
268             nennenswerte Vorteile zu bringen
269           + es wäre unsicher bzw. unzuverlässig
270      * das neue Feature wird der TODO-Liste hinzugefügt
271        
272    PostgreSQL verwendet kein Bugtracking-System, da es sich als
273    effizienter erwiesen hat, E-Mails direkt zu beantworten und die
274    TODO-Liste aktuell zu halten. In der Praxis werden Bugs sehr schnell
275    beseitigt, und diejenigen Bugs, die Auswirkungen auf eine große Anzahl
276    von Nutzern haben, werden meist kurzfristig korrigiert. Der einzige
277    Überblick über alle Änderungen, Verbesserungen und Korrekturen in
278    einer PostgreSQL-Version befindet sich in den CVS-Log-Meldungen. Auch
279    die Release-Notes listen nicht jede Änderung in der Software auf.
280    
281   1.10) Welche Dokumentation ist für PostgreSQL verfügbar?
282   
283    PostgreSQL bietet umfangreiche Dokumentation, darunter ein großes
284    Handbuch, man-Pages und einige kleine Testprogramme. Siehe das /doc-
285    Verzeichnis. Ausserdem sind alle Handbücher online unter
286    http://www.postgresql.org/docs/ verfügbar.
287    
288    Zwei Bücher zu PostgreSQL sind online verfügbar unter
289    http://www.postgresql.org/docs/books/awbook.html und
290    http://www.commandprompt.com/ppbook/ .
291    
292    Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter
293    http://www.postgresql.org/docs/books Diverse technische Artikel
294    befinden sich unter http://www.postgresql.org/docs/techdocs .
295    
296    psql hat einige nützliche \d-Befehle, um Informationen über Typen,
297    Operatoren, Funktionen, Aggregate, usw. zu zeigen.
298    
299    Die PostgreSQL-Website enthält noch mehr Dokumentation.
300    
301   1.11) Wie kann ich SQL lernen?
302   
303    Die oben erwähnten PostgreSQL-spezifische Bücher bieten einen guten
304    Einstieg. Viele PostgreSQL-Anwender mögen "The Practical SQL Handbook"
305    (Bowman et al., Addison Wesley). Andere dagegen mögen "The Complete
306    Reference SQL" (Groff et al., McGraw-Hill).
307    
308    Es gibt ausserdem einige nützliche Online-Tutorials:
309      * http://www.intermedia.net/support/sql/sqltut.shtm
310      * http://sqlcourse.com
311      * http://www.w3schools.com/sql/default.asp
312      * http://mysite.verizon.net/Graeme_Birchall/id1.html
313        
314   1.12) Wie kann ich im Entwicklerteam mitarbeiten?
315   
316    Lesen Sie in der Entwickler-FAQ unter
317    http://www.postgresql.org/docs/faqs.FAQ_DEV.html nach.
318    
319   1.13) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
320   
321    Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,
322    Performanz, Zuverlässigkeit, Support und Preis.
323    
324    Eigenschaften
325           PostgreSQL besitzt die meisten Eigenschaften - wie
326           Transaktionen, Unterabfragen (Subqueries), Trigger, Views,
327           referenzielle Integrität bei Fremdschlüsseln und verfeinertes
328           Locking - die bei großen kommerziellen DBMS vorhanden sind. Es
329           bietet außerdem einige anderen Eigenschaften, die diese nicht
330           immer haben, wie benutzerbestimmte Typen, Vererbung, Regeln,
331           und die Multi-Versionen-Steuerung zum Verringern
332           konkurrierender Locks.
333           
334    Performanz
335           Die Performanz von PostgreSQL ist mit der von kommerziellen und
336           anderen Open-Source-Datenbanken vergleichbar. In manchen
337           Bereichen ist es schneller, in anderen langsamer. In der Regel
338           beträgt der Unterschied +/-10%.
339           
340    Zuverlässigkeit
341           Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht
342           zuverlässig arbeitet. Daher bemühen wir uns, nur streng
343           geprüften und beständigen Code freizugeben, der nur ein Minimum
344           an Programmfehlern aufweist. Jede Freigabe hat mindestens einen
345           Monat Betatest-Phase hinter sich, und unsere Freigabehistorie
346           beweist, dass wir stabile und solide Versionen freigeben, die
347           im Produktionsbetrieb genutzt werden können. Wir glauben, dass
348           wir im Vergleich mit anderer Datenbanksoftware vorteilhaft
349           dastehen.
350           
351    Support
352           Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit
353           einer großen Gruppe von Entwicklern und Benutzern mögliche
354           Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung
355           garantieren, kommerzielle DBMS tun dies aber auch nicht. Der
356           direkte Kontakt zur Entwickler- und Benutzergemeinschaft und
357           der Zugriff auf die Handbücher und den Quellcode ermöglicht
358           einen im Vergleich zu anderen DBMS höherwertigeren Support. Es
359           gibt jedoch auch Anbieter von kommerziellen Support-Leistungen
360           (siehe FAQ-Punkt 1.7).
361           
362    Preis
363           PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie
364           auch für die nicht-kommerzielle Nutzung. Sie können den
365           PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in
366           der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr
367           Produkt integrieren.
368           
369   1.14) Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen
370   Ländern klar?
371   
372    Änderungen bei der US-Sommerzeit sind ab PostgreSQL Version 8.0.4
373    berücksichtigt. Änderungen in Canada und Western Australia sind ab
374    8.0.10 bzw. 8.1.6 berücksichtigt. PostgreSQL-Versionen vor 8.0 nutzen
375    die Zeitzonendatenbank des Betriebssystems, um die Sommerzeit zu
376    berechnen.
377    
378                         Fragen zu Benutzerprogrammen
379                                       
380   2.1) Welche Schnittstellen gibt es für PostgreSQL?
381   
382    Die PostgreSQL-Installation stellt nur Schnittstellen für C und
383    Embedded C bereit. Alle weitere Schnittstellen sind unabhängige
384    Projekte, die einzeln heruntergeladen werden werden müssen. Diese
385    Trennung ermöglicht individuelle Entwickler-Teams und
386    Entwicklungszyklen für die jeweiligen Projekte.
387    
388    Einige Programmiersprachen wie PHP haben eine PostgreSQL-
389    Schnittstelle bereits eingebaut. Schnittstellen für Sprachen wie Perl,
390    TCL, Python und viele anderen sind unter http://gborg.postgresql.org
391    im Bereich Drivers/Interfaces verfügbar sowie per Internet-Suche.
392    
393   2.2) Wie kann man PostgreSQL in einer Website nutzen?
394   
395    Eine nette Einführung zu datenbank-gestützten Webseiten kann unter
396    http://www.webreview.com (engl.) eingesehen werden.
397    
398    Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP
399    gibt es bei http://www.php.net
400    
401    Für komplexere Aufgaben bietet sich die Perl-Schnittstelle mit CGI.pm
402    oder mod_perl.
403    
404   2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
405   
406    Es gibt eine große Anzahl von GUI-Programmen für PostgreSQL - sowohl
407    kommerziell als auch Open-Source. Eine ausführliche Liste befindet
408    sich unter http://www.postgresql.org/docs/techdocs.54 .
409      _________________________________________________________________
410    
411                            Administrative Fragen
412                                       
413   3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
414   
415    Bei der Ausführung von configure die Option --prefix mit dem
416    Zielverzeichnis angeben.
417    
418   3.2) Wie regle ich Zugriffe von anderen Rechnern?
419   
420    PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom
421    lokalen Rechner über Unix Domain Sockets bzw. TCP/IP möglich sind.
422    Verbindungen von anderen Rechnern werden erst dann ermöglicht, wenn
423    Sie in der Datei postgresql.conf die Einstellung listen_addresses
424    anpassen, in der Datei $PGDATA/pg_hba.conf host-basierte
425    Authentifizierung einschalten und den Server neu starten.
426    
427   3.3) Wie kann ich eine bessere Performanz erreichen?
428   
429    Es gibt drei große Bereiche, in denen Performanzverbesserungen erzielt
430    werden können:
431    
432    Abfrageoptimierung
433           Die Modifizierung von Abfragen kann eine bessere Performanz
434           erzielen:
435           
436           + Erstellung von Indexen, einschliesslich partieller Indexe
437             sowie Expressionsindexe
438           + Einsatz von COPY anstelle multipler INSERT-Anweisungen
439           + Gruppierung von mehreren Abfragen innerhalb einer
440             Transaktion, um Aufwand beim Abschluss von Transaktionen
441             einzusparen
442           + Einsatz von CLUSTER beim Holen von einer großen Anzahl von
443             Datenreihen aus einem Index
444           + Einsatz von LIMIT, um eine Untermenge der Abfragen-
445             ergebnisse zurückzuliefern
446           + Einsatz von vorbereiteten Befehlen (prepared queries)
447           + Einsatz von ANALYZE, um die Datenbankstatistik für den
448             Abfragenplaner aktuell zu halten
449           + Regelmäßiger Einsatz von VACUUM bzw. pg_autovacuum
450           + Bei großen Datenveränderungen die Löschung von Indexen
451             
452    Server-Konfiguration
453           Einige Einstellungen in der Datei postgresql.conf wirken auf
454           die Performanz aus. Das Handbuch enthält unter
455           http://www.postgresql.org/docs/current/static/runtime-config.ht
456           ml eine komplette Auflistung. Kommentare zu den jeweiligen
457           Einstellungen gibt es unter
458           http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co
459           nf_e.html und
460           http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
461           
462    Hardware-Auswahl
463           Die Auswirkung von Hardware auf Performanz wird unter
464           http://momjian.us/main/writings/pgsql/hw_performance/index.html
465           und http://www.powerpostgresql.com/PerfList/ erläutert.
466           
467   3.4) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?
468   
469    Unter den Optionen für die Server-Konfigurierung gibt es zahlreiche
470    log_*-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken
471    ermöglichen. Diese können für Debugging-Zwecke sowie Performanz-Tests
472    sehr nützlich sein.
473    
474   3.5) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
475   Verbindung aufzubauen versuche. Warum?
476   
477    Ihr System hat die maximal zulässige Anzahl von Datenbankverbindungen
478    erreicht (Voreinstellung 100). Sie müssen die maximale Anzahl der
479    gleichzeitig ausführbaren Backend-Prozesse hochsetzen, indem Sie in
480    postgresql.conf den Wert max_connections ändern und den Server
481    neustarten.
482    
483   3.6) Wie wird PostgreSQL aktualisiert?
484   
485    Allgemeine Informationen zur Aktualisierung von PostgreSQL gibt es auf
486    der Seite http://www.postgresql.org/support/versioning. Detaillierte
487    technische Informationen gibt es auf der Seite
488    http://www.postgresql.org/docs/current/static/install-upgrading.html
489    
490   3.7) Welche Hardware eignet sich für den Betrieb mit PostgreSQL?
491   
492    PostgreSQL läuft auf fast jeder Hardware-Kombination. Im PC-Bereich
493    gibt es allerdings sehr große Abweichungen in der Qualität. Für einen
494    Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend
495    sein, im Server-Betrieb jedoch lohnt sich auf jeden Fall die
496    Investition in teurere Bestandteile (Stichwörter ECC-Speicher, SCSI,
497    Hauptplatinen und Netzteile von namhaften Herstellern). Nutzen Sie
498    unsere Mailing-Listen, um Hardware-Optionen zu diskutieren.
499      _________________________________________________________________
500    
501                              Fragen zum Betrieb
502                                       
503   4.1) Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw. eine
504   beliebige Zeile in einer Abfrage aus?
505   
506    Wenn Sie bei der Ausführung der Abfrage die Anzahl der anzufordenden
507    Reihen bereits kennen, nutzen Sie LIMIT. Wenn die ORDER BY- Anweisung
508    mit einem Index verwendet wird, ist es möglich, dass die gesamte
509    Abfrage nicht ausgeführt werden muss. Wenn Sie die Anzahl der der
510    anzufordenden Reihen nicht kennen, verwenden Sie einen Cursor und
511    FETCH.
512    
513    Um eine beliebige Zeile auszuwählen, nutzen Sie ORDER BY random():
514        SELECT spalte
515          FROM tabelle
516      ORDER BY random()
517         LIMIT 1
520   4.2) Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder Benutzer
521   in der Datenbank definiert sind? Wie bekomme ich die von psql verwendeten
522   Abfragen?
523   
524    In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere
525    psql-Befehle lassen sich mit \? anzeigen. Sie können sich die Datei
526    pgsql/src/bin/psql/describe.c mit dem Quellcode für psql ansehen. Sie
527    enthält die SQL-Abfragen, die die Backslash-Kommandos (\) ausführen.
528    Sie können psql auch mit der -E Option starten. Danach gibt psql die
529    Abfragen aus, die es bei der Ausführung der Befehle benutzt. Außerdem
530    biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, das
531    Metainformation über die Datenbank zur Verfügung stellt.
532    
533    Mit psql -l können Sie alle Datenbanken anzeigen lassen.
534    
535    Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele
536    SELECT- Abfragen, mit deren Hilfe man Information über die
537    Systemtabellen erhalten kann.
538    
539   4.3) Wie ändere ich den Datentyp einer Spalte?
540   
541    Ab Version 8.0 kann der Datentyp einer Spalte mit ALTER TABLE ALTER
542    COLUMN TYPE geändert werden, sofern der neue Datentyp die Werte des
543    alten Datentype aufnehmen kann.
544    
545    Bei früheren Versionen gehen Sie wie folgt vor:
546        BEGIN;
547        ALTER TABLE tabelle ADD COLUMN neue_spalte neuer_datentyp;
548        UPDATE tabelle SET neue_spalte = CAST(alte_spalte AS neuer_datentyp);
549        ALTER TABLE tabelle DROP COLUMN alte_spalte;
550        COMMIT;
553    Um den Speicherplatz freizugeben, der von der gelöschten Spalte
554    verwendet wurde, führen Sie VACUUM FULL aus.
555    
556   4.4) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?
557   
558    Es bestehen folgende Obergrenzen:
559     Maximale Größe eine Datenbank?           unbeschränkt (es existieren
560                                                Datenbanken mit 32 TB)
561     Maximale Größe einer Tabelle?            32 TB
562     Maximale Größe einer Zeile?              400 GB
563     Maximale Größe einer Spalte?             1 GB
564     Maximale Anzahl von Zeilen in einer Tabelle?
565                                              unbeschränkt
566     Maximale Anzahl von Spalten in einer Tabelle?
567                                              250-1600 je nach Spaltentyp
568     Maximale Anzahl von Indexen für eine Tabelle?
569                                              unbeschränkt
571    Selbstverständlich sind dies theoretische Werte, die oft durch die
572    verfügbaren Platten- und Speicherressourcen beschränkt werden. Extreme
573    Größen können zu Leistungseinbußen führen.
574    
575    Die maximale Tabellengröße von 32 TB benötigt keine
576    Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in
577    Dateien mit einer Größe von je 1 GB aufgeteilt, wodurch etwaige
578    dateisystem-bedingte Beschränkungen nicht relevant sind.
579    
580    Die maximale Tabellengröße und die maximale Anzahl von Spalten können
581    vervierfacht werden, indem man die Default-Blockgröße auf 32 KB
582    heraufsetzt. Die Tabellengröße kann auch durch Tabellenpartitionierung
583    vergrößert werden.
584    
585    Eine Einschränkung ist, dass Indexe nur auf Spalten erstellt werden
586    können, die bis etwa 2.000 Zeichen groß sind. Um auf größere Spalten
587    eine UNIQUE-Constraint setzen zu können, nutzen Sie einen funktionalen
588    Index mit dem MD5-Hash-Wert der Spalte. Um innerhalb einer großen, mit
589    Text belegten Spalte suchen zu können, verwenden Sie einen
590    Volltext-Index.
591    
592   4.5) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen
593   Textdatei abzuspeichern?
594   
595    Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen
596    Textdatei bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe
597    der Datei beanspruchen.
598    
599    Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und
600    einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die
601    durchschnittliche Länge der Textbeschreibung 20 Byte beträgt. Die
602    einfache Datei würde 2,8 MB groß sein. Die Größe der
603    PostgreSQL-Datenbankdatei, die diese Daten enthält, liegt ungefähr bei
604    5,2 MB:
605     24 Bytes: jeder Zeilenkopf (ungefähr)
606    +24 Bytes: ein Integer-Feld und ein Textfeld
607    + 4 Bytes: Zeiger auf der Datenseite auf den Tupel
608    -----------------------------------------------
609     52 Bytes pro Zeile
611    Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB),
612    also:
613    8192 Bytes pro Seite
614    ---------------------   =  146 Zeilen pro Seite (abgerundet)
615      52 Bytes pro Zeile
617    100.000 Datenzeilen
618    ------------------------  =  685 Datenbankseiten (aufgerundet)
619        158 Zeilen pro Seite
621    633 Datenbankseiten * 8192 Bytes pro Seite  =  5,185,536 bytes (5,2 MB)
623    Indexe beanspruchen nicht so viel Platz. Da sie jedoch die Daten
624    beinhalten, die sie indizieren, können auch sie sehr groß werden.
625    
626    NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig
627    Platz in Anspruch nehmen.
628    
629   4.6) Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum?
630   
631    Indexe werden nicht automatisch bei jeder Abfrage verwendet. Indexe
632    werden nur dann verwendet, wenn die abzufragende Tabelle eine
633    bestimmte Größe übersteigt, und die Abfrage nur eine kleine
634    Prozentzahl der Tabellenzeilen abfragt. Der Grund hierfür ist der,
635    dass die durch einen Index verursachten Festplattenzugriffe manchmal
636    länger dauern würden als ein einfaches Auslesen aller Tabellenzeilen
637    (sequentieller Scan).
638    
639    Um festzustellen, ob ein Index verwendet werden soll, braucht
640    PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden
641    durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand
642    der Statistiken kennt der Abfragenoptimierer die Anzahl der
643    Tabellenzeilen und kann besser entscheiden, ob Indexe verwendet werden
644    sollen. Statistiken sind auch bei der Ermittlung der optimalen
645    JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese
646    regelmässig durchgeführt werden, da sich der Inhalt einer Tabelle ja
647    auch verändert.
648    
649    Indexe werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs
650    verwendet. Ein sequentieller Scan mit anschließendem explizitem
651    Sortiervorgang ist normalerweise schneller als ein Index-Scan einer
652    großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen
653    mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein
654    kleiner Abschnitt der Tabelle zurückgeliefert wird.
655    
656    Sollte es danach aussehen, also ob der Optimierer irrtümlich einen
657    sequentiellen Scan ausführt, führen Sie SET enable_seqscan TO 'off'
658    aus und prüfen Sie, ob die Indexabfrage dadurch scheller geworden ist.
659    
660    Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können Indexe
661    nur unter bestimmten Umständen verwendet werden:
662      * Das Suchmuster muss sich an Anfang des Strings befinden, d.h.:
663           + LIKE-Suchmuster dürfen nicht mit % anfangen;
664           + ~ (reguläre Ausdrücke) müssen mit ^ anfangen.
665      * Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e])
666        beginnen.
667      * Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen
668        (z.B. ILIKE bzw. ~*), verwenden keine Indexe. Stattdessen können
669        funktionale Indexe verwendet werden, die im Punkt 4.8 beschrieben
670        werden.
671      * Die Standard-Locale "C" muss während der Datenbank-Initialisierung
672        mit initdb verwendet worden sein, da andere locales den
673        nächstgrößten Wert nicht ermitteln können. Es ist allerdings
674        möglich, einen besonderen text_pattern_ops-Index für solche Fälle
675        zu erstellen.
676        
677    In Versionen vor 8.0 werden Indexe oft nicht benutzt, wenn die
678    jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders
679    für Indexe auf Spalten mit den Datentypen INT2, INT8 und NUMERIC
680    
681   4.7) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine
682   Abfrage auswertet?
683   
684    Vgl. die EXPLAIN Man-Page.
685    
686   4.8) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer
687   Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende
688   ich einen Index bei solchen Suchabfragen?
689   
690    Der Operator ~ wendet einen regulären Ausdruck an und ~* wendet ihn
691    an, ohne die Groß- und Kleinschreibung zu beachten. Ebenso beachtet
692    LIKE die Groß- und Kleinschreibung, und ILIKE nicht.
693    
694    Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,
695    werden in der Regel so ausgedruckt:
696       SELECT *
697         FROM tabelle
698        WHERE LOWER(spalte) = 'abc'
700    Hier wird kein normaler Index benutzt. Legt man hingegen einen
701    funktionalen Index an, so wird er auf jeden Fall verwendet:
702       CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))
704    Falls der obige Index als einen UNIQUE-Index angelegt wird, können
705    keine Werte in die Spalte eingefügt werden, die sich nur durch ihre
706    Groß- und Kleinschreibung unterscheiden. Um Fehler zu vermeiden muß
707    ein CHECK-Constraint oder ein Trigger eingesetzt werden.
708    
709   4.9) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? Kann nach der
710   NULL-Belegung sortiert werden?
711   
712    Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.
713       SELECT *
714         FROM tabelle
715        WHERE spalte IS NULL
717    Um die Spalte danach zu sortieren, ob sie mit NULL belegt ist oder
718    nicht, verwenden Sie die Bedingungen IS NULL bzw. IS NOT NULL in der
719    ORDER BY-Klausel. Da Bedingungen, die wahr sind, höher als das
720    Gegenteil sortiert werden, bewirkt die folgende Abfrage, dass die
721    NULL-Spalten zuerst gelistet werden:
722       SELECT *
723         FROM tabelle
724     ORDER BY (spalte IS NOT NULL)
726   4.10) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
727   
728 Typ           interner Name   Bemerkungen
729 -------------------------------------------------
730 VARCHAR(n)    varchar         die Größe legt die Maximallänge fest; kein
731                               Auffüllen mit Leerzeichen
732 CHAR(n)       bpchar          mit Leerzeichen gefüllt bis zur angegebenen Länge
733 TEXT          text            keine obere Schranke für die Länge
734 BYTEA         bytea           Bytearray mit variabler Länge (auch für
735                               '\0'-Bytes geeignet)
736 "char"        char            1 Zeichen
738    Der interne Name kommt vor allem in den Systemkatalogen und in manchen
739    Fehlermeldungen vor.
740    
741    Die ersten vier Typen sind "varlena"-Typen (d.h. die ersten vier Bytes
742    geben die Länge an, gefolgt von den Daten). Daher ist der tatsächlich
743    belegte Platz immer etwas mehr als die deklarierte Feldgröße.
744    Allerdings wird unter Umständen auf diese Datentypen Datenkompression
745    durch das TOAST- Verfahren angewendet, womit der tatsächlich belegte
746    Platz auch geringer als erwartet ausfallen kann.
747    
748    Für die Speicherung von Zeichenketten variabler Länge empfiehlt sich
749    VARCHAR(n). Die maximale Länge eines VARCHAR(n)-Felds wird bei der
750    Tabellendefinition festgelegt. TEXT setzt keine Längengrenze,
751    allerdings gibt es eine systembedingte Obergrenze von 1 GB.
752    
753    CHAR(n) ist geeignet für die Speicherung von Zeichenketten, die alle
754    die gleiche Länge haben. Bitte beachten Sie, dass CHAR(n) automatisch
755    Zeichenketten bis zur definierten Feldlänge mit Leerzeichen ausfüllt,
756    während bei VARCHAR(n) nur die tatsächlich eingegebene Zeichenkette
757    gespeichert wird.
758    
759    BYTEA ist für binäre Daten, besonders für Werte, die NULL-Bytes haben.
760    
761    Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften
762    auf.
763    
764   4.11.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des
765   Wert?
766   
767    PostgreSQL bietet einen SERIAL-Datentyp. Dieser erzeugt automatisch
768    eine Sequenz auf die angegebene Spalte. Zum Beispiel:
769       CREATE TABLE person (
770           id   SERIAL,
771           name TEXT
772       )
774    wird automatisch in:
775       CREATE SEQUENCE person_id_seq;
776       CREATE TABLE person (
777         id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
778         name TEXT
779       );
781    umgewandelt.
782    
783    Die create_sequence Man-Page liefert weitere Informationen über
784    Sequenzen.
785    
786   4.11.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
787   
788    Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten
789    SERIAL-Wert von dem Sequenzobjekt vor der Auszuführung einer
790    INSERT-Anweisung anzufordern und ihn dann explizit in die
791    INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.11.1
792    könnte dieser Vorgang in einer Pseudosprache so aussehen:
793     new_id = output of execute("SELECT nextval('person_id_seq')");
794     execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
796    Danach stünde der neue Wert in der Variablen new_id für die Verwendung
797    in weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel
798    zur Tabelle 'person'). Bitte beachten Sie, dass der Name des
799    automatisch erstellten SEQUENCE-Objektes folgenden Name hat:
800    «table»_«serialcolumn»_seq wobei 'table' und 'serialcolumn' die Namen
801    der jeweils betreffenden Tabelle / Spalte darstellen.
802    
803    Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den
804    automatisch eingefügten SERIAL-Wert mit der currval()-Funktion
805    zurückgeben lassen:
806     execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
807     new_id = output of execute("SELECT currval('person_id_seq')");
809   4.11.3) Führt currval() zu einer Race-Condition mit anderen Nutzern?
810   
811    Nein. currval() liefert einen Wert zurück, der von Ihrer
812    Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur
813    Verfügung steht.
814    
815   4.11.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht
816   zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
817   Sequenz-/SERIAL-Spalte?
818   
819    Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern,
820    werden Sequenzen gerade nicht für andere Transaktionen gesperrt,
821    sondern die Sequenznummern werden den laufenden Transaktionen sofort
822    zugeteilt. Lücken in der Sequenznummerierung werden durch abgebrochene
823    Transaktionen verursacht.
824    
825   4.12) Was ist ein OID? Was ist ein CTID?
826   
827    Jede Zeile, die in PostgreSQL erzeugt wird, bekommt eine eindeutige
828    OID, sofern die Tabelle nicht mit der Option WITHOUT OIDS angelegt
829    wurde. OIDs sind automatisch zugewiesene 4-Byte-Integer, die innerhalb
830    der gesamten Datenbank einmalig sind. Allerdings laufen sie bei einem
831    Wert von ungefähr 4 Milliarden über. PostgreSQL verwendet OIDs, um
832    seine interne Systemtabellen zu verbinden.
833    
834    Um einmalige Idenfikatoren in Datentabellen zu erstellen, wird
835    allerdings empfohlen, statt OIDs Werte zu verwenden, die vonSERIAL-
836    Sequenzen erzeugt werden. SERIAL-Sequenzen sind innerhalb einer
837    Tabelle einmalig und daher weniger anfällig für Überläufe. Außerdem
838    können 8-Byte-Sequenzwerte mit SERIAL8 erzeugt werden.
839    
840    CTIDs werden benutzt, um bestimmte physikalische Zeilen durch Block
841    und Offset Werte zu identifizieren. CTIDs verändern sich, sobald
842    Zeilen verändert oder zurückgeladen werden. Sie werden in
843    Indexeinträgen benutzt um auf die physikalischen Zeilen zu zeigen.
844    
845   4.13) Wieso bekomme ich einen Fehler: "ERROR: Memory exhausted in
846   AllocSetAlloc()"?
847   
848    Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System
849    oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen.
850    Probieren Sie vor dem Start von postmaster folgendes:
851       ulimit -d 262144
852       limit datasize 256m
854    Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich
855    ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments
856    für Prozesse erhöht werden und eventuell die erfolgreiche Ausführung
857    der Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-CLient
858    haben, weil das Backend zu viele Daten zurückliefert, versuchen Sie
859    dies vor dem Start des SQL-Clients.
860    
861   4.14) Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft?
862   
863    Geben Sie in psql SELECT VERSION(); ein.
864    
865   4.15) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die
866   aktuelle Uhrzeit enthalten soll?
867   
868    Dazu verwenden Sie CURRENT_TIMESTAMP:
869       CREATE TABLE test (x INT, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
871   4.16) Wie führe ich eine OUTER JOIN durch?
872   
873    PostgreSQL unterstützt OUTER JOINs nach dem SQL- Standardsyntax. Hier
874    zwei Beispiele:
875       SELECT *
876         FROM tabelle_1 t1
877              LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)
879    bzw.:
880       SELECT *
881         FROM tabelle_1 t1
882              LEFT OUTER JOIN tabelle_2 t2 USING (spalte)
884    Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die
885    Spalte 'spalte' und geben außerdem alle unverknüpften Zeilen in
886    tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)
887    zurück. Ein RIGHT JOIN würde hingegen alle unverknüpften Zeilen in
888    tabelle_2 hinzufügen und ein FULL JOIN würde alle verknüpften Zeilen
889    sowie jeweils alle unverknüpften Zeilen aus den beiden Tabellen
890    zurückliefern. Die Angabe von OUTER ist nicht zwingend und kann in
891    LEFT, RIGHT und FULL-Verknüpfungen weggelassen werden. Normale
892    Verknüpfungen sind INNER JOINs.
893    
894   4.17) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?
895   
896    Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine
897    Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische
898    Systemkataloge lädt, ist eine datenbankübergreifende Abfrage nicht
899    möglich.
900    
901    contrib/dblink ist eine Erweiterung, die datenbankübergreifende
902    Abfragen über Funktionsaufrufe ermöglicht.
903    
904   4.18) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion zurückgeben
905   lassen?
906   
907    Funktionen können mehrere Zeilen und Spalten zurückgeben, vgl.:
908    http://www.postgresql.org/docs/techdocs.17.
909    
910   4.19) Warum bekomme ich eine Fehlermeldung wie "relation with OID ##### does
911   not exist" wenn ich temporäre Tabellen in PL/PgSQL-Funktionen benutze?
912   
913    In PostgreSQL-Versionen vor 8.3 verarbeitet PL/PgSQL Funktionen in
914    einer Cache. Dies hat eine unangenehme Nebenwirkung, nämlich dass wenn
915    eine PL/PgSQL-Funktion auf eine temporäre Tabelle zugreift, und diese
916    Tabelle anschließend gelöscht bzw. neu erstellt wird, die Funktion
917    fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte
918    temporäre Tabelle zeigen. Die Lösung für diese Probleme besteht darin,
919    in der PL/PgSQL- Funktion mittels EXECUTE auf temporäre Tabellen
920    zuzugreifen. Dies bewirkt, dass bei jedem Funktionsruf die betreffende
921    Abfrage neu geparst wird.
922    
923    Dieses Problem taucht in PostgreSQL 8.3 und späteren Versionen nicht
924    mehr auf.
925    
926   4.20) Welche Replikationslösungen gibt es?
927   
928    Der Begriff "replikation" umfasst mehrere verschiedene Technologien,
929    jede mit eigenen Vor- und Nachteilen.
930    
931    Mit "Master/slave"-Replikation werden Änderungen in einer
932    Hauptdatenbank durchgeführt und an "Sklaven" verteilt, die im
933    Nur-Lese-Modus arbeiten. Die populärste Lösung für PostgreSQL ist
934    Slony-I.
935    
936    "Multi-master replication" ermöglicht sowohl lesende als auch
937    schreibende Zugriffe über mehrere Datenbank-Server hinweg. Allerdings
938    hat diese Art von Replikation eine negative Auswirkung auf die
939    Performanz durch die Notwendigkeit, Änderungen zwischen Servern zu
940    synchronisieren. Pgcluster ist die populärste freie Lösung für
941    PostgreSQL.
942    
943    Es gibt auch einige kommerzielle und hardware-basierte
944    Replikationslösungen für verschiedene Arten der Replikation.
945    
946   4.21) Warum werden die Tabellen- und Spaltennamen in meiner Abfrage nicht
947   erkannt? Warum werden Großbuchstaben umgewandelt?
948   
949    Die häufigste Ursache ist die Verwendung von Gänsefüßchen bei der
950    Anlegung von Tabellen, z.B.:
951        CREATE TABLE "Tabelle"
952                    ("SPALTE1" INT)
954    Dadurch werden Tabellen- und Spaltennamen (sog. Identifikatoren) in
955    genau der Schreibweise gespeichert (vgl. Dokumentation), was dazu
956    führt, dass man sie danach immer in Gänsefüßchen angeben muss. Im
957    obigen Beispiel muss man also immer etwa SELECT * FROM "Tabelle"
958    verwenden. Um dieses Problem zu vermeiden, müssen Sie immer eines der
959    folgenden Punkte beachten:
960      * bei der Tabellenanlegung keine Gänsefüßchen verwenden;
961      * in Identifikatoren nur Kleinschreibung verwenden;
962      * immer Identifikatoren mit Gänsefüßchen versehen
963      _________________________________________________________________
964    
965   Anmerkungen des Übersetzers
966   
967    Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher
968    liegt die Übersetzung nicht immer auf dem aktuellsten Stand.
969    
970    Die aktuellste Version der deutschen Übersetzung befindet sich immer
971    unter http://sql-info.de/de/postgresql/FAQ_german.html. Diese
972    "Arbeitsversion" enthält eventuell Änderungen, die noch nicht auf der
973    PostgreSQL-Website eingebunden worden sind.
974    
975    Über Verbesserungshinweise und Korrekturvorschläge sowie
976    Verständnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch
977    allgemeine Fragen zu PostgreSQL gerne entgegen, verweise jedoch auf
978    die Mailing-Listen als schnelle und zuverlässige Anlaufstellen.