~vcs-imports/mammoth-replicator/trunk

« back to all changes in this revision

Viewing changes to doc/FAQ_german

  • Committer: alvherre
  • Date: 2005-12-16 21:24:52 UTC
  • Revision ID: svn-v4:db760fc0-0f08-0410-9d63-cc6633f64896:trunk:1
Initial import of the REL8_0_3 sources from the Pgsql CVS repository.

Show diffs side-by-side

added added

removed removed

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