~ubuntu-branches/ubuntu/lucid/postgresql-8.4/lucid-proposed

« back to all changes in this revision

Viewing changes to doc/src/FAQ/FAQ_german.html

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2009-09-06 14:11:13 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20090906141113-qf5f3hkw7n036jfy
Tags: 8.4.1-1
* Urgency medium due to security fix.
* New upstream security/bug fix release:
  - Disallow "RESET ROLE" and "RESET SESSION AUTHORIZATION" inside
    security-definer functions. This covers a case that was missed in the
    previous patch that disallowed "SET ROLE" and "SET SESSION
    AUTHORIZATION" inside security-definer functions. [CVE-2007-6600]
  - Fix WAL page header initialization at the end of archive recovery.
    This could lead to failure to process the WAL in a subsequent archive
    recovery.
  - Fix "cannot make new WAL entries during recovery" error.
  - Fix problem that could make expired rows visible after a crash.
    This bug involved a page status bit potentially not being set
    correctly after a server crash.
  - Make "LOAD" of an already-loaded loadable module into a no-op.
    Formerly, "LOAD" would attempt to unload and re-load the module,
    but this is unsafe and not all that useful.
  - Make window function PARTITION BY and ORDER BY items always be
    interpreted as simple expressions.
    In 8.4.0 these lists were parsed following the rules used for
    top-level GROUP BY and ORDER BY lists. But this was not correct per
    the SQL standard, and it led to possible circularity.
  - Fix several errors in planning of semi-joins. These led to wrong query
    results in some cases where IN or EXISTS was used together with another
    join.
  - Fix handling of whole-row references to subqueries that are within
    an outer join. An example is SELECT COUNT(ss.-) FROM ... LEFT JOIN
    (SELECT ...) ss ON .... Here, ss.- would be treated as
    ROW(NULL,NULL,...) for null-extended join rows, which is not the same as
    a simple NULL.  Now it is treated as a simple NULL.
  - Fix locale handling with plperl. This bug could cause the server's
    locale setting to change when a plperl function is called, leading to
    data corruption.
  - Fix handling of reloptions to ensure setting one option doesn't
    force default values for others.
  - Ensure that a "fast shutdown" request will forcibly terminate open
    sessions, even if a "smart shutdown" was already in progress.
  - Avoid memory leak for array_agg() in GROUP BY queries.
  - Treat to_char(..., 'TH') as an uppercase ordinal suffix with
    'HH'/'HH12'.  It was previously handled as 'th'.
  - Include the fractional part in the result of EXTRACT(second) and
    EXTRACT(milliseconds) for time and time with time zone inputs.
    This has always worked for floating-point datetime configurations,
    but was broken in the integer datetime code.
  - Fix overflow for INTERVAL 'x ms' when "x" is more than 2 million
    and integer datetimes are in use.
  - Improve performance when processing toasted values in index scans.
    This is particularly useful for PostGIS.
  - Fix a typo that disabled commit_delay.
  - Output early-startup messages to "postmaster.log" if the server is
    started in silent mode. Previously such error messages were discarded,
    leading to difficulty in debugging.
  - Remove translated FAQs. They are now on the wiki. The main FAQ was moved
    to the wiki some time ago.
  - Fix pg_ctl to not go into an infinite loop if "postgresql.conf" is
    empty.
  - Fix several errors in pg_dump's --binary-upgrade mode. pg_dump
    --binary-upgrade is used by pg_migrator.
  - Fix "contrib/xml2"'s xslt_process() to properly handle the maximum
    number of parameters (twenty).
  - Improve robustness of libpq's code to recover from errors during
    "COPY FROM STDIN".
  - Avoid including conflicting readline and editline header files when
    both libraries are installed.
  - Work around gcc bug that causes "floating-point exception" instead
    of "division by zero" on some platforms.
* debian/control: Bump Standards-Version to 3.8.3 (no changes necessary).

Show diffs side-by-side

added added

removed removed

Lines of Context:
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>