OSDN Git Service

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