Updated German FAQ, from Ian Barwick
authorBruce Momjian
Tue, 22 Oct 2002 21:44:51 +0000 (21:44 +0000)
committerBruce Momjian
Tue, 22 Oct 2002 21:44:51 +0000 (21:44 +0000)
doc/FAQ_german
doc/src/FAQ/FAQ_german.html

index 9a7a7d50f60c54665be73240d0ee4b86f0f93d1f..fb487b84f4bf72d55761205f0c6c70935823f092 100644 (file)
 
                   Häufig gestellte Fragen (FAQ) zu PostgreSQL
                                        
-   Last updated: Sat Jul 10 00:37:57 EDT 1999
+   Current maintainer: Bruce Momjian ([email protected]).
    
-   Current maintainer: Bruce Momjian ([email protected])
+   Deutsche Übersetzung von Ian Barwick ([email protected]).
+   Basiert teilweise auf einer Übersetzung von Karsten Schulz
    
-   Deutsche Übersetzung von Karsten Schulz ([email protected])
+   Letzte Aktualisierung der deutschen Übersetzung: Mo., den 21.10.2002,
+   23:00 CET
    
-   Letzte Aktualisierung der deutschen Übersetzung: Don, den 05.08.1999,
-   09:00 CET
-   
-   Die aktuellste Version dieses Dokuments kann auf der PostgreSQL
-   Website http://www.PostgreSQL.org angesehen werden.
-   
-   Linux-spezifische Fragen werden in
-   http://www.PostgreSQL.org/docs/faq-linux.html beantwortet (deutsche
-   Übersetzung in Arbeit!).
-   
-   Irix-spezifische Fragen werden in
-   http://www.PostgreSQL.org/docs/faq-irix.html beantwortet.
-   
-   HPUX-spezifische Fragen werden in
-   http://www.PostgreSQL.org/docs/faq-hpux.shtml beantwortet.
+   Die aktuellste Version dieses Dokuments liegt auf der PostgreSQL
+   Website:
+     * http://www.PostgreSQL.org/docs/faq-english.html (engl.)
+     * http://www.PostgreSQL.org/docs/faq-german.html (dt.)
+       
+   Übersetzungen dieses Dokuments in andere Sprachen sowie plattform-
+   spezifische FAQs können unter
+   http://www.PostgreSQL.org/users-lounge/docs/faq.html eingesehen
+   werden.
      _________________________________________________________________
    
                              Allgemeine Fragen
                                       
-   1.1) Was ist PostgreSQL?
-   1.2) Welches Copyright liegt auf PostgreSQL?
+   1.1) Was ist PostgreSQL? Wie wird es ausgesprochen?
+   1.2) Welchem Copyright unterliegt PostgreSQL?
    1.3) Auf welchen Unix-Plattformen läuft PostgreSQL?
    1.4) Welche Nicht-Unix-Versionen sind verfügbar?
    1.5) Woher bekomme ich PostgreSQL?
    1.6) Wo bekomme ich Support für PostgreSQL?
    1.7) Was ist die neueste Version von PostgreSQL?
-   1.8) Welche Dokumente sind für PostgreSQL verfügbar?
-   1.9) Wie erfahre ich etwas über bekannte Fehler oder fehlende
-   Eigenschaften von PostgreSQL?
+   1.8) Welche Dokumentation ist für PostgreSQL verfügbar?
+   1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
    1.10) Wie kann ich SQL lernen?
    1.11) Ist PostgreSQL Y2K (Jahr 2000) fähig?
-   1.12) Wie kann ich am Entwicklerteam teilnehmen?
+   1.12) Wie kann ich im Entwicklerteam mitarbeiten?
    1.13) Wie sende ich einen Fehler-Bericht?
    1.14) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
+   1.15) Wie kann ich PostgreSQL finanziell unterstützen?
    
                         Fragen zu Benutzerprogrammen
                                       
    2.1) Gibt es ODBC-Treiber für PostgreSQL?
-   2.2) Welche Werkzeuge gibt es, um PostgreSQL-Datenbanken über
-   Webseiten verfügbar zu machen?
+   2.2) Welche Werkzeuge gibt es, um Web-Seiten mit PostgreSQL zu
+   verbinden?
    2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle? Einen
    Report-Generator? Eine eingebaute Query-Schnittstelle?
-   2.4) Welche Sprachen sind für die Kommunikation mit PostgreSQL
-   verfügbar?
+   2.4) Welche Programmiersprachen können mit PostgreSQL kommunizieren?
    
                            Administrative Fragen
                                       
-   3.1) Warum schlägt initdb fehl?
-   3.2) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
-   3.3) Wenn ich den postmaster starte, bekomme ich einen Bad System Call
-   oder eine core dumped Meldung. Warum?
-   3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich eine
-   IpcMemoryCreate Fehlermeldungen. Warum?
-   3.5) Wenn ich versuche, den postmaster zu starten, bekomme ich eine
-   IpcSemaphoreCreate Fehlermeldungen. Warum?
-   3.6) Wie verhindere ich, daß andere Hosts auf meine PostgreSQL
-   Datenbanken zugreifen?
-   3.7) Warum kann ich mich nicht von einer anderen Maschine mit meiner
-   Datenbank verbinden?
-   3.8) Warum kann ich nicht als root auf die Datenbank zugreifen?
-   3.9) Alle meine Server stürzen bei gleichzeitigem Tabellenzugriff ab.
-   Warum?
-   3.10) Wie optimiere ich die Datenbankmaschine für bessere Leistung?
-   3.11) Welche Debugging/Fehlersuch-Hilfsmittel sind für PostgreSQL
-   verfügbar?
-   3.12) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
-   Verbindung versuche. Warum?
-   3.13) Was sind die pg_psort.XXX Dateien in meinem
-   Datenbank-Verzeichnis?
-   3.14) Wie richte ich eine Benutzergruppe (pg_group) ein?
+   3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
+   3.2) Wenn ich den postmaster starte, erhalte ich die Nachricht "Bad
+   System Call" bzw. "core dumped". Warum?
+   3.3) Wenn ich versuche, den postmaster zu starten, bekomme ich
+   "IpcMemoryCreate"-Fehlermeldungen. Warum?
+   3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich
+   "IpcSemaphoreCreate"-Fehlermeldungen. Warum?
+   3.5) Wie regle ich Zugriffe von anderen Rechnern?
+   3.6) Wie optimiere ich die Datenbank für bessere Leistung?
+   3.7) Welche Debugging-Funktionen sind bei PostgreSQL verfügbar?
+   3.8) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
+   Verbindung aufzubauen versuche. Warum?
+   3.9) Was befindet sich im Verzeichnis pgsql_tmp/?
+   3.10) Warum muß ich bei jeder neuen Hauptversion von PostgreSQL die
+   komplette Datenbank exportieren und anschließend reimportieren?
    
                              Fragen zum Betrieb
                                       
-   4.1) Das System scheint Kommata, Dezimalpunkte und Datumsformate
-   durcheinanderzubringen.
-   4.2) Was ist der genauer Unterschied zwischen Binary Cursors und
-   Normal Cursors?
-   4.3) Wie wähle ich per SELECT nur die ersten paar Zeilen in einem
-   Query aus?
-   4.4) Wie bekomme ich eine Liste der Tabellen oder anderen Dingen, die
-   ich in psql sehen kann
-   4.5) Wie entferne ich eine Spalte von einer Tabelle?
-   4.6) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine
+   4.1) Worin besteht der Unterschied zwischen Binary Cursors und Normal
+   Cursors?
+   4.2) Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen in
+   einer Abfrage aus?
+   4.3) Wie bekomme ich eine Liste der Tabellen oder anderen Dinge, die
+   ich in psql sehen kann?
+   4.4) Wie entferne ich eine Spalte aus einer Tabelle?
+   4.5) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine
    Datenbank?
-   4.7) Wieviel Plattenplatz benötigt eine Datenbank zur Speicherung
-   einer Datendatei mit zeilenweisen Datensätzen?
-   4.8) Wie finde ich heraus, welche Indizes oder Operationen in der
+   4.6) Wieviel Plattenplatz wird benötigt, um die Daten aus einer
+   typischen Textdatei abzuspeichern?
+   4.7) Wie finde ich heraus, welche Indizes oder Operationen in der
    Datenbank definiert sind?
-   4.9) Meine Queries sind langsam oder nutzen die Indizes nicht. Warum?
-   4.10) Auf welche Weise kann ich sehen, wie der Query-Optimierer meine
-   Abfrage auswertet?
-   4.11) Was ist ein R-Tree Index?
-   4.12) Was ist "Genetic Query Optimization"?
-   4.13) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei
-   einer Suche mit Ignorierung der Groß- und Kleinschreibweisen?
-   4.14) Wie ermittle ich in einem Query, daß ein Feld NULL ist?
-   4.15) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
-   4.16) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung
-   des Inhalts?
-   4.17) Was ist ein Oid? Was ist ein Tid?
-   4.18) Was ist die Bedeutung der verschiedenen Ausdrücke, die in
+   4.8) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?
+   4.9) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer
+   ("GEQO") meine Abfrage auswertet?
+   4.10) Was ist ein R-Tree Index?
+   4.11) Was ist der "Genetic Query Optimizer"?
+   4.12) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei
+   einer Suche, bei der Groß- und Kleinschreibweisen ignoriert werden?
+   Wie verwende ich bei solchen Suchabfragen einen Index?
+   4.13) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
+   4.14) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
+   4.15.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung
+   des Wertes?
+   4.15.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
+   4.15.3) Führen currval() und nextval() zu einer Race-Condition mit
+   anderen Nutzern?
+   4.15.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch
+   nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
+   Sequenz-/SERIAL-Spalte?
+   4.16) Was ist ein OID? Was ist ein TID?
+   4.17) Welche Bedeutung haben die verschiedenen Ausdrücke, die in
    PostgreSQL benutzt werden (z.B. attribute, class,...)?
-   4.19) Wieso bekomme ich einen Fehler: "FATAL: palloc failure: memory
-   exhausted?"
-   4.20) Wie kann ich feststellen, welche PostgreSQL-Version ich laufen
-   habe?
-   4.21) Beim Arbeiten mit "Large-Objects" kommt die Fehlermeldung:
-   invalid large obj descriptor. Warum?
+   4.18) Wieso bekomme ich den Fehler: "FATAL: Memory exhausted in
+   AllocSetAlloc()"?
+   4.19) Wie kann ich feststellen, welche PostgreSQL-Version bei mir
+   läuft?
+   4.20) Bei "large-object"-Operationen kommt die Fehlermeldung: "invalid
+   large obj descriptor". Warum?
+   4.21) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die
+   aktuelle Uhrzeit enthalten soll?
+   4.22) Warum sind meine Unterabfragen (subqueries), die IN verwenden,
+   so langsam?
+   4.23) Wie führe ich einen OUTER JOIN durch?
+   4.24) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?
+   4.25) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
+   zurückgeben lassen?
+   4.26) Warum kann ich temporäre Tabellen in PL/PgSQL-Funktionen nicht
+   zuverlässig erstellen bzw. löschen?
+   4.27) Welche Möglichkeiten zur Datenbank-Replikation gibt es?
+   4.28) Welche Möglichkeiten zur Verschlüsselung gibt es?
    
                             PostgreSQL erweitern
                                       
    5.1) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich
    sie in psql aufrufe, kommt ein core dump. Warum?
-   5.2) Was bedeutet die Meldung: NOTICE:PortalHeapMemoryFree: 0x402251d0
-   not in alloc set!?
-   5.3) Wie kann ich ein paar elegante neue Feldtypen und Funktionen zu
-   PostgreSQL beitragen?
-   5.4) Wie schreibe ich eine Funktion in C, die ein Tuple zurückliefert?
-   5.5) Ich habe eine der Quellendateien geändert. Warum macht sich die
-   Änderung beim erneuten Compilerlauf nicht bemerkbar?
+   5.2) Wie kann ich praktische neue Typen und Funktionen zu PostgreSQL
+   hinzufügen?
+   5.3) Wie schreibe ich eine Funktion in C, die einen Tupel
+   zurückliefert?
+   5.4) Ich habe eine der Quellendateien geändert. Warum macht sich die
+   Änderung beim erneuten Kompilieren nicht bemerkbar?
      _________________________________________________________________
    
                              Allgemeine Fragen
                                       
-    1.1) Was ist PostgreSQL?
-    
-   PostgreSQL ist eine Verbesserung des
-   POSTGRES-Datenbank-Managementsystems, ein "Next-Generation"
-   DBMS-Forschungsprototyp. Während PostgreSQL das leistungsfähige
-   Datenmodell und die reichhaltigen Datentypen von POSTGRES beibehält,
-   ersetzt es die PostQuel-Abfragesprache durch eine ausgedehnte
-   Teilmenge von SQL. PostgreSQL ist frei und der komplette Quellcode ist
-   verfügbar.
-   
-   Die PostgreSQL-Entwicklung wird von einem Team von Internet-Entwickler
-   durchgeführt, die alle an der PostgreSQL-Entwicklungs-Mailingliste
-   teilnehmen. Der aktuelle Koordinator ist Marc G. Fournier
-   ([email protected]) (siehe unten, wie man sich anmelden kann).
-   Dieses Team ist jetzt für alle aktuellen und zukünftigen Entwicklungen
-   von PostgreSQL verantwortlich.
+    1.1) Was ist PostgreSQL? Wie wird es ausgesprochen?
+    
+   Die (englische) Aussprache ist "Post-Gres-Q-L".
+   
+   PostgreSQL ist eine Weiterentwicklung des POSTGRES-Datenbank-Systems,
+   eines zukunftsweisenden DBMS-Forschungsprototyps. Während PostgreSQL
+   das leistungsfähige Datenmodell und die reichhaltigen Datentypen von
+   POSTGRES beibehält, ersetzt es dessen PostQuel-Abfragesprache durch
+   eine erweiterte Teilmenge von SQL. PostgreSQL und dessen kompletter
+   Quellcode sind frei und öffentlich verfügbar.
+   
+   Die PostgreSQL-Entwicklung wird von einem Entwickler-Team
+   durchgeführt, die alle Teilnehmer der
+   PostgreSQL-Entwicklungs-Mailingliste sind. Der aktuelle Koordinator
+   ist Marc G. Fournier ([email protected]) (Anmeldemöglichkeit:
+   siehe unten). Dieses Team ist für die Gesamtentwicklung von PostgreSQL
+   verantwortlich.
    
    Die Autoren von PostgreSQL 1.01 waren Andrew Yu und Jolly Chen. Viele
-   andere haben zur Portierung, zu den Tests, zur Fehlersuche und zur
+   andere haben zur Portierung, zum Testen, zur Fehlersuche und zur
    Verbesserung des Codes beigetragen. Der ursprüngliche Postgres-Code,
-   von dem PostgreSQL abstammt, ist auf die Bemühungen von vielen
-   Studierenden und Diplomanden, sowie Programmierern, die unter der
-   Weisung des Professors Michael Stonebraker an der Universität von
-   Kalifornien, Berkeley arbeiteteten, zurückzuführen.
+   von dem PostgreSQL abstammt, ist auf die Arbeit von vielen
+   Studierenden und Diplomanden sowie Programmierern zurückzuführen, die
+   unter der Leitung des Professors Michael Stonebraker an der
+   Universität von Kalifornien, Berkeley arbeiteten.
    
-   Der ursprüngliche Name der Software bei Berkeley war Postgres. Als die
+   Der ursprüngliche Name der Software in Berkeley war Postgres. Als die
    SQL-Funktionalität 1995 hinzugefügt wurde, wurde sein Name zu
-   Postgres95 geändert. Der Name wurde Ende 1996 zu PostgreSQL geändert.
+   Postgres95 geändert. Der Name wurde Ende 1996 in PostgreSQL geändert.
    
-    1.2) Welches Copyright liegt auf PostgreSQL?
+    1.2).Welchem Copyright unterliegt PostgreSQL?
     
-   PostgreSQL steht unter folgendem COPYRIGHT (Originaltext):
+   PostgreSQL unterliegt folgendem COPYRIGHT (Originaltext):
    
    PostgreSQL Data Base Management System
    
-   Copyright (c) 1994-6 Regents of the University of California
+   Portions copyright (c) 1996-2002, PostgreSQL Global Development Group
+   Portions Copyright (c) 1994-6 Regents of the University of California
    
    Permission to use, copy, modify, and distribute this software and its
    documentation for any purpose, without fee, and without a written
    CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
    UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
    
-   Es gilt die Copyright-Klausel im Original! Informativ folgt hier eine
-   Übersetzung. Die Übersetzung besitzt keinerlei rechtlichen Status.
-   Insbesondere kann sich niemand auf diese Übersetzung berufen:
-   
-   PostgreSQL Datenbank Management System
-   
-   Copyright (c) 1994-6 Regents of the University of California
-   
-   Die Erlaubnis, diese Software und seine Unterlagen für jeden möglichen
-   Zweck, ohne Gebühr und ohne eine schriftliche Vereinbarung zu
-   benutzen, zu kopieren, zu ändern und zu verteilen wird hiermit
-   bewilligt, vorausgesetzt daß der oben genannte Urheberrechtsvermerk
-   und dieser Paragraph und die folgenden zwei Paragraphen in allen
-   Kopien erscheinen.
-   
-   IN KEINEM FALL IST DIE UNIVERSITÄT VON KALIFORNIEN GEGENÜBER JEDEM
-   MÖGLICHEN BETEILIGTEN FÜR DIE DIREKTEN, INDIREKTEN, SPEZIELLEN,
-   BEILÄUFIGEN ODER FOLGESCHÄDEN, EINSCHLIEßLICH DER VERLORENEN PROFITE
-   VERANTWORTLICH, DIE AUS DEM GEBRAUCH VON DIESER SOFTWARE UND SEINEN
-   UNTERLAGEN HERAUS ENTSTEHEN, SELBST WENN DIE UNIVERSITÄT VON
-   KALIFORNIEN VON DER MÖGLICHKEIT SOLCHEN SCHADENS BENACHRICHTIGT WORDEN
-   IST.
-   
-   DIE UNIVERSITÄT VON KALIFORNIEN LEHNT SPEZIELL ALLE MÖGLICHE GARANTIEN
-   AB, EINSCHLIESSLICH, ABER NICHT BEGRENZT AUF, DIE IMPLIZIERTEN
-   GARANTIEN VON GESCHÄFTSNUTZEN UND EIGNUNG ZU EINEM BESTIMMTEN ZWECK.
-   DIE SOFTWARE, DIE NACHSTEHEND BEREITGESTELLT WIRD, BASIERT AUF EINER
-   "SO WIE SIE IST"-GRUNDLAGE, UND DIE UNIVERSITÄT VON KALIFORNIEN HAT
-   KEINE VERPFLICHTUNGEN, WARTUNG, SUPPORT, AKTUALISIERUNGSVORGÄNGE,
-   VERBESSERUNGEN ODER ÄNDERUNGEN ZUR VERFÜGUNG ZU STELLEN.
+   Bei der obigen Lizenz handelt es sich um die BSD-Lizenz, die klassiche
+   Open-Source-Lizenz. Sie schränkt die Verwendung des Quellcodes in
+   keine Weise ein. Wir mögen diese Lizenz und haben nicht vor, sie zu
+   ändern.
+   
+   Es gilt die Copyright-Klausel im Original!
    
     1.3) Auf welchen Unix-Plattformen läuft PostgreSQL?
     
-   Die Autoren haben PostgreSQL auf folgenden Plattformen kompiliert und
-   getestet (einige dieser Kompilierungen benötigen den C-Compiler gcc):
-     * aix - IBM auf AIX 3.2.5 or 4.x
-     * alpha - DEC Alpha AXP auf Digital Unix 2.0, 3.2, 4.0
-     * BSD44_derived - OS abgeleitet von 4.4-lite BSD (NetBSD, FreeBSD)
-     * bsdi - BSD/OS 2.x, 3.x, 4.x
-     * dgux - DG/UX 5.4R4.11
-     * hpux - HP PA-RISC auf HP-UX 9.*, 10.*
-     * i386_solaris - i386 Solaris
-     * irix5 - SGI MIPS auf IRIX 5.3
-     * linux - Intel i86 Alpha SPARC PPC M68k
-     * sco - SCO 3.2v5 Unixware
-     * sparc_solaris - SUN SPARC auf Solaris 2.4, 2.5, 2.5.1
-     * sunos4 - SUN SPARC auf SunOS 4.1.3
-     * svr4 - Intel x86 auf Intel SVR4 and MIPS
-     * ultrix4 - DEC MIPS auf Ultrix 4.4
-       
-    1.4) Welche Nicht-Unix-Versionen sind verfügbar?
+   Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen
+   Plattform eingesetzt werden. Diejenigen Plattformen, die bei der
+   jeweiligen Versionsfreigabe getestet wurden, sind in den
+   Installations- Anleitungen aufgelistet.
+   
+    1.4) Welche Nicht-Unix-Portierungen sind verfügbar?
     
-   Es ist möglich, die libpq C-Bibliothek, psql und andere Schnittstellen
-   und Binaries zu kompilieren, um sie auf der MS-Windows-Plattform
-   laufen zu lassen. In diesem Fall läuft der Client auf MS-Windows und
-   steht über TCP/IP mit einem Server in Verbindung, der auf einer
-   unserer unterstützten Unixplattformen läuft. Es gibt die Datei
-   win31.mak in der Distribution, um die Win32 libpq-Bibliothek und psql
-   zu erzeugen.
+   Client
+   
+   Es ist möglich, die libpq C-Bibliothek, psql sowie andere Client-
+   Anwendungen und Schnittstellen für den Einsatz auf
+   MS-Windows-Plattformen zu kompilieren. In diesem Fall läuft der Client
+   auf MS-Windows und steht über TCP/IP mit einem Server in Verbindung,
+   der auf einer der unterstützten Unix-Plattformen läuft. Die
+   Distribution enthält die Datei win32.mak, mit der Win32
+   libpq-Bibliothek und psql erzeugt werden können.
+   
+   Server
    
-   Der Datenbankserver arbeitet jetzt auch unter Benutzung der Cygnus
-   Unix/NT-Porting-Bibliotheken auf Windows NT. Siehe auch
-   pgsql/doc/README.NT in der Distribution.
+   Der Datenbankserver selber kann mit Hilfe der Cygwin-Umgebung
+   (Unix/NT-Portierungsbibliotheken) auf Windows NT/2000 zum Laufen
+   gebracht werden. Hierzu bitte lesen Sie die in der Distribution
+   enthaltene Datei pgsql/doc/FAQ_MSWIN oder die MS-Windows-FAQ unter
+   http://www.PostgreSQL.org/docs/faq-mswin.html.
    
-   Es gibt eine weitere Portierung, die U/Win benutzt bei
-   http://surya.wipro.com/uwin/ported.html.
+   Eine eigenständige Portierung auf MS Win NT/2000/XP befindet sich in
+   Vorbereitung.
    
     1.5) Woher bekomme ich PostgreSQL?
     
-   Die erste Anlaufadresse für PostgreSQL ist der ftp-Server
-   ftp://ftp.postgreSQL.org/pub
-   
-   Die entsprechenden Spiegelserver sind auf der Hauptwebseite
-   aufgelistet.
+   Der zentrale FTP-Server für PostgreSQL ist der ftp-Server
+   ftp://ftp.postgreSQL.org/pub. Weitere Mirror-Sites sind auf der
+   PostgreSQL-Website aufgelistet.
    
     1.6) Wo bekomme ich Support für PostgreSQL?
     
-   Es gibt keinen offiziellen Support für PostgreSQL von der Universität
-   von Kalifornien, Berkeley. Der Support wird durch freiwilligen Einsatz
-   geleistet.
-   
-   Die Mailing-Liste ist: [email protected]. Die Liste ist für
-   PostgreSQL betreffende Themen vorbehalten. Um sich anzumelden, sende
-   eine Email mit folgenden Zeilen im Text (nicht in der Betreffzeile):
+   Die zentrale (englischsprachige) Mailing-Liste ist:
+   mailto:[email protected] .
+   
+   Die Liste ist Themen vorbehalten, die PostgreSQL betreffen. Die
+   Anmeldung erfolgt mit einer Email an die Adresse
+   [email protected] mit folgenden Zeilen im Text
+   (nicht in der Betreffzeile):
+    subscribe
+    end
 
-        subscribe
-        end
+   Es gibt auch eine Digest-Liste (eine Liste, die Mails zusammengefasst
+   sendet). Um sich an dieser Digest-Liste anzumelden, senden Sie eine
+   Email an [email protected] mit folgendem
+   Text:
+    subscribe
+    end
 
-   an [email protected].
-   
-   Es gibt auch eine Digest-Liste (Eine Liste, die Mails zusammengefasst
-   sendet). Um sich an dieser Digestliste anzumelden, sende eine Email
-   an: [email protected] mit folgendem Text:
+   Es gibt noch die Bug-Mailingliste. Die Anmeldung für diese Liste
+   erfolgt durch eine Email an [email protected] mit folgendem
+   Text:
+    subscribe
+    end
 
-        subscribe
-        end
+   Die Entwickler-Mailingliste kann mit einer Email an
+   [email protected] abonniert werden. Die Email muß
+   ebenfalls folgenden Text enthalten:
+    subscribe
+    end
 
-   Die Digests werden an die Mitglieder der Liste geschickt, wenn ca.
-   30kB an Mails zusammengekommen sind.
+   Weitere Mailinglisten und Informationen zu PostgreSQL befinden sich
+   auf der PostgreSQL-Homepage:
    
-   Die Bug-Mailingliste ist verfübar. Um sich an dieser Liste anzumelden,
-   sende eine Email an [email protected] mit folgendem Text:
-   
-
-        subscribe
-        end
-
-   Es gibt ebenfalls eine Entwickler-Diskussionsliste. Um sich an dieser
-   Liste anzumelden, sende eine Email an [email protected]
-   mit diesem Text:
-   
-
-        subscribe
-        end
-
-   Weitere Mailinglisten und Informationen zu PostgreSQL können auf der
-   PostgreSQL-Homepage im WWW gefunden werden:
-   
-     http://postgreSQL.org
+     http://www.PostgreSQL.org
      
-   Es gibt außerdem einen IRC-Channel im EFNet, Kanal #PostgreSQL. Bruce
-   nutzt den Unix-Befehl: irc -c '#PostgreSQL' "$USER" irc.phoenix.net um
-   teilzunehmen
+   Es gibt außerdem einen IRC-Channel im EFNet, Channel #PostgreSQL. Der
+   FAQ-Autor Bruce Momjian nutzt den Unix-Befehl: irc -c '#PostgreSQL'
+   "$USER" irc.phoenix.net um daran teilzunehmen.
    
-   Kommerzieller Support für PostgreSQL ist bei http://www.pgsql.com/
-   verfügbar
+   Eine Liste von Unternehmen, die Support für PostgreSQL auf
+   kommerzieller Basis leisten, kann unter
+   http://www.PostgreSQL.org/users-lounge/commercial-support.html
+   eingesehen werden.
    
     1.7) Was ist die neueste Version von PostgreSQL?
     
-   Das neueste Release von PostgreSQL ist die Version 6.5.
+   Die neueste Version von PostgreSQL ist 7.2.3.
    
-   Wir planen alle 4 Monate Hauptreleases herauszugeben.
+   Wir planen alle 4 Monate eine neue Version herauszugeben.
    
-    1.8) Welche Dokumente sind für PostgreSQL verfügbar?
+    1.8) Welche Dokumentation ist für PostgreSQL verfügbar?
     
    Einige Handbücher, Man-Pages und einige kleine Testprogramme sind in
-   der Distribution enthalten. Siehe im /doc-Verzeichnis.
+   der Distribution enthalten. Siehe das /doc-Verzeichnis. Ausserdem sind
+   alle Handbücher online unter
+   http://www.PostgreSQL.org/users-lounge/docs/ verfügbar.
    
-   psql hat einige nette \d-Befehle, um Informationen über Typen,
-   Operatoren, Funktionen, Aggregate, usw. zu zeigen.
+   Zwei Bücher zu PostgreSQL sind online verfügbar unter
+   http://www.PostgreSQL.org/docs/awbook.html und
+   http://www.commandprompt.com/ppbook/ .
+   
+   Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter
+   http://www.ca.PostgreSQL.org/books/ Diverse technische Artikel
+   befinden sich unter http://techdocs.PostgreSQL.org/ .
    
-   Die Website enthält sogar noch mehr Unterlagen.
+   psql hat einige nützliche \d-Befehle, um Informationen über Typen,
+   Operatoren, Funktionen, Aggregate, usw. zu zeigen.
    
-    1.9) Wie erfahre ich etwas über bekannte Fehler oder fehlende Eigenschaften
-    von PostgreSQL?
+    1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
     
-   PostgreSQL unterstützt eine ausgedehnte Untermenge von SQL-92. Siehe
-   unser TODO für eine Auflistung der bekannten Fehler, fehlende
-   Eigenschaften und zukünftige Pläne.
+   PostgreSQL unterstützt eine erweiterte Teilmenge von SQL-92. Siehe
+   unsere TODO-Liste unter http://developer.PostgreSQL.org/todo.php für
+   eine Auflistung der bekannten Bugs, fehlenden Features und zukünftigen
+   Pläne.
    
     1.10) Wie kann ich SQL lernen?
     
-   Es gibt nette SQL-Tutorials bei http://w3.one.net/~jhoffman/sqltut.htm
-   und bei
-   http://ourworld.compuserve.com/homepages/Graeme_Birchall/DB2_COOK.HTM.
+   Das PostgreSQL Book auf http://www.PostgreSQL.org/docs/awbook.html
+   bietet eine Einführung in SQL. Ein weiteres PostgreSQL-Buch befindet
+   sich unter http://www.commandprompt.com/ppbook . Es gibt zudem nette
+   Tutorials unter http://www.intermedia.net/support/sql/sqltut.shtm ,
+   http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
+   und http://sqlcourse.com .
    
-   Viele unserer User mögen The Practical SQL Handbook, Bowman et al.,
-   Addison Wesley.
+   Eine weitere Empfehlung ist "Teach Yourself SQL in 21 Days, Second
+   Edition", es ist unter http://members.tripod.com/er4ebus/sql/index.htm
+   erhältlich.
+   
+   Viele PostgreSQL-Anwender mögen "The Practical SQL Handbook" (Bowman
+   et al., Addison Wesley). Andere dagegen mögen "The Complete Reference
+   SQL" (Groff et al., McGraw-Hill).
    
     1.11) Ist PostgreSQL Y2K (Jahr 2000) fähig?
     
    Ja, wir können Datumsangaben nach dem Jahr 2000 n.Chr. und vor 2000
    v.Chr. leicht verarbeiten.
    
-    1.12) Wie kann ich am Entwicklerteam teilnehmen?
+    1.12) Wie kann ich im Entwicklerteam mitarbeiten?
     
-   Zuerst lade die neuesten Quellen herunter und lies die
+   Zuerst laden Sie die neuesten Quellen herunter und lesen Sie die
    PostgreSQL-Entwicklerunterlagen auf unserer Website oder in der
-   Distribution. Zweitens melde Dich zu den Mailinglisten pgsql-hackers
-   und pgsql-patches an. Drittens sende qualitativ hochwertige
-   Programmänderungen an die pgsql-patches Mailingliste.
+   Distribution. Dann melden Sie sich zu den Entwickler-Mailinglisten
+   pgsql-hackers und pgsql-patches an. Anschließend senden Sie qualitativ
+   hochwertige Patches an die pgsql-patches Mailingliste.
    
-   Es gibt ungefähr ein Dutzend Leute, die das commit-Recht im
-   PostgreSQL-CVS Archiv haben. Alle haben so viele hochwertige Patches
-   eingebracht, daß es schwer für die CVS-Verwalter war, mitzuhalten. Und
-   wir hatten das Vertrauen, daß die Änderungen, die sie festlegten, sehr
-   wahrscheinlich von hoher Qualität sind.
+   Es gibt ungefähr ein Dutzend Leute, die das commit-Recht im PostgreSQL
+   CVS-Archiv haben. Alle haben derart viele hochwertige Patches
+   eingebracht, dass es für die CVS-Verwalter schwer war, mitzuhalten.
+   Und wir hatten Vertrauen, dass die von ihnen festgelegten Änderungen
+   aller Wahrscheinlichkeit nach von hoher Qualität sind.
    
-    1.13) Wie sende ich einen Fehler-Bericht?
+    1.13) Wie sende ich einen Fehlerbericht?
     
-   Fülle die "Fehler-Vorlage"-Datei (bug.template im doc-Verzeichnis) aus
-   und sende sie an: [email protected]
+   Bitte besuchen Sie die PostgreSQL-BugTool-Seite
+   http://www.PostgreSQL.org/bugs/, die Hinweise und Anleitungen zur
+   Einreichung von Fehlerberichten enthält.
    
-   Überprüfe auch den ftp-Server ftp://ftp.postgreSQL.org/pub, um
+   Überprüfe auch den ftp-Server ftp://ftp.PostgreSQL.org/pub, um
    nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches
    gibt.
    
    Leistung, Zuverlässigkeit, Support und Preis.
    
    Eigenschaften
-          PostgreSQL hat die meisten Eigenschaften, die in großen
-          kommerziellen DBMS's, wie Transaktionen, Sub-SELECTs, Trigger,
-          Views und verfeinertes Locking, vorhanden sind. Wir haben
-          einige Eigenschaften, die andere nicht haben, wie
-          benutzerbestimmte Typen, Vererbung, Regeln, und die
-          Multi-Versionen-Steuerung zum Verringern von konkurrierenden
-          Locks. Wir haben keine referentielle Integrität von externen
-          Schlüsseln oder Outer Joins, aber wir arbeiten an diesen Dingen
-          für unser nächstes Release.
-          
-   Leistung
-          PostgreSQL läuft in zwei Modi. Im normalen fsync-Modus wird
-          jede komplette Transaktion auf die Platte geschrieben und
-          garantiert, daß, selbst wenn das Betriebssystem abstürzt und
-          der Strom ausfällt, die Daten sicher gespeichert wurden. In
-          diesem Modus sind wir langsamer als die meisten kommerziellen
-          Datenbanken, zum Teil, weil wenige von ihnen solch eine
-          konservatives Methode der Datenspeicherung in ihren
-          Standardbetriebsmodi betreiben.
-          
-          Im no-fsync-Modus sind wir normalerweise schneller als
-          kommerzielle Datenbanken. In diesem Modus kann ein
-          Betriebssystemabsturz jedoch Datenkorruption zur Folge haben.
-          Wir arbeiten daran, einen Zwischenmodus zur Verfügung zu
-          stellen, der unter weniger Leistungseinbuße leidet als der
-          fsync-Modus und die Datenintegrität innerhalb 30 Sekunden im
-          Falle eines Betriebssystemabsturzes erlaubt. Der Modus ist
-          durch den Datenbankverwalter auswählbar.
+          PostgreSQL besitt die meisten Eigenschaften - wie
+          Transaktionen, Unterabfragen (Subqueries), Trigger, Views und
+          verfeinertes Locking - die bei großen kommerziellen DBMS
+          vorhanden sind. Es bietet außerdem einige anderen
+          Eigenschaften, die diese nicht haben, wie benutzerbestimmte
+          Typen, Vererbung, Regeln, und die Multi-Versionen-Steuerung zum
+          Verringern konkurrierender Locks.
           
-          Im Vergleich zu MySQL oder schlankeren Datenbanksystemen sind
-          wir hinsichtlich INSERTs/UPDATEs langsamer, weil wir einen
-          Transaktions-Overhead haben. Selbstverständlich hat MySQL kaum
-          eine der Eigenschaften, die oben im Kapitel Eigenschaften
-          erwähnt werden. PostgreSQL ist für Flexibilität und gute
-          Eigenschaften designed, trotzdem fahren wir fort, die Leistung
-          durch Profiling und Quellcodeanalyse zu verbessern.
+   Performanz
+          PostgreSQL weist eine Performanz auf, die mit der von
+          kommerziellen und anderen Open-Source-Datenbanken vergleichbar
+          ist. In manchen Bereichen ist es schneller, in anderen
+          langsamen. Im Vergleich zu MySQL oder abgespeckten
+          Datenbank-Systemen sind INSERT- und UPDATE-Anweisungen aufgrund
+          des Transaktionsaufwands langsamer. MySQL hat allerdings keine
+          der oben erwähnten Eigenschaften. PostgreSQL setzt auf
+          Zuverlässigkeit und Funktionsumfang, obwohl selbstredend
+          ständig an Performanz- Verbesserungen gearbeitet wird. Ein
+          interessanter Vergleich zwischen PostgreSQL und MySQL befindet
+          sich unter dieser URL:
+          http://openacs.org/philosophy/why-not-mysql.html
           
    Zuverlässigkeit
-          Wir stellen fest, daß ein DBMS zuverlässig sein muß, oder es
-          ist wertlos. Wir bemühen uns, gut geprüften, beständigen Code
-          freizugeben, der nur ein Minimum an Programmfehler hat. Jede
-          Freigabe hat mindestens einen Monat Betatestphase hinter sich,
-          und unsere Freigabehistorie zeigt, daß wir stabile, solide
-          Versionen freigeben, die im Produktionsbetrieb genutzt werden
-          können. Wir glauben, daß wir im Vergleich mit anderer
-          Datenbanksoftware vorteilhaft dastehen.
+          Wir stellen fest, dass ein DBMS wertlos ist, wenn es nicht
+          zuverlässig arbeitet. Wir bemühen uns, nur streng geprüften,
+          beständigen Code freizugeben, der nur ein Minimum an
+          Programmfehler aufweist. Jede Freigabe hat mindestens einen
+          Monat Betatest-Phase hinter sich, und unsere Freigabehistorie
+          beweist, dass wir stabile, solide Versionen freigeben, die im
+          Produktionsbetrieb genutzt werden können. Wir glauben, dass wir
+          im Vergleich mit anderer Datenbanksoftware vorteilhaft
+          dastehen.
           
    Support
-          Unsere Mailingliste stellt eine große Gruppe Entwickler und
-          Benutzer zur Behebung aller möglichen anzutreffenden Probleme
-          zur Verfügung. Wir können nicht immer eine Fehlerbehebung
-          garantieren, kommerzielle DBMS's tun dies aber auch nicht.
-          Direkter Zugriff zu den Entwicklern, zur Benutzergemeinschaft,
-          zu den Handbüchern und zum Quellcode bietet häufig
-          höherwertigen PostgreSQL-Support im Vergleich zu anderen
-          DBMS's. Es gibt den kommerziellen "Pro-Ereignis"-Support, der
-          für diejenigen bereitgestellt wird, die ihn benötigen. (siehe
-          Support-Faq),
+          Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit
+          einer großen Gruppe von Entwicklern und Benutzern mögliche
+          Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung
+          garantieren, kommerzielle DBMS tun dies aber auch nicht. Der
+          direkte Kontakt zur Entwickler- und Benutzergemeinschaft, der
+          Zugriff auf die Handbücher und auf den Quellcode ermöglicht
+          einen im Vergleich zu anderen DBMS höherwertigen Support. Es
+          gibt jedoch auch Anbieter von kommerziellen Support-Leistungen
+          (siehe FAQ-Punkt 1.6).
           
    Preis
-          PostgrSQL ist frei verfügbar, sowohl für die kommerzielle, wie
-          für die nicht-kommerzielle Nutzung. Du kannst Deinen Code fast
-          ohne Beschränkungen zu unserem hinzufügen. Die einzigen
-          Beschränkungen werden in der BSD-artigen Lizenz weiter oben
-          aufgeführt.
+          PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie
+          für die nicht-kommerzielle Nutzung. Sie können den
+          PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in
+          der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr
+          Produkt integrieren.
+          
+    1.15) Wie kann ich PostgreSQL finanziell unterstützen?
+    
+   PostgreSQL hat seit dem Anfang in 1996 eine exzellente Infrastruktur.
+   Dies ist Marc Fournier zu verdanken, der sie über die Jahre hinweg
+   geschaffen und gepflegt hat.
+   
+   Eine hochwertige Infrastruktur ist für ein Open-Source-Projekt wie
+   dieses sehr wichtig. Sie verhindert Probleme und Verzögerungen beim
+   Fortschritt des Projekts.
+   
+   Selbstverständlich ist diese Infrastruktur nicht billig. Es gibt eine
+   Reihe von einmaligen und monatlich wiederkehrenden Kosten, die für den
+   Weiterbetrieb beglichen werden müssen. Falls Sie oder Ihre Firma dazu
+   finanziell beitragen können, besuchen Sie bitte die URL
+   http://store.pgsql.com/shopping/ wo Sie eine Spende abgeben können.
+   
+   Obwohl diese Web-Seite das Unternehmen "PostgreSQL, Inc." erwähnt, ist
+   der Bereich "contributions" (Beiträge) ausschliesslich für die
+   Unterstützung des PostgreSQL-Projekts da und nicht für die
+   Finanzierung einer bestimmten Firma. Sie können auch gerne einen
+   finanziellen Beitrag an die Kontaktadresse verschicken.
      _________________________________________________________________
    
                         Fragen zu Benutzerprogrammen
                                       
     2.1) Gibt es ODBC-Treiber für PostgreSQL?
     
-   Es sind zwei ODBC-Treiber verfügbar: PostODBC und OpenLink ODBC.
+   Es sind zwei ODBC-Treiber verfügbar: PsqlODBC und OpenLink ODBC.
    
-   PostODBC ist in der Distribution enthalten. Mehr Informationen können
-   unter http://www.insightdist.com/psqlodbc abgerufen werden.
+   PsqlODBC ist in der Distribution enthalten. Weitere Informationen
+   können unter ftp://ftp.PostgreSQL.org/pub/odbc/ abgerufen werden.
    
    OpenLink ODBC kann unter http://www.openlinksw.com geholt werden. Die
-   Software arbeitet mit OpenLinks Standard-ODBC-Client, so daß
+   Software arbeitet mit dem Standard-ODBC-Client der Firma, so dass
    PostgreSQL-ODBC auf jeder Client-Plattform zur Verfügung steht, die
    unterstützt wird (Win, Mac, Unix, VMS).
    
-   Sie werden dieses Produkt wahrscheinlich an Leute verkaufen, die
-   kommerziellen Qualitäts-Support brauchen, aber es wird immer eine
+   OpenLink wird dieses Produkt wahrscheinlich an Leute verkaufen, die
+   kommerziellen Support benötigen, dennoch wird immer eine
    Freeware-Version verfügbar sein. Fragen dazu bitte an
    
-    2.2) Welche Werkzeuge gibt es, um PostgreSQL-Datenbanken über Webseiten
-    verfügbar zu machen?
-    
-   Eine nette Einführung zu Datenbank-gestützten Webseiten kann unter
-   http://www.webtools.com abgerufen werden.
+   Bitte beachten Sie auch das Kapitel zu ODBC im Progammer's Guide.
    
-   Eine weitere gibt es bei http://www.phone.net/home/mwm/hotlist/.
+    2.2) Welche Werkzeuge gibt es, um Web-Seiten mit PostgreSQL zu verbinden?
+    
+   Eine nette Einführung zu datenbank-gestützten Webseiten kann unter
+   http://www.webreview.com (engl.) abgerufen werden.
    
    Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP
    gibt es bei http://www.php.net
    
-   PHP ist hervorragend für einfache Anbindungen geeignet. Für komplexere
-   Aufgaben nutzen viele die Perl-Schnittstelle mit CGI.pm.
-   
-   Einen WWW-Gateway, basierend auf WDB, kann man bei
-   http://www.eol.ists.ca/~dunlop/wdb-p95 herunterladen.
+   Für komplexere Aufgaben bietet sich die Perl-Schnittstelle mit CGI.pm
+   oder mod_perl.
    
     2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle? Einen
     Report-Generator? Eine eingebaute Query-Schnittstelle?
     
-   Wir haben eine nette grafische Benutzerschnittstelle mit Namen
-   pgaccess, welche in der Distribution enthalten ist. pgaccess hat auch
-   einen Reportgenerator. Die Webpage liegt hier:
-   http://www.flex.ro/pgaccess
+   Wir haben eine nette grafische Benutzerschnittstelle namens PgAccess,
+   der außerdem einen Reportgenerator enthält: http://www.pgaccess.org
    
-   In der Distribution gibt es außerdem ecpg,, welches eine eingebundene
+   Die Distribution enthält außerdem ecpg, die eine eingebettete
    SQL-Query-Schnittstelle für C zur Verfügung stellt.
    
-    2.4) Welche Sprachen sind für die Kommunikation mit PostgreSQL verfügbar?
-    
-   Wir haben:
-     * C(libpq)
-     * C++(libpq++)
-     * Embedded C(ecpg)
-     * Java(jdbc)
-     * Perl(perl5)
-     * ODBC(odbc)
-     * Python(PyGreSQL)
-     * TCL(libpgtcl)
-     * ein rohes C/4GL(contrib/pginterface)
-     * Embedded HTML(PHP from http://www.php.net)
+    2.4) Welche Programmiersprachen und Schnittstellen gibt es?
+    
+   PostgreSQL bietet:
+     * C (libpq)
+     * C++ (libpq++)
+     * Embedded C (ecpg)
+     * Java (jdbc)
+     * Perl (perl5, DBD::Pg)
+     * ODBC (odbc)
+     * Python (PyGreSQL)
+     * TCL (libpgtcl)
+     * C Easy API (libpgeasy)
+     * PHP ('pg_' functions, Pear::DB)
      _________________________________________________________________
    
                            Administrative Fragen
                                       
-    3.1) Warum schlägt initdb fehl?
-    
-     * überprüfe, daß keine Binaries vorheriger Versionen in Deinem Pfad
-       (PATH-Variable) sind. (Wenn Du die Meldung siehst:
-       NOTICE:heap_modifytuple: repl is \ 9, ist das das Problem.)
-     * überprüfe, daß der Pfad richtig gesetzt ist
-     * überprüfe, ob der User postgres der Eigentümer der entsprechenden
-       Dateien ist
-       
-    3.2) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
+    3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
     
-   Der einfachste Weg ist mittels der --prefix Option beim configure den
-   Pfad anzugeben. Falls Du das vergessen haben solltest, kannst Du die
-   Datei Makefile.global ändern und POSTGRESDIR entsprechend anpassen,
-   oder Du erzeugst ein Makefile.custom und definierst POSTGRESDIR dort.
+   Bei der Ausführung von configure die Option --prefix mit dem
+   Zielverzeichnis angeben.
    
-    3.3) Wenn ich den postmaster starte, bekomme ich einen Bad System Call oder
-    eine core dumped Meldung. Warum?
+    3.2) Wenn ich den postmaster starte, erhalte ich einen Nachricht "Bad
+    System Call" bzw. "core dumped". Wieso?
     
-   Das kann verschiedene Ursachen haben. Überprüfe zuerst, ob Dein Kernel
-   System V Extensions enthält. PostgreSQL benötigt die
+   Das kann verschiedene Ursachen haben. Überprüfen Sie zuerst, ob Ihr
+   Kernel System V Extensions unterstützt. PostgreSQL benötigt
    Kernel-Unterstützung für Shared Memory und Semaphoren.
    
-    3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich
-    IpcMemoryCreate Fehlermeldungen. Warum?
+    3.3) Wenn ich versuche, den postmaster zu starten, bekomme ich
+    "IpcMemoryCreate"-Fehlermeldungen. Warum?
     
-   Du hast entweder den Kernel nicht für Shared Memory konfiguriert, oder
-   Du mußt den Shared Memory Bereich vergrößern. Die genaue Größe hängt
-   von Deiner Systemarchitektur ab und mit wievielen Puffern und
-   Serverprozessen Du postmaster konfiguriert hast. Für die meisten
-   Systeme, mit Standardangaben für Puffer und Prozessen benötigst Du ein
-   Minimum von ca. 1 MB.
+   Entweder ist Shared Memory in Ihrem Kernel nicht korrekt konfiguriert,
+   oder Sie müssen den Shared Memory Bereich vergrößern. Die genaue Größe
+   hängt von Ihrer Systemarchitektur und von der Anzahl der Puffer und
+   Serverprozesse ab, die Sie für postmaster konfiguriert haben. Bei den
+   voreingestellten Werten für Puffer und Prozesse benötigen Sie bei den
+   meisten Systemen ein Minimum von ca. 1 MB. Der "PostgreSQL
+   Administrator's Guide"
+   (http://www.PostgreSQL.org/idocs/index.php?kernel-resources.html)
+   enthält weitere Informationen zu Shared Memory und Semaphores.
    
-    3.5) Wenn ich versuche, den postmaster zu starten, bekomme ich
-    IpcSemaphoreCreate Fehlermeldungen. Warum?
+    3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich
+    "IpcSemaphoreCreate"-Fehlermeldungen. Warum?
     
-   Falls die Fehlermeldung IpcSemaphoreCreate: semget failed (No space
-   left on device) lautet, dann ist Dein Kernel mit zu wenig Semaphoren
-   konfiguriert. Postgres benötigt eine Semaphore pro möglichen
+   Falls die Fehlermeldung "IpcSemaphoreCreate: semget failed (No space
+   left on device)" lautet, ist Ihr Kernel mit zu wenig Semaphoren
+   konfiguriert. PostgreSQL benötigt eine Semaphore pro möglichem
    Backend-Prozess. Eine Zwischenlösung wäre, postmaster mit einer
-   geringeren Anzahl an Backend-Prozessen zu starten. Benutze dazu die -N
-   Option mit einem Wert kleiner als die standardmäßigen 32. Eine
-   dauerhafte Lösung wäre es, die Kernel-Parameter SEMMNS und SEMMNI zu
-   erhöhen.
+   geringeren Anzahl an Backend-Prozessen zu starten. Benutzen Sie dazu
+   die -N Option mit einem kleineren Wert als die standardmäßigen 32.
+   Eine dauerhafte Lösung wäre es, die Parameter SEMMNS und SEMMNI Ihres
+   Kernels zu erhöhen.
    
-   Falls die Fehlermeldung anders aussieht, hast Du möglicherweise keine
-   Semaphoren-Unterstützung in Deinem Kernel aktiviert.
+   Nichtfunktionierende Semaphores können außerdem bei hoher
+   Datenbanklast zu Abstürzen führen.
    
-    3.6) Wie verhindere ich, daß andere Hosts auf meine PostgreSQL Datenbanken
-    zugreifen?
-    
-   Die Standardeinstellung ist, daß PostgreSQL Verbindungen von der
-   lokalen Maschine über Unix-Domain-Sockets erlaubt. Andere Maschinen
-   werden keine Verbindung aufbauen können, bis der postmaster mit der -i
-   Option gestartet ist und die Host-basierte Authentizierung in der
-   Datei $PGDATA/pg_hba.conf entsprechend angepasst ist. Das erlaubt
-   TCP/IP-Verbindungen.
+   Falls die Fehlermeldung anders aussieht, ist möglicherweise keine
+   Semaphoren-Unterstützung in Ihrem Kernel aktiviert. Der "PostgreSQL
+   Administrator's Guide" enthält weitere Informationen zu Shared Memory
+   und Semaphores.
    
-    3.7) Warum kann ich mich nicht von einer anderen Maschine mit meiner
-    Datenbank verbinden?
+    3.5) Wie regle ich Zugriffe von anderen Rechnern?
     
-   Die Standardeinstellung erlaubt nur Unix-Domain-Socket-Verbindungen
-   der lokalen Maschine. Um TCP/IP Verbindungen zu ermöglichen, stelle
-   sicher, daß der postmaster mit der -i Option gestartet wurde, und füge
-   einen passenden Host-Eintrag in die Datei pgsql/data/pg_hba.conf ein.
-   Siehe auch die pg_hba.conf Man-Page.
-   
-    3.8) Warum kann ich nicht als root auf die Datenbank zugreifen?
+   PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom
+   lokalen Rechner über Unix Domain Sockets möglich sind. Verbindungen
+   von anderen Rechnern über TCP/IP sind nur möglich, wenn der postmaster
+   mit der -i Option gestartet wird und die host-basierte
+   Authentifizierung in der Datei $PGDATA/pg_hba.conf entsprechend
+   angepasst ist.
+   
+    3.6) Wie optimiere ich die Datenbank für bessere Leistung?
     
-   Du solltest keine Datenbank-Benutzer mit der User-ID 0 (root)
-   erzeugen. Sie werden auf keine Datenbank zugreifen können. Das ist
-   eine Sicherheitsmaßnahme, wegen der Möglichkeit Objekt-Module
-   dynamisch in die Datenbank zu linken.
-   
-    3.9) Alle meine Server stürzen bei gleichzeitigem Tabellenzugriff ab.
-    Warum?
-    
-   Dieses Problem kann durch einen Kernel verursacht werden, der ohne
-   Support für Semaphoren konfiguriert wurde.
-   
-    3.10) Wie optimiere ich die Datenbankmaschine für bessere Leistung?
-    
-   Sicherlich können Indizes Abfragen beschleunigen. Der explain Befehl
-   erlaubt Dir zu sehen, wie PostgreSQL Deine Abfrage interpretiert und
+   Der Einsatz von Indizes sollte auf jeden Fall Abfragen beschleunigen.
+   Die Anweisung EXPLAIN zeigt, wie PostgreSQL Abfragen interpretiert und
    welche Indizes benutzt werden.
    
-   Wenn Du eine Menge INSERTs machst, überprüfe, ob Du sie als
-   Stapelverarbeitung mit dem copy-Befehl abarbeiten kannst. Das ist viel
-   schneller als einzelne INSERTs. Zweitens, SQL-Statements, die nicht in
-   einem begin work/commit Transaktions-Block eingegeben werden, werden
-   als eigene Transaktion behandelt. Überprüfe, ob die Statements nicht
-   in einen einzelnen Transaktions-Block zusammengefasst werden können.
-   Das reduziert den Transaktions-Overhead. Du kannst auch erwägen,
-   Indizes zu löschen und neu zu erstellen, wenn Du große Datenmengen
-   änderst.
-   
-   Es gibt verschiedene Tuning-Maßnahmen, die man ergreifen kann. Du
-   kannst fsync() abschalten, indem Du beim Starten des postmasters die
-   Optionen -o -F angibst. Das hindert fsync()´s daran, nach jeder
-   Transaktion die Daten auf die Platte zu schreiben. Du kannst auch mit
-   der -B Option des postmasters die Anzahl der Shared Memory Puffer für
-   den Backend-Prozess erhöhen. Falls Du diesen Wert zu hoch einstellst,
-   kann es sein, daß der postmaster nicht startet, weil der Shared Memory
-   Speicherplatz Deines Kernels aufgebraucht wird. Jeder Puffer ist 8 kB
-   groß und es gibt standardmäßig 64 Puffer.
-   
-   Du kannst ebenfalls die -S Option des Backends nutzen, um die Größe
-   des Speicherplatzes für temporäres Sortieren zu erhöhen. Der -S Wert
-   wird in Kilobyte gemessen und ist standardmäßig auf 512 kB festgelegt.
-   Es wäre jedoch unklug, den Wert zu hoch anzugeben, da ein Query
-   möglicherweise Speicherplatzmangel verursacht, wenn es viele
-   gleichzeitige Sortierungen durchführen muß.
-   
-   Der cluster Befehl kann benutzt werden, um Daten in Basistabellen zu
-   gruppieren, so daß sie auf einen Index zusammengebracht werden. Siehe
-   auch die cluster(l) Man-Page für weitere Details.
-   
-    3.11) Welche Debugging/Fehlersuch-Hilfsmittel sind für PostgreSQL
-    verfügbar?
-    
-   PostgreSQL hat einige Möglichkeiten, Statusinformationen zu berichten,
-   die nützlich für die Fehlersuche sein können.
-   
-   Erstens, wenn beim configure-Lauf die Option --enable-cassert
-   angegeben wurde, verfolgen viele assert()´s den Fortschritt des
-   Backends und halten das Programm an, wenn etwas Unerwartetes passiert.
-   
-   Postmaster und postgres, haben mehrere Fehlersuch-Optionen zur
-   Verfügung. Stelle zuerst sicher, daß Du den Standard-Output und
-   Fehlerkanal in eine Datei umleitest, wenn Du den postmaster startest,
-   :
-
-        cd /usr/local/pgsql
-        ./bin/postmaster >server.log 2>&1 &
+   Wenn Sie eine große Anzahl von INSERT-Anweisungen durchführen, sollten
+   Sie überlegen, ob die Durchführung mit der COPY-Anweisung in Frage
+   kommt. Dies funktioniert wesentlich schneller als einzelne
+   INSERT-Befehle. SQL-Anweisungen, die sich nicht in einem BEGIN
+   WORK/COMMIT Transaktions- Block befinden, werden als eigene
+   Transaktionen behandelt. Überlegen Sie, ob die Anweisungen nicht in
+   einen einzelnen Transaktionsblock zusammen- gefasst werden können. Das
+   reduziert den Transaktionsaufwand. Überlegen Sie auch, bei größeren
+   Datenänderungen Indizes zu löschen und danach wiederherzustellen.
+   
+   Es gibt verschiedene Tuning-Optionen. Sie können fsync() ausschalten,
+   indem Sie beim Starten des postmaster die Optionen -o -F angeben. Das
+   hindert fsync()-Operationen daran, nach jeder Transaktion die Daten
+   direkt auf die Festplatte zu schreiben.
+   
+   Sie können auch mit der -B Option des postmaster die Anzahl der Shared
+   Memory Puffer für die Backend-Prozesse erhöhen. Falls Sie diesen Wert
+   jedoch zu hoch setzen, kann es vorkommen, dass der postmaster nicht
+   startet, weil die Obergrenze der Speicherzuweisung für Shared Memory
+   überschritten wird. Jeder Puffer ist 8 kB groß, standardmäßig gibt es
+   64 Puffer.
+   
+   Sie können auch die -S Option des Backends nutzen, um die Größe des
+   Speicherplatzes für temporäres Sortieren zu erhöhen. Der -S Wert wird
+   in Kilobyte gemessen und ist standardmäßig auf 512 kB festgelegt.
+   
+   Die CLUSTER-Anweisung kann benutzt werden, um Daten in Basistabellen
+   zu gruppieren, so dass sie auf einen Index zusammengebracht werden.
+   Siehe auch die CLUSTER(l) Man-Page für weitere Details.
+   
+    3.7) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?
+    
+   PostgreSQL hat einige Möglichkeiten, Statusinformationen anzuzeigen,
+   die bei der Fehlersuche nützlich sein können.
+   
+   Wenn Sie PostgreSQL mit dem --enable-cassert Option kompiliert haben,
+   verfolgen zahlreiche assert()-Anweisungen den Ablauf des Backends und
+   halten das Programm an, wenn etwas Unerwartetes passiert.
+   
+   Sowohl der postmaster als auch postgres stellen mehrere Debug-Optionen
+   zur Verfügung. Stellen Sie zuerst sicher, dass Sie den Standard-Output
+   und den Fehlerkanal in eine Datei umleiten, wenn Sie den postmaster
+   starten:
+      cd /usr/local/pgsql
+      ./bin/postmaster >server.log 2>&1 &
 
-   Das erzeugt eine server.log Datei im PostgreSQL-Verzeichnis. Diese
-   Datei enthält nützliche Informationen über Probleme oder Fehler, die
-   im Server aufgetreten sind. Postmaster hat eine -d Option, die noch
-   detailliertere Informationen liefert. Zur -d Option wird eine Nummer
-   angegeben, die den Debug-Level - also die Menge der berichteten
-   Information - angibt. Achtung, hohe Debug-Level erzeugen schnell große
-   Logdateien!
-   
-   Du kannst tatsächlich das Postgres-Backend auf der Kommandozeile
-   laufen lassen und SQL-Statements direkt eingeben. Diese Vorgehensweise
-   wird aber nur zur Fehlersuche empfohlen. Beachte, daß ein
-   Zeilenumbruch das SQL-Statement beendet, nicht das Semikolon. Wenn Du
-   PostgreSQL mit Debugging-Symbolen kompiliert hast, kannst Du einen
-   Debugger benutzen, um zu beobachten, was passiert. Da das Backend
+   Dadurch wird die Datei server.log im PostgreSQL-Verzeichnis erzeugt.
+   Diese Datei enthält nützliche Informationen über Probleme oder Fehler,
+   die im Server aufgetreten sind. postmaster hat eine -d Option, die
+   noch detailliertere Informationen liefert. Zur -d Option wird eine
+   Nummer angegeben, die den Debug-Level - also die Menge der berichteten
+   Information - angibt. Achtung, hohe Debug-Levels erzeugen schnell
+   große Logdateien!
+   
+   Wenn der postmaster nicht läuft, können Sie sogar den postgres-Backend
+   von der Befehlszeile ausführen und eine SQL-Anweisung direkt eingeben.
+   Dies ist nur für Debugging-Zwecke zu empfehlen. Beachten Sie, dass ein
+   Zeilenumbruch, und nicht das Semikolon die SQL-Anweisung beendet.
+   Falls Sie PostgreSQL mit Debugging-Symbolen kompiliert haben, können
+   Sie mit einem Debugger sehen, was passiert. Da das Backend jedoch
    nicht vom postmaster gestartet wurde, läuft es nicht in der gleichen
    Umgebung und deshalb können einige locking/backend Operationen nicht
-   reproduziert werden. Einige Betriebssysteme können sich an einen
-   Backend-Prozess direkt anhängen, um Probleme zu diagnostizieren.
-   
-   Das Programm postgres hat -s, -A und -t Optionen, die bei der
-   Fehlersuche und Leistungsmessung sehr nützlich sein können. Du kannst
-   das Paket auch mit Profiling kompilieren, um zu sehen, welche
-   Funktionen wieviel Ausführungszeit beanspruchen. Das Backend Profil
-   wird im Verzeichnis pgsql/data/base/dbname abgelegt. Das Client Profil
-   wird in das aktuelle Verzeichnis abgelegt.
-   
-    3.12) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
-    Verbindung versuche. Warum?
-    
-   Du mußt die Grenze des postmasters, die festlegt, wieviele
-   gleichzeitige Backend-Prozesse gestartet werden können, hochsetzen.
-   
-   In Postgres 6.5 sind das normalerweise 32 Prozesse. Du kannst diesen
-   Wert dadurch erhöhen, daß Du den postmaster mit einem entsprechenden
-   -N Wert neu startest. In der Standardkonfiguration kannst Du -N auf
-   maximal 1024 setzen. Falls Du mehr brauchst, erhöhe MAXBACKENDS in
-   include/pg_config.h und kompiliere das Paket neu. Du kannst den
-   Standardwert von -N während der Konfiguration setzen, indem Du
-   --with-maxbackends angibst. Anmerkung: Falls Du -N größer als 32
-   einstellst, solltest Du -B auf einen Wert, höher als 64 setzen. Für
-   eine hohe Anzahl an Backend-Prozessen, solltest Du möglicherweise
-   einige Unix-Kernel Parameter ebenfalls erhöhen. Folgendes Parameter
-   solltest Du prüfen: die Maximalgröße der Shared Memory Blocks SHMMAX,
-   die Maximalanzahl der Semaphoren SEMMNS und SEMMNI, die maximale
-   Anzahl von Prozessen NPROC, die maximale Anzahl von Prozessen pro User
-   MAXUPRC, und die Maximalzahl der geöffneten Dateien NFILE und NINODE.
-   Der Grund für die Begrenzung der erlaubten Backend-Prozesse liegt
-   darin, daß verhindert werden soll, daß das System seine freien
-   Ressourcen aufbraucht.
-   
-   In den Postgres-Versionen vor 6.5 war die maximale Anzahl von Backends
-   auf 64 festgelegt und eine Änderung setzte eine erneute Kompilierung
-   voraus, bei der die Konstante MaxBackendId in
-   include/storage/sinvaladt.h. entsprechend angepasst wurde.
-   
-    3.13) Was sind die pg_psort.XXX Dateien in meinem Datenbank-Verzeichnis?
-    
-   Dies sind temporäre Dateien, die durch den Query-Ausführer erzeugt
-   werden. Wenn zum Beispiel eine Sortierung durchgeführt werden muß, um
-   ein ORDER BY auszuführen, und diese Sortierung mehr Platz benötigt,
-   als mit dem Backend-Parameter -S erlaubt wurde, dann werden diese
-   temporären Dateien erzeugt, um die Daten dort zu halten.
-   
-   Die temporären Dateien sollten automatisch gelöscht werden, falls das
-   Backend jedoch während einer Sortierung abstürzt, bleiben sie
-   erhalten. Wenn zu diesem Zeitpunkt keine Transaktion läuft, kannst Du
-   die pg_tempNNN.NN Dateien ohne Gefahr löschen.
-   
-    3.14) Wie richte ich eine Benutzergruppe (pg_group) ein?
-    
-   Zur Zeit gibt es keine einfache Schnittstelle, um Benutzergruppen
-   einzurichten Du mußt explizit die pg_group-Tabelle mittels
-   INSERT/UPDATE modifizieren. Zum Beispiel:
-
-        jolly=> INSERT into pg_group (groname, grosysid, grolist)
-        jolly=>     values ('posthackers', '1234', '{5443, 8261}');
-        INSERT 548224
-        jolly=> grant INSERT on foo to group posthackers;
-        CHANGE
-        jolly=>
-
-   Die Felder in pg_group sind:
-     * groname: der Gruppenname. Dieser Name sollte rein alphanumerisch
-       sein. Keine Unterstriche oder andere Punktionen
-     * grosysid: die Gruppen-ID. Die Gruppen-ID ist ein int4-Feld. Sie
-       sollte eindeutig für jede Gruppe sein.
-     * grolist: die Liste der pg_user IDs, die zu dieser Gruppe gehören.
-       (int4[].)
+   reproduziert werden.
+   
+   Wenn dagegen der postmaster läuft, führen Sie psql in einem Fenster
+   aus, dann ermitteln Sie die Prozessnummer (PID) des
+   postgres-Prozesses, der von psql verwendet wird. Binden Sie einen
+   Debugger an diese PID und führen Sie Abfragen von psql aus. Wenn Sie
+   den postgres-Serverstart analysieren wollen, setzen Sie die
+   Umgebungsvariable PGOPTIONS="-W n", und starten Sie dann psql. Dies
+   verzögert den Start um n Sekunden, damit Sie einen Debugger an den
+   Prozess binden können und ggf. Breakpoints setzen, bevor die
+   Startsequenz begonnen wird.
+   
+   Das Programm postgres hat auch die Optionen -s, -A und -t, die bei der
+   Fehlersuche und Performanzmessung sehr nützlich sein können.
+   
+   Sie können die Anwendung auch mit Profiling kompilieren, um zu sehen,
+   welche Funktionen wieviel Ausführungszeit beanspruchen. Das Backend
+   Profil wird im Verzeichnis pgsql/data/base/dbname abgelegt. Das
+   Client-Profil wird in das aktuelle Verzeichnis abgelegt. Bitte
+   beachtern Sie, dass unter Linux PostgreSQL mit der Option
+   -DLINUX_PROFILE kompiliert werden muß, um Profiling nutzen zu können.
+   
+    3.8) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
+    Verbindung augzubauen versuche. Warum?
+    
+   Sie müssen die maximale Anzahl der gleichzeitig ausfühbaren Backend-
+   Prozesse hochsetzen.
+   
+   Die Voreinstellung ist 32 Prozesse. Sie können diese erhöhen, indem
+   Sie den postmaster mit einem entsprechenden -N Parameter starten bzw.
+   die Konfigurationsdatei postgresql.conf anpassen.
+   
+   Bitte beachten Sie, dass Sie auch -B auf ein Wert größer als die
+   Voreinstellung von 64 setzen müssen, wenn Sie -N auf einen Wert höher
+   als 32 setzen; -B muss mindestens das Doppelte von -N betragen, und
+   einer besseren Performanz wegen sollte der Wert noch höher sein. Bei
+   einer hohen Anzahl von Backend-Prozessen kann es vorkommen, dass Sie
+   einige Unix-Kernel- Parameter ebenfalls erhöhen müssen. Folgende
+   Parameter sind zu überprüfen: die Maximalgröße der Shared Memory
+   Blocks SHMMAX; die Maximalanzahl der Semaphoren SEMMNS und SEMMNI; die
+   maximale Anzahl von Prozessen NPROC; die maximale Anzahl von Prozessen
+   pro User MAXUPRC; und die Maximalzahl der geöffneten Dateien NFILE und
+   NINODE. Durch die Begrenzung der Anzahl erlaubter Backend-Prozesse
+   wird verhindert, dass System-Ressourcen durch PostgreSQL aufgebraucht
+   werden.
+   
+   In den PostgreSQL-Versionen vor 6.5 war die maximale Anzahl von
+   Backends auf 64 festgelegt und eine Änderung setzte eine erneute
+   Kompilierung voraus, bei der die Konstante MaxBackendId in
+   include/storage/sinvaladt.h entsprechend angepasst werden mußte.
+   
+    3.9) Was befindet sich im Verzeichnis pgsql_tmp/?
+    
+   Dieses Verzeichnis enthält temporäre Dateien, die durch den query
+   executor erzeugt werden. Wenn zum Beispiel eine Sortierung
+   durchgeführt werden muß, um ein ORDER BY auszuführen, und diese
+   Sortierung mehr Hauptspeicher benötigt, als mit dem Backend-Parameter
+   -S erlaubt wurde, dann werden diese Dateien erzeugt, um die Daten dort
+   zu auszulagern.
+   
+   Die temporären Dateien sollten automatisch gelöscht werden. Falls das
+   Backend jedoch während einer Sortierung abstürzen sollte, bleiben sie
+   erhalten. Nach einem Neustart des postmaster werden sie auomatisch
+   gelöscht.
+   
+    3.10) Warum muß ich bei jeder neuen Hauptversion von PostgreSQL die
+    komplette Datenbank exportieren und anschließend reimportieren?
+    
+   Zwischen "kleinen" PostgreSQL-Versionsänderungen (z.B. zwischen 7.2
+   und 7.2.1) werden keine strukturellen Änderungen durchgeführt, wodurch
+   ein erneutes Aus- und Einlesen der Daten nicht benötigt wird.
+   Allerdings wird bei "großen" Versionsänderungen (z.B. zwischen 7.2 und
+   7.3) oft das interne Format der Systemtabellen und Datendateien
+   angepasst. Diese Änderungen sind oft sehr komplex, wodurch die
+   Rückwärtskompatibilität der Datendateien nicht gewährleistet werden
+   kann. Durch das Exportieren werden die Daten in einem generischen
+   Format ausgegeben, wodurch die Importierung in das neue interne Format
+   ermöglicht wird.
+   
+   Bei Versionenwechseln, wo kein Formatänderungen stattgefunden haben,
+   kann das pg_upgrade-Skript benutzt werden, um die Daten ohne Aus- und
+   Einlesen zu übertragen. Die jeweilige Dokumentation gibt an, ob für
+   die betreffende Version pg_upgrade verfügbar ist.
      _________________________________________________________________
    
                              Fragen zum Betrieb
                                       
-    4.1) Das System scheint Kommata, Dezimalpunkte und Datumsformate
-    durcheinanderzubringen.
-    
-   Überprüfe die Konfiguration Deiner Locale-Einstellung. PostgreSQL
-   benutzt die Einstellungen des jeweiligen Users und nicht die des
-   postmaster Prozesses. Es gibt postgres und psql SET Befehle, um das
-   Datumsformat zu kontrollieren. Setzte diese entsprechend Deiner
-   Arbeitsumgebung.
-   
-    4.2) Was ist der genauer Unterschied zwischen Binary Cursors und Normal
+    4.1) Worin besteht der Unterschied zwischen Binary Cursors und Normal
     Cursors?
     
-   Vgl. die declare Man-Page für eine Beschreibung.
+   Vgl. die DECLARE Man-Page für eine Beschreibung.
    
-    4.3) Wie wähle ich per SELECT nur die ersten paar Zeilen in einem Query
-    aus?
+    4.2) Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen in einer
+    Abfrage aus?
     
-   Vgl. die fetch Man-Page, oder benutze SELECT ... LIMIT....
+   Vgl. die FETCH Man-Page, oder benutzen Sie SELECT ... LIMIT... .
    
-   Das verhindert nur, daß alle Ergebniszeilen zum Client übermittelt
-   werden. Die komplette Abfrage muß abgearbeitet werden, selbst wenn Du
-   nur die ersten paar Zeilen haben möchtest. Ziehe ein Query in
-   Erwägung, das ein ORDER BY benutzt. Es gibt keine Möglichkeit Zeilen
-   zurückzuliefern, bevor nicht die komplette Abfrage abgearbeitet ist.
+   Selbst wenn Sie nur die ersten paar Zeilen einer Tabelle abfragen
+   möchten, muß unter Umständen die komplette Abfrage abgearbeitet
+   werden. Ziehen Sie also möglichst eine Abfrage in Erwägung, die eine
+   ORDER BY-Anweisung benutzt, die wiederum auf indizierte Spalten
+   verweist. In diesem Fall kann PostgreSQL direkt nach den gewünschten
+   Zeilen suchen und braucht nicht jede mögliche Ergebniszeile
+   abzuarbeiten.
    
-    4.4) Wie bekomme ich eine Liste der Tabellen oder anderen Dingen, die ich
-    in psql sehen kann
+   Bitte beachten Sie, dass mit PostgreSQL 7.3 die Syntax LIMIT n, m
+   durch LIMIT n OFFSET m ersetzt wurde.
+   
+    4.3) Wie bekomme ich eine Liste der Tabellen oder anderen Dinge, die ich in
+    psql sehen kann?
     
-   Du kannst Dir die Datei pgsql/src/bin/psql/psql.c mit dem Quellcode
-   für psql ansehen. Sie enthält die SQL-Befehle, die die
-   Backslash-Kommandos (\) ausführen. Seit Postgres 6.5 kannst Du psql
-   auch mit der -E Option starten. Dadurch gibt psql die Queries aus, die
-   es bei der Ausführung der Befehle benutzt.
+   Sie können sich die Datei pgsql/src/bin/psql/describe.c mit dem
+   Quellcode für psql ansehen. Sie enthält die SQL-Abfragen, die die
+   Backslash-Kommandos (\) ausführen. Sie können psql auch mit der -E
+   Option starten. Danach gibt psql die Abfragen aus, die es bei der
+   Ausführung der Befehle benutzt.
    
-    4.5) Wie entferne ich eine Spalte von einer Tabelle?
+    4.4) Wie entferne ich eine Spalte aus einer Tabelle?
     
-   Wir unterstützen alter table drop column nicht, aber mache es so:
-
-        SELECT ...  -- wähle alle Spalten außer die, die Du entfernen willst
+   Der Syntax ALTER TABLE DROP COLUMN wird erst ab PostgreSQL 7.3
+   unterstützt.
+   
+   Bei früheren Versionen bietet das folgende Verfahren Ersatz:
+      BEGIN;
+      LOCK TABLE old_table;
+      SELECT ...  -- alle außer der zu entfernenden Spalte hier auswählen
         INTO TABLE new_table
         FROM old_table;
-        DROP TABLE old_table;
-        ALTER TABLE new_table RENAME TO old_table;
+      DROP TABLE old_table;
+      ALTER TABLE new_table RENAME TO old_table;
+      COMMIT;
 
-    4.6) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?
+    4.5) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?
     
-   Zeilen sind auf 8 kB begrenzt, aber das kann geändert werden, indem Du
-   in include/config.h die Konstante BLCKSZ änderst. Um Attribute mit
-   mehr als 8 kB zu nutzen, kannst Du auch das "Large Object Interface"
-   benutzen.
+   Es bestehen folgende Obergrenzen:
+    Maximale Größe eine Datenbank?           unbeschränkt (es existieren
+                                               Datenbanken mit >1TB)
+    Maximale Größe einer Tabelle?            16 TB
+    Maximale Größe einer Zeile?              1,6 TB
+    Maximale Größe einer Spalte?             1 GB
+    Maximale Anzahl von Zeilen in einer Tabelle?
+                                             unbeschränkt
+    Maximale Anzahl von Spalten in einer Tabelle?
+                                             250-1600 je nach Spaltentyp
+    Maximale Anzahl von Indizies für eine Tabelle?
+                                             unbeschränkt
+
+   Selbstverständlich sind dies theoretische Werte, die oft durch die
+   verfügbaren Platten- und Speicherressourcen eingeschränkt sind.
+   Extreme Größen können zu Leistungseinbußen führen.
    
-   Zeilen überschreiten keine 8 kB-Grenzen. Eine Zeile mit 5 kB wird 8 kB
-   Speicherplatz benötigen.
+   Die maximale Tabellengröße von 16 TB benötigt keine
+   Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in
+   Dateien mit einer Größe von 1 GB aufgeteilt, wodurch etwaige
+   dateisystem-bedingte Beschränkungen nicht relevant sind.
    
-   Tabellen- und Datenbankgrößen haben keine Grenzen. Es gibt viele
-   Datenbanken mit zig Gigabytes und wahrscheinlich einige mit hunderten
-   Gigabyte.
+   Die maximale Tabellengröße und die maximale Anzahl von Spalten können
+   gesteigert werden, wenn die Default-Blockgröße auf 32 KB heraufgesetzt
+   wird.
    
-    4.7) Wieviel Plattenplatz benötigt eine Datenbank zur Speicherung einer
-    Datendatei mit zeilenweisen Datensätzen?
+    4.6) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen
+    Textdatei abzuspeichern?
     
-   Eine Postgres Datenbank kann ungefähr sechseinhalb mal soviel Platz
-   brauchen, wie eine einfache Textdatei.
-   
-   Betrachten wir eine Datei mit 300.000 Zeilen, mit jeweil zwei Integern
-   pro Zeile. Die einfache Textdatei benötigt 2,4 MB Speicherplatz. Die
-   Größe der Postgres Datenbankdatei, die diese Daten enthält, liegt
-   ungefähr bei 14 MB.
+   Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen
+   Textdatei bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe
+   der Datei beanspruchen.
+   
+   Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und
+   einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die
+   durchschnittliche Länge der Textbeschreibung 20 Byte beträgt. Die
+   einfache Datei würde 2,8 MB groß sein. Die Größe der
+   PostgreSQL-Datenbankdatei, die diese Daten enthält, liegt ungefähr bei
+   6,4 MB:
     36 Bytes: jeder Zeilenkopf (ungefähr)
-   + 8 Bytes: zwei Integer-Felder @ jedes 4 Bytes
-   + 4 Bytes: Zeiger auf den Datensatz
+   +24 Bytes: ein Integer-Feld und ein Textfeld
+   + 4 Bytes: Zeiger auf der Datenseite auf den Tupel
    -----------------------------------------------
-    48 Bytes pro Zeile
-
-   Die Größe einer Datenseite in PostgreSQL ist 8192 Bytes (8 KB), also:
+    64 Bytes pro Zeile
 
+   Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB),
+   also:
    8192 Bytes pro Seite
-   ---------------------   =  171 Zeilen pro Seite (aufgerundet)
-     48 Bytes pro Zeile
+   ---------------------   =  128 Zeilen pro Seite (abgerundet)
+     64 Bytes pro Zeile
 
-   300000 Datenzeilen
-   -----------------------  =  1755 Datenbankseiten
-      171 Zeilen pro Seite
+   100.000 Datenzeilen
+   -----------------------  =  782 Datenbankseiten (aufgerundet)
+       128 Zeilen pro Seite
 
-1755 Datenbankseiten * 8192 Bytes pro Seite  =  14,376,960 Bytes (14MB)
+   782 Datenbankseiten * 8192 Bytes pro Seite  =  6.406.144 Byte (6,4 MB)
 
-   Indizes haben nicht einen solchen Overhead, sie beinhalten jedoch die
-   Daten, die sie indizieren und können so auch sehr groß werden.
+   Indizes beanspruchen nicht so viel Platz. Da sie jedoch die Daten
+   beinhalten, die sie indizieren, können auch sie sehr groß werden.
+   
+   NULL-Werte werden in Bitmaps gespeichert, wodurch sie sehr wenig Platz
+   in Anspruch nehmen.
    
-    4.8) Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank
+    4.7) Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank
     definiert sind?
     
-   psql hat eine Vielzahl von Backslash Befehlen, um solche Informationen
-   zu zeigen. Benutze \?, um sie zu sehen.
+   psql hat eine Vielzahl von Backslash-Befehlen, mit denen solche
+   Informationen angezeigt werden können. Der Befehl \? zeigt eine
+   Übersicht. Außerdem zeigt der Befehl \l eine Liste von allen
+   verfügbaren Datenbanken an.
    
-   Schaue Dir auch die Datei pgsql/src/tutorial/syscat.source. an. Sie
-   illustriert viele der SELECTs, die benötigt werden, um diese
-   Informationen von der Datenbank-Systemtabelle zu erhalten
+   Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele
+   SELECT-Anweisungen, mit deren Hilfe man Information über die
+   Systemtabellen erhalten kann.
    
-    4.9) Meine Queries sind langsam oder nutzen die Indizes nicht. Warum?
+    4.8) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?
     
-   PostgeSQL pflegt automatische Statistiken nicht. Um die Statistiken zu
-   aktualisieren, mußt Du ein explizites vacuum eingeben. Nach dieser
-   Aktualisierung weiß der Optimierer wieviele Zeilen in der Tabelle sind
-   und kann besser entscheiden, ob Indizes benutzt werden sollten. Der
-   Optimierer benutzt keine Indizes, wenn die Tabelle klein ist, weil ein
-   sequentieller Suchlauf dann schneller sein würde.
-   
-   Benutze den Befehl vacuum analyze für die spaltenspezifische
-   Optimierung. Vacuum analyze ist für komplexe Multi-Join-Abfragen
-   wichtig, damit der Optimierer die Anzahl der Zeilen von jeder Tabelle
-   schätzen und dann die passende Join-Reihenfolge wählen kann. Das
-   Backend verfolgt die Spaltenstatistik nicht selbst, so daß vacuum
-   analyze regelmäßig aufgerufen werden sollte.
-   
-   Indizes werden nicht für ORDER BY Operationen benutzt.
+   Indizes werden nicht automatisch bei jeder Abfrage verwendet. Indizes
+   werden nur dann verwendet, wenn die abzufragende Tabelle eine
+   bestimmte Größe übersteigt, und die Abfrage nur eine kleine
+   Prozentzahl der Tabellenzeilen abfragt. Grund hierfür ist, dass die
+   durch einen Index verursachten Festplattenzugriffe manchmal langsamer
+   sind als ein einfaches Auslesen aller Tabellenzeilen (sequentieller
+   Scan).
+   
+   Um festzustellen, ob ein Index verwendet werden soll, braucht
+   PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden
+   durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand
+   der Statistiken kennt der Abfragenoptimierer die Anzahl der
+   Tabellenzeilen und kann besser entscheiden, ob Indizes verwendet
+   werden sollen. Statistiken sind auch bei der Feststellung optimaler
+   JOIN-Reihenfolge und -Methoden wertvoll.
+   
+   Indizes werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs
+   verwendet. Ein sequentieller Scan mit anschließendem explizitem
+   Sortiervorgang ist normalerweise schneller als ein Index-Scan einer
+   großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen
+   mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein
+   kleiner Abschnitt der Tabelle zurückgeliefert wird. Dadurch wird es
+   auch möglich, die Minimal- und Maximalwerte einer Abfrage unter
+   Verwendung von Indizes zu ermitteln:
+       SELECT spalte
+         FROM tabelle
+     ORDER BY spalte [ DESC ]
+        LIMIT 1
+
+   (Die Aggregatfunktionen MIN() und MAX() verwenden keine Indizes).
+   
+   Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können
+   Indizes nur unter bestimmten Umständen verwendet werden:
+     * Der Anfang des Suchmusters muß mit dem Anfang des Strings
+       verknüpft werden, d.h.:
+          + LIKE-Suchmuster dürfen nicht mit % anfangen;
+          + ~ (reguläre Ausdrücke) müssen mit ^ anfangen.
+     * Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e])
+       anfangen
+       
+   Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B.
+   ILIKE bzw. ~*), verwenden keine Indizes. Stattdessen können
+   funktionale Indizes verwendet werden, die im Punkt 4.12 beschrieben
+   werden.
    
-   Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~,  können
-   Indizes nur benutzt werden, wenn die Suche mit dem Anfang eines
-   Strings startet. Um also Indizes zu nutzen, sollten LIKE-Suchen nicht
-   mit %, und ~  beginnen (Die Sucheparameter regulärer Ausdrücke sollten
-   mit ^.  beginnen.
+   Die C-Locale muß während der Datenbank-Initialisierung mit initdb
+   bestimmt worden sein.
    
-    4.10) Auf welche Weise kann ich sehen, wie der Query-Optimierer meine
+    4.9) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine
     Abfrage auswertet?
     
    Vgl. die EXPLAIN Man-Page.
    
-    4.11) Was ist ein R-Tree Index?
+    4.10) Was ist ein R-Tree Index?
     
    Ein R-Tree Index wird benutzt, um räumliche Daten zu indizieren. Ein
    Hash-Index kann nicht für Bereichssuchen genutzt werden. Ein B-Tree
    Punkte, die sich in einem umgebenden Rechteck befinden" effizienter
    beantworten.
    
-   Die kanonische Veröffentlichung , die das originale R-Tree Design
-   beschreibt ist:
+   Die kanonische Veröffentlichung, die das originale R-Tree Design
+   beschreibt, ist:
    
    Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial
    Searching." Proc of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data,
    45-57.
    
-   Du kannst dieses Werk ebenfalls in Stonebraker's "Readings in Database
+   Sie können dieses Werk auch in Stonebrakers "Readings in Database
    Systems" finden.
    
    Die eingebauten R-Trees können Polygone und Rechtecke verarbeiten.
    Arbeit und wir haben derzeit keinerlei Dokumentation darüber, wie das
    zu machen wäre.
    
-    4.12) Was ist "Genetic Query Optimization"?
+    4.11) Was ist der "Genetic Query Optimizer"?
     
    Das GEQO-Modul in PostgreSQL soll dazu dienen, das Optimierungsproblem
-   beim Joining vieler Tabellen auf der Basis genetischer Algorithmen
-   (GA) zu lösen. Es erlaubt die Behandlung von großen Join-Queries ohne
-   erschöpfende Suche.
+   beim JOIN von vielen Tabellen auf der Basis genetischer Algorithmen
+   (GA) zu lösen. Es ermöglicht die Behandlung von großen JOIN-Queries
+   durch eine nicht-erschöpfende Suche.
    
-   Für weitere Informationen siehe die Dokumentation.
+    4.12) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer
+    Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende
+    ich einen Index bei solchen Suchabfragen?
+    
+   Der Operator ~ bewirkt die Anwendung eines regulären Ausdrucks. ~*
+   führt zur Anwendung eines regulären Ausdrucks mit Ignorierung der
+   Groß- und Kleinschreibung.
+   
+   Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,
+   werden in der Regel so ausgedruckt:
+      SELECT *
+        FROM tabelle
+       WHERE LOWER(spalte) = 'abc'
+
+   Ein funktionaler Index, der wie folgt erstellt wird, wird auf jeden
+   Fall verwendet:
+      CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))
+
+    4.13) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
+    
+   Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.
    
-    4.13) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer
-    Suche mit Ignorierung der Groß- und Kleinschreibweisen?
+    4.14) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
     
-   ~ und ~*  sind wahrscheinlich das, was Du willst. Vgl. psql's \do
-   Befehl.
+Typ           interner Name   Bemerkungen
+-------------------------------------------------
+"char"        char            1 Zeichen
+CHAR(n)       bpchar          mit Leerzeichen gefüllt bis zur angegebenen Länge
+VARCHAR(n)    varchar         die Größe legt die Maximallänge fest; kein
+                               Ausfüllen mit Leerzeichen
+TEXT          text            Die Länge wird nur durch die maximale Zeilenlänge
+                               beschränkt
+BYTEA         bytea           Bytearray mit variabler Länge
+
+   Der interne Name kommt vor allem in den Systemkatalogen und in manchen
+   Fehlermeldungen vor.
    
-    4.14) Wie ermittle ich in einem Query, daß ein Feld NULL ist?
+   Die letzten vier Typen sind "varlena"-Typen (d.h. die ersten vier
+   Bytes geben die Länge an, gefolgt von den Daten). Daher ist der
+   tatsächlich belegte Platz immer etwas mehr als die deklarierte
+   Feldgröße. Allerdings wird unter Umständen auf diese Datentypen
+   Datenkompression durch das TOAST- Verfahren angewendet, womit der
+   tatsächlich belegte Platz auch geringer als erwartet ausfallen kann.
+   
+   CHAR(n) ist geeignet für die Speicherung von Zeichenketten ähnlicher
+   Länge. VARCHAR(n) ist geeignet für Zeichenketten abweichender Längen,
+   setzt jedoch eine maximale Länge. TEXT setzt keine Längengrenze,
+   allerdings gibt es eine systembedingte Obergrenze von 1 GB. BYTEA ist
+   für binäre Daten, besonders für Werte, die NULL-Bytes haben. Die
+   erwähnten Typen weisen ähnliche Performanzeigenschaften auf.
+   
+    4.15.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des
+    Werts?
     
-   Du testest die Spalte mit IS NULL und IS NOT NULL.
+   PostgreSQL bietet einen SERIAL-Datentyp. Dieser erzeugt automatisch
+   eine Sequenz und einen Index auf die angegebene Spalte. Zum Beispiel:
+      CREATE TABLE person (
+          id   SERIAL,
+          name TEXT
+      )
+
+   wird automatisch in:
+      CREATE SEQUENCE person_id_seq;
+      CREATE TABLE person (
+        id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
+        name TEXT
+      );
+      CREATE UNIQUE INDEX person_id_key ON person ( id );
+
+   umgewandelt.
    
-    4.15) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
+   Die create_sequence Man-Page liefert weitere Informationen über
+   Sequenzen. Es ist auch möglich, den OID-Wert jeder Spalte als
+   einmaligen Wert einzusetzen. Sollten Sie allerdings die Datenbank
+   exportieren und reimportieren wollen, müssen Sie die Option -o von
+   pg_dump bzw. COPY WITH OIDS verwenden, um die OIDs beizubehalten.
+   
+    4.15.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
     
-Typ             interner Name   Bemerkungen
---------------------------------------------------
-CHAR            char            1 Zeichen
-CHAR(#)         bpchar          mit Leerzeichen gefüllt bis zur angegebenen Län
-ge
-VARCHAR(#)      varchar         Die Größe legt die Maximallänge fest, kein Ausf
-üllen mit Leerzeichen
-TEXT            text            Die Länge wird nur durch die maximale Zeilenlän
-ge beschränkt
-BYTEA           bytea           Bytearray mit variabler Länge
+   Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten
+   SERIAL-Wert von dem Sequenzobjekt vor der Auszuführung einer
+   INSERT-Anweisung anzufordern und ihn dann explizit in die
+   INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.15.1
+   könnte dieser Vorgang in einer Pseudosprache so aussehen:
+    new_id = output of execute("SELECT nextval('person_id_seq')");
+    execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
+
+   Danach stünde der neue Wert in der Variablen new_id für die Verwendung
+   in weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel
+   zur Tabelle 'person'). Bitte beachten Sie, dass der Name des
+   automatisch erstellten SEQUENCE-Objektes folgenden Name hat:
+   __seq wobei 'table' und 'serialcolumn' die Namen
+   der jeweils betreffenden Tabelle / Spalte darstellen.
+   
+   Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den
+   automatisch eingefügten SERIAL-Wert mit der currval()-Funktion
+   zurückgeben lassen:
+    execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
+    new_id = output of execute("SELECT currval('person_id_seq')");
 
-   Du mußt die internen Namen benutzen, wenn Du interne Operationen
-   durchführen willst.
+   Schließlich besteht noch die Möglichkeit, den von einer
+   INSERT-Anweisung zurückgelieferten OID-Wert als einmaligen Wert zu
+   verwenden. In Perl mit dem DBD::Pg-Modul von Edmund Mergl wird der
+   OID-Wert nach einem $sth->excute() über $sth->{pg_oid_status}
+   zurückgeliefert.
+   
+    4.15.3) Führen currval() und nextval() zu einer Race-Condition mit anderen
+    Nutzern?
+    
+   Nein. Die Funktionen liefern einen Wert zurück, der von Ihrem Backend
+   bestimmt wird, und der anderen Benutzern nicht zur Verfügung steht.
    
-   Die letzten vier Typen sind "varlena"-Typen (d.h. die ersten vier
-   Bytes geben die Länge an, gefolgt von den Daten). CHAR(#) belegt die
-   maximale Anzahl von Bytes, unabhängig davon, wieviele Daten im Feld
-   gespeichert werden. TEXT, VARCHAR(#) und BYTEA haben alle eine
-   variable Länge auf dem Datenträger, deshalb gibt es einen leichten
-   Geschwindigkeitsnachteil bei der Nutzung dieser Typen. Genauer, der
-   Nachteil gilt für den Zugriff auf alle Spalten nach der ersten Spalte
-   dieses Typs.
-   
-    4.16) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des
-    Inhalts?
-    
-   PostgreSQL unterstützt einen SERIAL Datentyp. Er erzeugt automatisch
-   eine Sequenz und einen Index auf die Spalte. Siehe die create_sequence
-   Man-Page für weitere Informationen über Sequenzen. Du kannst aber auch
-   das Oid Feld jeder Zeile als eindeutigen Wert nutzen. Jedoch mußt Du,
-   falls Du Deine Datenbank einmal komplett ausgeben und wieder einlesen
-   willst, die pg_dump's -o oder die copy with oids Option benutzen, um
-   die Oids zu retten.
-   
-    4.17) Was ist ein Oid? Was ist ein Tid?
-    
-   Oids sind PostgreSQLs Antwort auf eindeutige Zeilen-IDs. Jede Zeile,
-   die in PostgreSQL erzeugt wird, bekommt eine eindeutige Oid. Alle
-   Oids, die während initdb erzeugt werden, sind kleiner als 16384 (nach
-   backend/access/transam.h). Alle Oids, die durch den Benutzer erzeugt
+    4.15.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht
+    zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
+    Sequenz-/SERIAL-Spalte?
+    
+   Um die konkurrente Verarbeitung zu verbessern, werden Sequenzwerte
+   nach Bedarf an laufende Transaktionen zugeteilt und erst beim Abschluß
+   der Transaktion gesperrt. Durch abgebrochene Transaktionen werden
+   Lücken in der Sequenznummerierung verursacht.
+   
+    4.16) Was ist ein OID? Was ist ein TID?
+    
+   OIDs sind PostgreSQLs Antwort auf eindeutige Zeilen-IDs. Jede Zeile,
+   die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID. Alle
+   OIDs, die durch initdb erzeugt werden, sind kleiner als 16384 (siehe
+   include/access/transam.h). Alle OIDs, die durch den Benutzer erzeugt
    werden, sind gleich oder größer als dieser Wert. Standardmäßig sind
-   all diese Oids nicht nur innerhalb einer Tabelle oder Datenbank,
-   sondern in der gesamten PostgreSQL Installation eindeutig.
-   
-   PostgreSQL benutzt Oids in seinen internen Systemtabellen, um Zeilen
-   zwischen den Tabellen zu verbinden. Diese Oids können zur
-   Identifikation spezifischer Benutzerzeilen und in Joins genutzt
-   werden. Es wird empfohlen, den Spaltentyp OID zu nutzen, um Oids-Werte
-   zu speichern. Siehe die sql(l) Man-Page, um die anderen internen
-   Spalten kennenzulernen. Du kannst einen Index auf ein Oid-Feld
-   erzeugen, um schnelleren Zugriff zu erreichen.
-   
-   Oids werden allen neuen Zeilen von einem zentralen Bereich, der von
-   allen Datenbanken genutzt wird, zugewiesen. Es gibt keinen Grund,
-   warum Du nicht die Oid ändern, oder eine Kopie der Tabelle mit den
-   originalen Oids anlegen könntest.
-        CREATE TABLE new_table(old_oid oid, mycol int);
-        SELECT INTO new SELECT old_oid, mycol FROM old;
-        COPY new TO '/tmp/pgtable';
-        DELETE FROM new;
-        COPY new WITH OIDS FROM '/tmp/pgtable';
+   all OIDs nicht nur innerhalb einer Tabelle oder Datenbank, sondern in
+   der gesamten PostgreSQL-Installation einmalig.
+   
+   PostgreSQL benutzt OIDs in seinen internen Systemtabellen, um Zeilen
+   in JOINs zwischen Tabellen zu verknüpfen. Es ist möglich, einen Index
+   für die OID-Spalte zu erstellen, wodurch schnellere Zugriffszeiten
+   erreicht werden können. Es wird empfohlen, OID-Werte in Spalten vom
+   Typ OID zu speichern.
+   
+   OIDs werden allen neuen Zeilen von einem zentralen Bereich, der von
+   allen Datenbanken genutzt wird, zugewiesen. Nichts hindert Sie daran,
+   die OID zu ändern, oder eine Kopie der Tabelle mit den originalen Oids
+   anzulegen:
+      CREATE TABLE new_table(old_oid OID, mycol INT);
+      SELECT INTO new SELECT old_oid, mycol FROM old;
+      COPY new TO '/tmp/pgtable';
+      DELETE FROM new;
+      COPY new WITH OIDS FROM '/tmp/pgtable';
 
-   Tids werden genutzt, um spezifische physische Zeilen mit Block und
-   Versatzwert zu identifizieren. Tids ändern sich, wenn Zeilen geändert
-   oder neu geladen werden. Sie werden von Index-Einträgen genutzt, um
-   die Zeilen physisch zu adressieren.
-   
-    4.18) Was ist die Bedeutung der verschiedenen Ausdrücke, die in PostgreSQL
+    4.17) Welche Bedeutung haben die verschiedenen Ausdrücke, die in PostgreSQL
     benutzt werden (z.B. attribute, class,...)?
     
    Einige der Quelltexte und die ältere Dokumentation nutzen allgemeine
@@ -996,49 +1078,166 @@ BYTEA           bytea           Bytearray mit variabler L
      * portal, cursor
      * range variable, table name, table alias
        
-    4.19) Wieso bekomme ich einen Fehler: "FATAL: palloc failure: memory
-    exhausted?"
+   Eine allgemeine Liste der Datenbank-Terminologie erhalten Sie hier:
+   http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
+   /glossary.html (engl.).
+   
+    4.18) Wieso bekomme ich einen Fehler: "ERROR: Memory exhausted in
+    AllocSetAlloc()"?
     
-   Möglicherweise ist der virtuelle Speicher verbraucht oder Dein Kernel
-   hat eine niedrige Grenze für bestimmte Ressourcen. Versuche dieses,
-   bevor Du den postmaster startest:
+   Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System
+   oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen.
+   Probieren Sie vor dem Start von postmaster folgendes:
+      ulimit -d 262144
+      limit datasize 256m
 
-        ulimit -d 65536
-        limit datasize 64m
+   Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich
+   ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments
+   für Prozesse erhöht werden und eventuell die erfolgreiche Ausführung
+   der Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-CLient
+   haben, weil das Backend zu viele Daten zurückliefert, versuchen Sie
+   dies vor dem Start des SQL-Clients.
+   
+    4.19) Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft?
+    
+   Geben Sie in psql SELECT VERSION(); ein.
+   
+    4.20) Bei "large-object"-Operationen kommt die Fehlermeldung: "invalid
+    large obj descriptor". Warum?
+    
+   Sie sollten die Anweisungen BEGIN WORK und COMMIT bei jeden Gebrauch
+   von Large Objects benutzen. Also um lo_open ... lo_close.
+   
+   Derzeit erzwingt PostgreSQL diese Regel, indem es die Handles der
+   Large Objects beim COMMIT der Transaktion schließt. So führt der erste
+   Versuch, etwas mit dem Large Object zu machen, zu einer Meldung
+   "invalid large obj descriptor". Solange Sie keine Transaktionen
+   benutzen, wird der Code, der in älteren PostgreSQL-Versionen
+   funktionierte, nun diese Fehlermeldung erzeugen.
+   
+   Falls Sie eine Client-Schnittstelle wie ODBC benutzen, kann es sein,
+   dass die auto-commit-Option ausgeschaltet werden muss.
+   
+    4.21) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die
+    aktuelle Uhrzeit enthalten soll?
+    
+   Dazu verwenden Sie CURRENT_TIMESTAMP:
+      CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
+
+    4.22) Warum sind meine Unterabfragen (subqueries), die IN verwenden, so
+    langsam?
+    
+   Derzeit werden Unterabfragen mit der äusseren Abfrage verbunden, indem
+   für jede Reihe der äusseren Query die Ergebnisse der Unterabfrage
+   sequentiell geprüft werden. Um dies zu vermeiden, kann man IN durch
+   EXISTS ersetzen, z.B.:
+      SELECT *
+        FROM tabelle_1
+       WHERE spalte1 IN (SELECT spalte2 FROM tabelle_2)
+
+   in:
+      SELECT *
+        FROM tabelle_1
+       WHERE EXISTS (SELECT spalte2 FROM tabelle_2 WHERE spalte1 = spalte2)
+
+   Damit diese Abfrage effizient durchgeführt wird, sollte für 'spalte2'
+   ein Index angelegt worden sein. Die Einschränkung von Abfragen mit IN
+   soll in einer künftigen PotsgreSQL-Version behoben werden.
+   
+    4.23) Wie führe ich einen OUTER JOIN durch?
+    
+   PostgreSQL ab der Version 7.1 unterstützt OUTER JOINs nach dem SQL-
+   Standardsyntax. Hier zwei Beispiele:
+      SELECT *
+        FROM tabelle_1 t1
+             LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)
+
+   bzw.:
+      SELECT *
+        FROM tabelle_1 t1
+             LEFT OUTER JOIN tabelle_2 t2 USING (spalte)
+
+   Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die
+   Spalte 'spalte' und geben außerdem alle unverknüpften Zeilen in
+   tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)
+   zurück. Ein FULL JOIN würde dagegen alle verknüpften Zeilen sowie
+   jeweils alle unverknüpften Zeilen aus den beiden Tabellen verknüpfen.
+   Die Angabe von OUTER ist nicht zwingend und kann in LEFT, RIGHT und
+   FULL-Verknüpfungen weggelassen werden. Normale Verknüpfungen sind
+   INNER JOINs.
+   
+   In früheren Versionen von PostgreSQL können OUTER JOINs mittels UNION
+   und NOT IN simuliert werden. Zum Beispiel 'tabelle_1' und 'tabelle_2'
+   können als LEFT OUTER JOIN auch so verknüpft werden:
+      SELECT t1.spalte1, t2.spalte2
+        FROM tabelle_1 t1, tabelle_2 t2
+       WHERE t1.spalte1 = t2.spalte1
+       UNION ALL
+      SELECT t1.spalte1, NULL
+        FROM tabelle_1 t1
+       WHERE t1.spalte1 NOT IN (SELECT t2.spalte1 FROM tabelle_2 t2)
+       ORDER BY spalte1
 
-   Je nach Deiner eingesetzten Shell mag nur einer dieser Befehle
-   funktionieren. Aber es wird die Grenze des Datensegments für Prozesse
-   erhöhen und vielleicht läuft so Dein Query durch. Dieser Befehl wirkt
-   sich auf den aktuellen Prozess und alle seine Unterprozesse aus, die
-   nach diesem Befehl gestartet werden. Falls Du ein Problem mit dem
-   SQL-CLient hast, weil das Backend zu viele Daten zurückliefert,
-   versuche diesen Befehl, bevor Du den SQL-Client startest.
-   
-    4.20) Wie kann ich feststellen, welche PostgreSQL-Version ich laufen habe?
-    
-   Gib in psql SELECT version(); ein
-   
-    4.21) Beim Arbeiten mit "large-object" kommt die Fehlermeldung: invalid
-    large obj descriptor. Warum?
-    
-   Du solltest die Befehle BEGIN WORK und COMMIT bei jeden Gebrauch von
-   Large Objects benutzen. Also um lo_open ... lo_close.
-   
-   Die Dokumentation hat schon immer darauf hingewiesen, daß lo_open in
-   eine Transaktion eingebunden werden muß, aber die PostgreSQL Versionen
-   vor 6.5 haben diese Regel nicht erzwungen. Statt dessen scheiterten
-   sie gelegentlich, wenn Du diese Regel gebrochen hattest.
-   
-   Das aktuelle PostgreSQL erzwingt diese Regel, indem es die Handles der
-   Large Objects beim COMMIT der Transaktion schließt, was sofort nach
-   dem lo_open passiert, wenn Du nicht innerhalb einer Transaktion bist.
-   So führt der erste Versuch, etwas mit dem Large Object zu machen zu
-   einem invalid large obj descriptor. Also wird der Code, der bisher
-   benutzt wurde, nun diese Fehlermeldung erzeugen, wenn Du keine
-   Transaktionen benutzt hast.
-   
-   Falls Du eine Client-Schnittstelle wie ODBC benutzt, kann es sein, daß
-   Du auto-commit off setzen mußt.
+    4.24) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?
+    
+   Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine
+   Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische
+   Systemkataloge lädt, ist eine datenbankübergreifende Abfrage nicht
+   möglich.
+   
+   contrib/dblink ermöglicht datenbankübergreifende Abfragen.
+   
+   Es ist natürlich möglich, dass eine Client-Anwendung gleichzeitige
+   Verbindungen zu verschiedenen Datenbanken aufbaut und selber
+   Datensätze zusammenfügt.
+   
+    4.25) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
+    zurückgeben lassen?
+    
+   "Result sets" können mittels refcursors von PL/PgSQL-Funktionen
+   zurückgegeben werden. Vgl.:
+   http://www.postgresql.org/idocs/index.php?plpgsql-cursors.html
+   (Abschnitt 23.7.3.3).
+   
+    4.26) Warum kann ich temporäre Tabellen in PL/PgSQL-Funktionen nicht
+    zuverlässig erstellen bzw. löschen?
+    
+   PL/PgSQL verarbeitet die Inhalte einer Funktion in einer Cache. Dies
+   hat eine unangenehme Nebenwirkung, nämlich dass wenn eine PL/PgSQL-
+   Funktion auf eine temporäre Tabelle zugreift, und diese Tabelle
+   anschließend gelöscht bzw. neu erstellt wird, die Funktion
+   fehlschlagen wird, da die gecachte Funktionsinhalte noch auf die alte
+   temporäre Tabelle zeigen.
+   
+   Die Lösung für diese Probleme besteht darin, in der Funktion mittels
+   EXECUTE auf temporäre Tabellen zuzugreifen. Diese bewirkt, dass bei
+   jedem Funktionsruf die betreffende Abfrage von PL/PgSQL neu geparst
+   wird.
+   
+    4.27) Welche Möglichkeiten zur Datenbank-Replikation gibt es?
+    
+   Es existieren mehrere Ansätze zur Master/Slave-Replikation in
+   PostgreSQL. In diesen werden Datenänderungen in der Master-Datenbank
+   durchgeführt und an Slave-Datenbanken weitergeleitet. Informationen
+   über diese Lösungen befinden sich auf der folgenden Seite (unten):
+   http://gborg.PostgreSQL.org/genpage?replication_research .
+   
+   Eine Multi-Master-Lösung befindet sich in der Entwicklung. Näheres
+   dazu befindet sich hier:
+   http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php .
+   
+    4.28) Welche Möglichkeiten zur Verschlüsselung gibt es?
+    
+     * contrib/pgcrypto enthält diverse Funktionen für die Benützung mit
+       SQL-Abfragen;
+     * die einzige Möglichkeit, Kommunikationen zwischen Client und
+       Server zu verschlüsseln, ist durch die Anwendung von hostssl in
+       pg_hba.conf;
+     * Die Passwörter der Datenbanknutzer werden ab Version 7.3
+       automatisch verschlüsselt (in früheren Versionen muß der Parameter
+       PASSWORD_ENCRYPTION in postgresql.conf explizit eingeschaltet
+       werden);
+     * der Server läuft auf einem verschlüsselten Dateisystem.
      _________________________________________________________________
    
                             PostgreSQL erweitern
@@ -1046,30 +1245,39 @@ BYTEA           bytea           Bytearray mit variabler L
     5.1) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich sie in
     psql aufrufe, kommt ein core dump. Warum?
     
-   Dieses Problem kann viele Ursachen haben. Teste deine Funktion zuerst
-   in einem Extra-Testprogramm. Stelle außerdem sicher, daß Deine
-   Funktion nicht etwa elog-Nachrichten sendet, wenn der Client Daten
-   erwartet, wie in den type_in() oder type_out() Funktionen
+   Dieses Problem kann viele Ursachen haben. Testen Sie Ihre Funktion
+   zuerst in einem eigenen Testprogramm.
    
-    5.2) Was bedeutet die Meldung: NOTICE:PortalHeapMemoryFree: 0x402251d0 not
-    in alloc set!?
+    5.2) Wie kann ich praktische neue Typen und Funktionen zu PostgreSQL
+    hinzufügen?
     
-   Du pfreest etwas, das Du nicht palloct hast! Stelle sicher, daß Du
-   nicht malloc/free und palloc/pfree durcheinanderwürfelst.
+   Senden Sie Ihre Beiträge an die Mailing Liste pgsql-hackers, und sie
+   werden nach Prüfung eventuell ins contrib/ Verzeichnis des Quellcodes
+   aufgenommen werden.
    
-    5.3) Wie kann ich ein paar elegante neue Feldtypen und Funktionen zu
-    PostgreSQL beitragen?
+    5.3) Wie schreibe ich eine Funktion in C, die einen Tupel zurückliefert?
     
-   Sende Deine Erweiterungen zur pgsql-hackers Mailing Liste, und sie
-   werden eventuell im contrib/ Verzeichnis enden.
+   Ab PostgreSQL 7.3 werden Funktionen, die Tupel zurückliefern, in C,
+   PL/PgSQL und SQL unterstützt. Der Programmer's Guide enthält weitere
+   Informationen dazu. Ein Bespiel einer solchen Funktion befindet sich
+   in contrib/tablefunc.
    
-    5.4) Wie schreibe ich eine Funktion in C, die einen Tuple zurückliefert?
+    5.4) Ich habe eine der Quellendateien geändert. Warum macht sich die
+    Änderung beim erneuten Kompilieren nicht bemerkbar?
     
-   Das erfordert derart extreme Genialität, daß die Autoren es niemals
-   versucht haben, obwohl es im Prinzip zu machen wäre.
+   Die Makefiles enthalten nicht die richtigen Abhängigkeiten für
+   include- Dateien. Sie müssen ein "make clean" und dann ein weiteres
+   "make" ausführen. Wenn Sie gcc benutzen, können Sie die
+   "--enable-depend"-Option des configure- Skripts benutzen, damit der
+   Compiler die Abhängigkeiten automatisch ermittelt.
+     _________________________________________________________________
    
-    5.5) Ich habe eine der Quellendateien geändert. Warum macht sich die
-    Änderung beim erneuten Compilerlauf nicht bemerkbar?
+    Anmerkungen des Übersetzers
     
-   Die Makefiles finden nicht die richtigen Abhängigkeiten. Du mußt ein
-   make clean und dann ein weiteres make machen.
+   Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher
+   liegt die Übersetzung nicht immer auf dem aktuellsten Stand.
+   
+   Über Verbesserungshinweise und Korrekturvorschläge sowie
+   Verständnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch
+   allgemeine Fragen zu PostgreSQL gerne entgegen, kann aber leider keine
+   zeitige Antwort garantieren.
index 6c40523afce65a0e6600e21b192bcd280902a0a9..66b093aba5e2f36f0089688de7d7a65c734f70d3 100644 (file)
-<HTML>
-<HEAD>
-<TITLE>PostgreSQL FAQ>
-</HEAD>
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#A00000" ALINK="#0000FF">
-<H1>
-Häufig gestellte Fragen (FAQ) zu PostgreSQL
-</H1>
-

-Last updated:      Sat Jul 10 00:37:57 EDT 1999
-<P>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>PostgreSQL FAQ>
+</head>
+
+<h1>
+Häufig gestellte Fragen (FAQ) zu PostgreSQL
+
+<p>
 Current maintainer:    Bruce Momjian (
-

-Deutsche Übersetzung von Karsten Schulz ([email protected])  
-

-Letzte Aktualisierung der deutschen Übersetzung:  Don, den 05.08.1999, 09:00 CET
-

-Die aktuellste Version dieses Dokuments kann auf der PostgreSQL Website http://www.PostgreSQL.org angesehen werden.
-

-Linux-spezifische Fragen werden in http://www.PostgreSQL.org/docs/faq-linux.html
-beantwortet (deutsche Übersetzung in Arbeit!).

-
-Irix-spezifische Fragen werden in 
-href="http://www.PostgreSQL.org/docs/faq-irix.html">http://www.PostgreSQL.org/docs/faq-irix.html beantwortet.
-

-
-HPUX-spezifische Fragen werden in 
-href="http://www.PostgreSQL.org/docs/faq-hpux.shtml">http://www.PostgreSQL.org/docs/faq-hpux.shtml beantwortet.
-

-
-

-
-

Allgemeine Fragen

-
-1.1)    Was ist PostgreSQL?
-1.2)    Welches Copyright liegt auf PostgreSQL?
-1.3)    Auf welchen Unix-Plattformen läuft PostgreSQL?
-1.4)    Welche Nicht-Unix-Versionen sind verfügbar?
-1.5)    Woher bekomme ich PostgreSQL?
-1.6)    Wo bekomme ich Support für PostgreSQL?
-1.7)    Was ist die neueste Version von PostgreSQL?
-1.8)    Welche Dokumente sind für PostgreSQL verfügbar?
-1.9)    Wie erfahre ich etwas über bekannte Fehler oder fehlende Eigenschaften von PostgreSQL?
-1.10)  Wie kann ich SQL lernen?
-1.11)  Ist PostgreSQL Y2K (Jahr 2000) fähig?
-1.12)  Wie kann ich am Entwicklerteam teilnehmen?
-1.13)  Wie sende ich einen Fehler-Bericht?
-1.14)  Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
-
-
-

Fragen zu Benutzerprogrammen

-
-2.1)    Gibt es ODBC-Treiber für PostgreSQL?
-2.2)    Welche Werkzeuge gibt es, um PostgreSQL-Datenbanken über Webseiten
-verfügbar zu machen?
-2.3)    Hat PostgreSQL eine grafische Benutzerschnittstelle?
-Einen Report-Generator? Eine eingebaute Query-Schnittstelle?
-2.4)    Welche Sprachen sind für die Kommunikation mit PostgreSQL verfügbar?
-
-
-

Administrative Fragen

-
-3.1)    Warum schlägt initdb fehl?
-3.2)    Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
-3.3)    Wenn ich den postmaster starte, bekomme ich einen Bad System Call oder eine core dumped Meldung. Warum?
-3.4)    Wenn ich versuche, den postmaster zu starten, bekomme ich eine IpcMemoryCreate Fehlermeldungen. Warum?
-3.5)    Wenn ich versuche, den postmaster zu starten, bekomme ich eine IpcSemaphoreCreate Fehlermeldungen. Warum?
-3.6)    Wie verhindere ich, daß andere Hosts auf meine PostgreSQL Datenbanken zugreifen?
-3.7)    Warum kann ich mich nicht von einer anderen Maschine mit meiner Datenbank verbinden?
-3.8)    Warum kann ich nicht als root auf die Datenbank zugreifen?
-3.9)    Alle meine Server stürzen bei gleichzeitigem Tabellenzugriff ab. Warum?
-3.10)  Wie optimiere ich die Datenbankmaschine für bessere Leistung?
-3.11)  Welche Debugging/Fehlersuch-Hilfsmittel sind für PostgreSQL verfügbar?
-3.12)  Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine Verbindung versuche.  Warum?
-3.13)  Was sind die pg_psort.XXX Dateien in meinem Datenbank-Verzeichnis?
-3.14)  Wie richte ich eine Benutzergruppe (pg_group) ein?
-
-

Fragen zum Betrieb

-
-4.1)    Das System scheint Kommata, Dezimalpunkte und Datumsformate durcheinanderzubringen.
-4.2)    Was ist der genauer Unterschied zwischen Binary Cursors und Normal Cursors?
-4.3)    Wie wähle ich per SELECT nur die ersten paar Zeilen in einem Query aus?
-
-4.4)    Wie bekomme ich eine Liste der Tabellen oder anderen Dingen, die ich in psql sehen kann
-4.5)    Wie entferne ich eine Spalte von einer Tabelle?
-
-4.6)    Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?
-4.7)    Wieviel Plattenplatz benötigt eine Datenbank zur Speicherung einer Datendatei mit zeilenweisen Datensätzen?
-
-4.8)    Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank definiert sind?
-4.9)    Meine Queries sind langsam oder nutzen die Indizes nicht. Warum?
-4.10)  Auf welche Weise kann ich sehen, wie der Query-Optimierer meine Abfrage auswertet?
-4.11)  Was ist ein R-Tree Index?
-4.12)  Was ist "Genetic Query Optimization"?
-
-4.13)  Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei
-                           einer Suche mit Ignorierung der Groß- und Kleinschreibweisen?
-4.14)  Wie ermittle ich in einem Query, daß ein Feld NULL ist?
-4.15)  Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
-4.16)  Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Inhalts?
-
-4.17)  Was ist ein Oid? Was ist ein Tid?
-4.18)  Was ist die Bedeutung der verschiedenen Ausdrücke, die in PostgreSQL benutzt werden (z.B. attribute, class,...)?
-
-4.19)  Wieso bekomme ich einen Fehler: "FATAL:  palloc failure: memory exhausted?"
-4.20)  Wie kann ich feststellen, welche PostgreSQL-Version ich laufen habe?
-4.21)  Beim Arbeiten mit "Large-Objects" kommt die Fehlermeldung: invalid large obj descriptor.  Warum?
-
-

PostgreSQL erweitern

-
-5.1)    Ich habe eine benutzerdefinierte Funktion geschrieben.  Wenn ich sie in psql aufrufe, kommt ein core dump. Warum?
-5.2)    Was bedeutet die Meldung: NOTICE:PortalHeapMemoryFree: 0x402251d0 not in alloc set!?
-5.3)    Wie kann ich ein paar elegante neue Feldtypen und Funktionen zu PostgreSQL beitragen?
-5.4)    Wie schreibe ich eine Funktion in C, die ein Tuple zurückliefert?
-5.5)    Ich habe eine der Quellendateien geändert. Warum macht sich die Änderung beim erneuten Compilerlauf nicht bemerkbar?
-
-
-
-

Allgemeine Fragen

-

-name="1.1">1.1)    Was ist PostgreSQL?

-
-PostgreSQL ist eine Verbesserung des POSTGRES-Datenbank-Managementsystems, ein
-"Next-Generation" DBMS-Forschungsprototyp. Während PostgreSQL das leistungsfähige Datenmodell und
-die reichhaltigen Datentypen von POSTGRES beibehält, ersetzt es die PostQuel-Abfragesprache durch
-eine ausgedehnte Teilmenge von SQL. PostgreSQL ist frei und der komplette Quellcode ist verfügbar. 
-

-
-Die PostgreSQL-Entwicklung wird von einem Team von Internet-Entwickler durchgeführt, die alle an
-der PostgreSQL-Entwicklungs-Mailingliste teilnehmen. Der aktuelle Koordinator ist Marc G. Fournier
-([email protected]) (siehe unten, wie
-man sich anmelden kann). Dieses Team ist jetzt für alle aktuellen und zukünftigen Entwicklungen von PostgreSQL
-verantwortlich. 
-
-

-
-
-Die Autoren von PostgreSQL 1.01 waren Andrew Yu und Jolly Chen. Viele andere haben zur Portierung,
-zu den Tests, zur Fehlersuche und zur Verbesserung des Codes beigetragen.
-Der ursprüngliche Postgres-Code, von dem PostgreSQL abstammt, ist auf die Bemühungen von
-vielen Studierenden und Diplomanden, sowie Programmierern, die unter
-der Weisung des Professors Michael Stonebraker an der Universität von Kalifornien, Berkeley
-arbeiteteten, zurückzuführen.
-
-

-
-Der ursprüngliche Name der Software bei Berkeley war Postgres. Als die SQL-Funktionalität 1995
-hinzugefügt wurde, wurde sein Name zu Postgres95 geändert. Der Name wurde Ende 1996 zu
-PostgreSQL geändert. 
-

-
-

1.2) Welches Copyright liegt auf PostgreSQL?

-
-PostgreSQL steht unter folgendem COPYRIGHT (Originaltext):

-
-PostgreSQL Data Base Management System

-
-Copyright (c) 1994-6 Regents of the University of California

-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose, without fee, and without a written
-agreement is hereby granted, provided that the above copyright notice
-and this paragraph and the following two paragraphs appear in all
-copies.

-
-IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
-FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
-INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
-DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGE.

-
-THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER
-IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO
-OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
-MODIFICATIONS.

-
-Es gilt die Copyright-Klausel im Original! Informativ folgt hier eine
-Übersetzung. Die Übersetzung besitzt keinerlei rechtlichen Status.
-Insbesondere kann sich niemand auf diese Übersetzung berufen:
-

-
-PostgreSQL Datenbank Management System

 

-
-Copyright (c) 1994-6 Regents of the University of California

-
-Die Erlaubnis, diese Software und seine Unterlagen für jeden möglichen Zweck, ohne Gebühr und ohne
-eine schriftliche Vereinbarung zu benutzen, zu kopieren, zu ändern und zu verteilen wird hiermit
-bewilligt, vorausgesetzt daß der oben genannte Urheberrechtsvermerk und dieser Paragraph und die
-folgenden zwei Paragraphen in allen Kopien erscheinen. 

-
-IN KEINEM FALL IST DIE UNIVERSITÄT VON KALIFORNIEN GEGENÜBER JEDEM MÖGLICHEN BETEILIGTEN FÜR DIE DIREKTEN,
-INDIREKTEN, SPEZIELLEN, BEILÄUFIGEN ODER FOLGESCHÄDEN, EINSCHLIEßLICH DER VERLORENEN PROFITE
-VERANTWORTLICH, DIE AUS DEM GEBRAUCH VON DIESER SOFTWARE UND SEINEN UNTERLAGEN
-HERAUS ENTSTEHEN, SELBST WENN DIE UNIVERSITÄT VON KALIFORNIEN VON DER MÖGLICHKEIT SOLCHEN SCHADENS
-BENACHRICHTIGT WORDEN IST. 

-
-DIE UNIVERSITÄT VON KALIFORNIEN LEHNT SPEZIELL ALLE MÖGLICHE GARANTIEN AB,
-EINSCHLIESSLICH, ABER NICHT BEGRENZT AUF, DIE IMPLIZIERTEN GARANTIEN VON
-GESCHÄFTSNUTZEN UND EIGNUNG ZU EINEM BESTIMMTEN ZWECK. DIE SOFTWARE, DIE
-NACHSTEHEND BEREITGESTELLT WIRD, BASIERT AUF EINER "SO WIE SIE IST"-GRUNDLAGE, UND DIE UNIVERSITÄT
-VON KALIFORNIEN HAT KEINE VERPFLICHTUNGEN, WARTUNG, SUPPORT,
-AKTUALISIERUNGSVORGÄNGE, VERBESSERUNGEN ODER ÄNDERUNGEN ZUR VERFÜGUNG
-ZU STELLEN. 
-
-

1.3) Auf welchen Unix-Plattformen läuft PostgreSQL?

-
-Die Autoren haben PostgreSQL auf folgenden Plattformen kompiliert und getestet
-(einige dieser Kompilierungen benötigen den C-Compiler gcc):
-
    -
  •    aix -           IBM auf AIX 3.2.5 or 4.x
  • -
  •    alpha -         DEC Alpha AXP auf Digital Unix 2.0, 3.2, 4.0
  • -
  •    BSD44_derived - OS abgeleitet von 4.4-lite BSD (NetBSD, FreeBSD)
  • -
  •    bsdi -          BSD/OS 2.x, 3.x, 4.x
  • -
  •    dgux -          DG/UX 5.4R4.11
  • -
  •    hpux -          HP PA-RISC auf HP-UX 9.*, 10.*
  • -
  •    i386_solaris -  i386 Solaris
  • -
  •    irix5 -         SGI MIPS auf IRIX 5.3
  • -
  •    linux -         Intel i86
  • -                       Alpha
    -                       SPARC
    -                       PPC
    -                       M68k
    -
  •    sco -           SCO 3.2v5
  • -                      Unixware
    -
  •    sparc_solaris - SUN SPARC auf Solaris 2.4, 2.5, 2.5.1
  • -
  •    sunos4 -        SUN SPARC auf SunOS 4.1.3
  • -
  •    svr4 -          Intel x86 auf Intel SVR4 and MIPS
  • -
  •    ultrix4 -       DEC MIPS auf Ultrix 4.4
  • -
    -

    +
    +    

    Deutsche Übersetzung von Ian Barwick ([email protected]).

    +    Basiert teilweise auf einer Übersetzung von Karsten Schulz ([email protected]).

    +
    +    

    Letzte Aktualisierung der deutschen Übersetzung: Mo., den 21.10.2002, 23:00 CET

    +
    +    

    Die aktuellste Version dieses Dokuments liegt auf der PostgreSQL Website:

    +    
      +      
    • http://www.PostgreSQL.org/docs/faq-english.html (engl.)
    • +      
    • http://www.PostgreSQL.org/docs/faq-german.html (dt.)
    • +    
      +    

      Übersetzungen dieses Dokuments in andere Sprachen sowie plattform-

      +    spezifische FAQs können unter
      +    http://www.PostgreSQL.org/users-lounge/docs/faq.html
      +    eingesehen werden.

      +
      +
      +
      +Allgemeine Fragen
      +
      +1.1) Was ist PostgreSQL? Wie wird es ausgesprochen?
      +1.2) Welchem Copyright unterliegt PostgreSQL?
      +1.3) Auf welchen Unix-Plattformen läuft PostgreSQL?
      +1.4) Welche Nicht-Unix-Versionen sind verfügbar?
      +1.5) Woher bekomme ich PostgreSQL?
      +1.6) Wo bekomme ich Support für PostgreSQL?
      +1.7) Was ist die neueste Version von PostgreSQL?
      +1.8) Welche Dokumentation ist für PostgreSQL verfügbar?
      +1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
      +1.10) Wie kann ich SQL lernen?
      +1.11) Ist PostgreSQL Y2K (Jahr 2000) fähig?
      +1.12) Wie kann ich im Entwicklerteam mitarbeiten?
      +1.13) Wie sende ich einen Fehler-Bericht?
      +1.14) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
      +1.15) Wie kann ich PostgreSQL finanziell unterstützen?
      +
      +Fragen zu Benutzerprogrammen
      +
      +2.1) Gibt es ODBC-Treiber für PostgreSQL?
      +2.2) Welche Werkzeuge gibt es, um Web-Seiten mit PostgreSQL zu verbinden?
      +2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
      +Einen Report-Generator? Eine eingebaute Query-Schnittstelle?
      +2.4) Welche Programmiersprachen können mit PostgreSQL kommunizieren?
      +
      +
      +Administrative Fragen
      +
      +3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
      +3.2) Wenn ich den postmaster starte, erhalte ich die Nachricht "Bad System Call" bzw. "core dumped". Warum?
      +3.3) Wenn ich versuche, den postmaster zu starten, bekomme ich "IpcMemoryCreate"-Fehlermeldungen. Warum?
      +3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich "IpcSemaphoreCreate"-Fehlermeldungen. Warum?
      +3.5) Wie regle ich Zugriffe von anderen Rechnern?
      +3.6) Wie optimiere ich die Datenbank für bessere Leistung?
      +3.7) Welche Debugging-Funktionen sind bei PostgreSQL verfügbar?
      +3.8) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine Verbindung aufzubauen versuche. Warum?
      +3.9) Was befindet sich im Verzeichnis pgsql_tmp/?
      +3.10) Warum muß ich bei jeder neuen Hauptversion von PostgreSQL
      +     die komplette Datenbank exportieren und anschließend reimportieren?
      +
      +Fragen zum Betrieb
      +
      +4.1) Worin besteht der Unterschied zwischen Binary Cursors und Normal Cursors?
      +4.2) Wie wähle ich per SELECT-Anweisung nur die
      +     ersten paar Zeilen in einer Abfrage aus?
      +4.3) Wie bekomme ich eine Liste der Tabellen oder anderen Dinge, die ich in psql sehen kann?
      +4.4) Wie entferne ich eine Spalte aus einer Tabelle?
      +4.5) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?
      +4.6) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen Textdatei abzuspeichern?
      +4.7) Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank definiert sind?
      +4.8) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?
      +4.9) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer ("GEQO") meine Abfrage auswertet?
      +4.10) Was ist ein R-Tree Index?
      +4.11) Was ist der "Genetic Query Optimizer"?
      +4.12) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer
      +    Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende
      +    ich bei solchen Suchabfragen einen Index?
      +4.13) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
      +4.14) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
      +4.15.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Wertes?
      +4.15.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
      +4.15.3) Führen currval() und nextval() zu einer Race-Condition mit anderen
      +     Nutzern?
      +4.15.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht
      +     zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
      +     Sequenz-/SERIAL-Spalte?
      +4.16) Was ist ein OID? Was ist ein TID?
      +4.17) Welche Bedeutung haben die verschiedenen Ausdrücke, die in PostgreSQL benutzt werden (z.B. attribute, class,...)?
      +4.18) Wieso bekomme ich den Fehler: "FATAL: Memory exhausted in AllocSetAlloc()"?
      +4.19) Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft?
      +4.20) Bei "large-object"-Operationen kommt die Fehlermeldung: "invalid large obj descriptor". Warum?
      +4.21) Wie kann ich eine Spalte erstellen, deren Default-Wert immer
      +    die aktuelle Uhrzeit enthalten soll?
      +4.22) Warum sind meine Unterabfragen (subqueries), die IN verwenden,
      +    so langsam?
      +4.23) Wie führe ich einen OUTER JOIN durch?
      +4.24) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?
      +4.25) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
      +    zurückgeben lassen?
      +4.26) Warum kann ich temporäre Tabellen in PL/PgSQL-Funktionen nicht
      +    zuverlässig erstellen bzw. löschen?
      +4.27) Welche Möglichkeiten zur Datenbank-Replikation gibt es?
      +4.28) Welche Möglichkeiten zur Verschlüsselung gibt es?
      +
      +
      +PostgreSQL erweitern
      +
      +5.1) Ich habe eine benutzerdefinierte Funktion geschrieben.  Wenn ich sie in psql aufrufe, kommt ein core dump. Warum?
      +5.2) Wie kann ich praktische neue Typen und Funktionen zu PostgreSQL
      +    hinzufügen?
      +5.3) Wie schreibe ich eine Funktion in C, die einen Tupel zurückliefert?
      +5.4) Ich habe eine der Quellendateien geändert. Warum macht sich die Änderung beim erneuten Kompilieren nicht bemerkbar?
      +
      +
      +
      +    Allgemeine Fragen
      +    

      1.1) Was ist PostgreSQL? Wie wird es ausgesprochen?

      +    

      Die (englische) Aussprache ist "Post-Gres-Q-L".

      +
      +    

      PostgreSQL ist eine Weiterentwicklung des POSTGRES-Datenbank-Systems,

      +    eines zukunftsweisenden DBMS-Forschungsprototyps. Während PostgreSQL
      +    das leistungsfähige Datenmodell und die reichhaltigen Datentypen
      +    von POSTGRES beibehält, ersetzt es dessen PostQuel-Abfragesprache durch
      +    eine erweiterte Teilmenge von SQL. PostgreSQL und dessen kompletter
      +    Quellcode sind frei und öffentlich verfügbar.

      +
      +    

      Die PostgreSQL-Entwicklung wird von einem Entwickler-Team durchgeführt,

      +    die alle Teilnehmer der PostgreSQL-Entwicklungs-Mailingliste
      +    sind. Der aktuelle Koordinator ist Marc G. Fournier
      +    ([email protected]) (Anmeldemöglichkeit: siehe unten).
      +    Dieses Team ist für die Gesamtentwicklung von PostgreSQL
      +    verantwortlich.

      +
      +    

      Die Autoren von PostgreSQL 1.01 waren Andrew Yu und Jolly Chen. Viele

      +    andere haben zur Portierung, zum Testen, zur Fehlersuche und zur
      +    Verbesserung des Codes beigetragen. Der ursprüngliche Postgres-Code,
      +    von dem PostgreSQL abstammt, ist auf die Arbeit von vielen
      +    Studierenden und Diplomanden sowie Programmierern zurückzuführen,
      +    die unter der Leitung des Professors Michael Stonebraker an der
      +    Universität von Kalifornien, Berkeley arbeiteten.

      +
      +    

      Der ursprüngliche Name der Software in Berkeley war Postgres. Als die

      +    SQL-Funktionalität 1995 hinzugefügt wurde, wurde sein Name zu
      +    Postgres95 geändert. Der Name wurde Ende 1996 in PostgreSQL geändert.

      +
      +    

      1.2).Welchem Copyright unterliegt PostgreSQL?

      +
      +    

      PostgreSQL unterliegt folgendem COPYRIGHT (Originaltext):

      +
      +    

      PostgreSQL Data Base Management System

      +
      +    

      Portions copyright (c) 1996-2002, PostgreSQL Global Development

      +    Group Portions Copyright (c) 1994-6 Regents of the University of
      +    California

      +
      +    

      Permission to use, copy, modify, and distribute this software

      +    and its documentation for any purpose, without fee, and without a
      +    written agreement is hereby granted, provided that the above
      +    copyright notice and this paragraph and the following two
      +    paragraphs appear in all copies.

      +
      +    

      IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY

      +    PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
      +    DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS
      +    SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
      +    CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

      +
      +    

      THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY

      +    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
      +    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
      +    SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE
      +    UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
      +    SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

      +
      +    

      Bei der obigen Lizenz handelt es sich um die BSD-Lizenz, die klassiche

      +    Open-Source-Lizenz. Sie schränkt die Verwendung des Quellcodes in
      +    keine Weise ein. Wir mögen diese Lizenz und haben nicht vor, sie
      +    zu ändern.

      +
      +    

      Es gilt die Copyright-Klausel im Original!

      +
      +    

      1.3) Auf welchen Unix-Plattformen läuft PostgreSQL?

      +    

      Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen

      +    Plattform eingesetzt werden. Diejenigen Plattformen, die bei der
      +    jeweiligen Versionsfreigabe getestet wurden, sind in den Installations-
      +    Anleitungen aufgelistet.

      +
      +    

      1.4) Welche Nicht-Unix-Portierungen sind verfügbar?

      +
      +    

      Client

      +
      +    

      Es ist möglich, die libpq C-Bibliothek, psql sowie andere Client-

      +    Anwendungen und Schnittstellen für den Einsatz auf MS-Windows-Plattformen
      +    zu kompilieren. In diesem Fall läuft der Client auf MS-Windows und steht
      +    über TCP/IP mit einem Server in Verbindung, der auf einer der
      +    unterstützten Unix-Plattformen läuft. Die Distribution enthält
      +    die Datei win32.mak, mit der Win32 libpq-Bibliothek und psql erzeugt
      +    werden können.

      +
      +    

      Server

      +
      +    

      Der Datenbankserver selber kann mit Hilfe der Cygwin-Umgebung

      +    (Unix/NT-Portierungsbibliotheken) auf Windows NT/2000 zum Laufen
      +    gebracht werden. Hierzu bitte lesen Sie die in der Distribution
      +    enthaltene Datei pgsql/doc/FAQ_MSWIN oder die MS-Windows-FAQ unter
      +    http://www.PostgreSQL.org/docs/faq-mswin.html.

      +
      +    

      Eine eigenständige Portierung auf MS Win NT/2000/XP befindet sich

      +    in Vorbereitung.

      +
      +    

      1.5) Woher bekomme ich PostgreSQL?

      +
      +    

      Der zentrale FTP-Server für PostgreSQL ist der ftp-Server

      +    ftp://ftp.postgreSQL.org/pub. Weitere Mirror-Sites sind auf der
      +    PostgreSQL-Website aufgelistet.

      +
      +    

      1.6) Wo bekomme ich Support für PostgreSQL?

      +
      +    

      Die zentrale (englischsprachige) Mailing-Liste ist:

      +    mailto:[email protected] .
      +
      +    

      Die Liste ist Themen vorbehalten, die PostgreSQL betreffen. Die Anmeldung

      +    erfolgt mit einer Email an die Adresse [email protected] mit folgenden Zeilen im Text
      +    (nicht in der Betreffzeile):

      +
      +    subscribe
      +    end
      +
      +    

      Es gibt auch eine Digest-Liste (eine Liste, die Mails zusammengefasst

      +    sendet). Um sich an dieser Digest-Liste anzumelden, senden Sie eine Email
      +    an [email protected] mit folgendem Text:

      +
      +    subscribe
      +    end
      +
      +
      +    

      Es gibt noch die Bug-Mailingliste. Die Anmeldung für diese Liste erfolgt

      +    durch eine Email an [email protected] mit folgendem Text:

      +
      +    subscribe
      +    end
      +
      +
      +    

      Die Entwickler-Mailingliste kann mit einer Email an

      +    [email protected] abonniert werden. Die Email muß ebenfalls folgenden Text enthalten:

      +
      +    subscribe
      +    end
      +
      +
      +
      +    

      Weitere Mailinglisten und Informationen zu PostgreSQL befinden sich auf der PostgreSQL-Homepage:

      +
      +http://www.PostgreSQL.org
      +
      +    

      Es gibt außerdem einen IRC-Channel im EFNet, Channel #PostgreSQL. Der

      +    FAQ-Autor Bruce Momjian nutzt den Unix-Befehl:
      +    irc -c '#PostgreSQL' "$USER" irc.phoenix.net
      +    um daran teilzunehmen.

      +
      +    

      Eine Liste von Unternehmen, die Support für PostgreSQL auf kommerzieller

      +    Basis leisten, kann unter
      +      http://www.PostgreSQL.org/users-lounge/commercial-support.html
      +    eingesehen werden.

      +
      +    

      1.7) Was ist die neueste Version von PostgreSQL?

      +
      +    

      Die neueste Version von PostgreSQL ist 7.2.3.

      +
      +    

      Wir planen alle 4 Monate eine neue Version herauszugeben.

      +
      +    

      1.8) Welche Dokumentation ist für PostgreSQL verfügbar?

      +
      +    

      Einige Handbücher, Man-Pages und einige kleine Testprogramme sind in

      +    der Distribution enthalten. Siehe das /doc-Verzeichnis. Ausserdem sind
      +    alle Handbücher online unter http://www.PostgreSQL.org/users-lounge/docs/
      +    verfügbar.

      +
      +    

      Zwei Bücher zu PostgreSQL sind online verfügbar unter

      +    http://www.PostgreSQL.org/docs/awbook.html und
      +    http://www.commandprompt.com/ppbook/ .

      +
      +    

      Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter

      +      http://www.ca.PostgreSQL.org/books/
      +    Diverse technische Artikel befinden sich unter
      +      http://techdocs.PostgreSQL.org/ .

      +
      +    

      psql hat einige nützliche \d-Befehle, um Informationen über Typen,

      +    Operatoren, Funktionen, Aggregate, usw. zu zeigen. 

      +
      +    

      1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?

      +
      +    

      PostgreSQL unterstützt eine erweiterte Teilmenge von SQL-92. Siehe

      +    unsere TODO-Liste unter http://developer.PostgreSQL.org/todo.php für eine Auflistung 
      +    der bekannten Bugs, fehlenden Features und zukünftigen Pläne.

      +
      +    

      1.10) Wie kann ich SQL lernen?

      +   
      +    

      Das PostgreSQL Book auf http://www.PostgreSQL.org/docs/awbook.html bietet

      +    eine Einführung in SQL. Ein weiteres PostgreSQL-Buch befindet sich unter
      +    http://www.commandprompt.com/ppbook . Es gibt zudem nette Tutorials unter
      +    http://www.intermedia.net/support/sql/sqltut.shtm ,
      +    http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
      +    und http://sqlcourse.com .

      +
      +    

      Eine weitere Empfehlung ist "Teach Yourself SQL in 21 Days, Second Edition",

      +    es ist unter http://members.tripod.com/er4ebus/sql/index.htm erhältlich.

      +
      +    

      Viele PostgreSQL-Anwender mögen "The Practical SQL Handbook" (Bowman

      +    et al., Addison Wesley). Andere dagegen mögen "The Complete Reference SQL"
      +    (Groff et al., McGraw-Hill).

      +
      +    

      1.11) Ist PostgreSQL Y2K (Jahr 2000) fähig?

      +
      +    

      Ja, wir können Datumsangaben nach dem Jahr 2000 n.Chr. und vor 2000 v.Chr. leicht

      +    verarbeiten.

      +
      +    

      1.12)   Wie kann ich im Entwicklerteam mitarbeiten?

      +
      +    

      Zuerst laden Sie die neuesten Quellen herunter und lesen Sie die

      +    PostgreSQL-Entwicklerunterlagen auf unserer Website oder in der
      +    Distribution. Dann melden Sie sich zu den Entwickler-Mailinglisten
      +    pgsql-hackers und pgsql-patches an. Anschließend senden Sie qualitativ
      +    hochwertige Patches an die pgsql-patches Mailingliste.

      +
      +    

      Es gibt ungefähr ein Dutzend Leute, die das commit-Recht im

      +    PostgreSQL CVS-Archiv haben. Alle haben derart viele hochwertige Patches
      +    eingebracht, dass es für die CVS-Verwalter schwer war, mitzuhalten. Und
      +    wir hatten Vertrauen, dass die von ihnen festgelegten Änderungen aller
      +    Wahrscheinlichkeit nach von hoher Qualität sind.

      +
      +    

      1.13) Wie sende ich einen Fehlerbericht?

      +
      +    

      Bitte besuchen Sie die PostgreSQL-BugTool-Seite http://www.PostgreSQL.org/bugs/,

      +    die Hinweise und Anleitungen zur Einreichung von Fehlerberichten enthält.
      +
      +    

      Überprüfe auch den ftp-Server ftp://ftp.PostgreSQL.org/pub,

      +    um nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches gibt.

      +
      +    

      1.14) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?

      +
      +    

      Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,

      +    Leistung, Zuverlässigkeit, Support und Preis.

      +
      +    
      +      
      Eigenschaften
      +      

      PostgreSQL besitt die meisten Eigenschaften - wie Transaktionen,

      +          Unterabfragen (Subqueries), Trigger, Views und verfeinertes Locking -
      +          die bei großen kommerziellen DBMS vorhanden sind. Es bietet außerdem
      +          einige anderen Eigenschaften, die diese nicht haben, wie benutzerbestimmte
      +          Typen, Vererbung, Regeln, und die Multi-Versionen-Steuerung zum Verringern
      +          konkurrierender Locks.

      +      
      +
      +      
      Performanz
      +      

      PostgreSQL weist eine Performanz auf, die mit der von kommerziellen

      +          und anderen Open-Source-Datenbanken vergleichbar ist. In
      +          manchen Bereichen ist es schneller, in anderen langsamen. Im
      +          Vergleich zu MySQL oder abgespeckten Datenbank-Systemen sind
      +          INSERT- und UPDATE-Anweisungen aufgrund des Transaktionsaufwands
      +          langsamer. MySQL hat allerdings keine der oben erwähnten
      +          Eigenschaften. PostgreSQL setzt auf Zuverlässigkeit und
      +          Funktionsumfang, obwohl selbstredend ständig an Performanz-
      +          Verbesserungen gearbeitet wird. Ein interessanter Vergleich
      +          zwischen PostgreSQL und MySQL befindet sich unter dieser URL:
      +            http://openacs.org/philosophy/why-not-mysql.html

      +      
      +
      +      
      Zuverlässigkeit
      +      

      Wir stellen fest, dass ein DBMS wertlos ist, wenn es nicht

      +          zuverlässig arbeitet. Wir bemühen uns, nur streng geprüften,
      +          beständigen Code freizugeben, der nur ein Minimum an Programmfehler
      +          aufweist. Jede Freigabe hat mindestens einen Monat Betatest-Phase
      +          hinter sich, und unsere Freigabehistorie beweist, dass wir stabile,
      +          solide Versionen freigeben, die im Produktionsbetrieb genutzt werden
      +          können. Wir glauben, dass wir im Vergleich mit anderer
      +          Datenbanksoftware vorteilhaft dastehen.

      +      
      +
      +      
      Support
      +      

      Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit einer

      +          großen Gruppe von Entwicklern und Benutzern mögliche Probleme
      +          zu lösen. Wir können nicht immer eine Fehlerbehebung
      +          garantieren, kommerzielle DBMS tun dies aber auch nicht.
      +          Der direkte Kontakt zur Entwickler- und Benutzergemeinschaft, der
      +          Zugriff auf die Handbücher und auf den Quellcode ermöglicht einen
      +          im Vergleich zu anderen DBMS höherwertigen Support. Es gibt jedoch auch
      +          Anbieter von kommerziellen Support-Leistungen (siehe FAQ-Punkt 1.6).

      +      
      +      
      Preis
      +      

      PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie

      +          für die nicht-kommerzielle Nutzung. Sie können den PostgreSQL-Code
      +          ohne Einschränkungen (außer denjenigen, die in der oben angegebene
      +          BSD-artigen Lizenz erwähnt werden) in Ihr Produkt integrieren.

      +      
      +    
       
      -

      1.4) Welche Nicht-Unix-Versionen sind verfügbar?

      >
      +    

      1.15) Wie kann ich PostgreSQL finanziell unterstützen?>

       
      -Es ist möglich, die libpq C-Bibliothek, psql und andere Schnittstellen und Binaries zu
      -kompilieren, um sie auf der MS-Windows-Plattform laufen zu lassen.
      -In diesem Fall läuft der Client auf MS-Windows und steht über TCP/IP mit einem
      -Server in Verbindung, der auf einer unserer unterstützten Unixplattformen läuft. 
      +    

      PostgreSQL hat seit dem Anfang in 1996 eine exzellente Infrastruktur.

      +    Dies ist Marc Fournier zu verdanken, der sie über die Jahre
      +    hinweg geschaffen und gepflegt hat.

       
      -Es gibt die Datei win31.mak in der Distribution, um die Win32 libpq-Bibliothek und psql
      -zu erzeugen.

      +    

      Eine hochwertige Infrastruktur ist für ein Open-Source-Projekt wie dieses

      +    sehr wichtig. Sie verhindert Probleme und Verzögerungen beim Fortschritt des
      +    Projekts.

       
      -Der Datenbankserver arbeitet jetzt auch unter Benutzung der Cygnus Unix/NT-Porting-Bibliotheken
      -auf Windows NT. Siehe auch pgsql/doc/README.NT in der Distribution.

      +    

      Selbstverständlich ist diese Infrastruktur nicht billig. Es gibt eine

      +    Reihe von einmaligen und monatlich wiederkehrenden  Kosten, die für
      +    den Weiterbetrieb beglichen werden müssen. Falls Sie oder Ihre Firma
      +    dazu finanziell beitragen können, besuchen Sie bitte die URL
      +      http://store.pgsql.com/shopping/
      +    wo Sie eine Spende abgeben können.

       
      -Es gibt eine weitere Portierung, die U/Win benutzt bei http://surya.wipro.com/uwin/ported.html.
      +    

      Obwohl diese Web-Seite das Unternehmen "PostgreSQL, Inc." erwähnt, ist

      +    der Bereich "contributions" (Beiträge) ausschliesslich für die
      +    Unterstützung des PostgreSQL-Projekts da und nicht für die Finanzierung
      +    einer bestimmten Firma. Sie können auch gerne einen finanziellen Beitrag
      +    an die Kontaktadresse verschicken.

       
      +    
       
      -

      1.5) Woher bekomme ich PostgreSQL?

      -Die erste Anlaufadresse für PostgreSQL ist der ftp-Server ftp://ftp.postgreSQL.org/pub
      -

      +    Fragen zu Benutzerprogrammen
       
      -Die entsprechenden Spiegelserver sind auf der Hauptwebseite aufgelistet.
      +    

      2.1) Gibt es ODBC-Treiber für PostgreSQL?

      +
      +    

      Es sind zwei ODBC-Treiber verfügbar: PsqlODBC und OpenLink ODBC.

       
      -

      1.6) Wo bekomme ich Support für PostgreSQL?

      +    

      PsqlODBC ist in der Distribution enthalten. Weitere Informationen können

      +    unter ftp://ftp.PostgreSQL.org/pub/odbc/ abgerufen werden.

       
      -Es gibt keinen offiziellen Support für PostgreSQL von der Universität von Kalifornien, Berkeley. Der
      -Support wird durch freiwilligen Einsatz geleistet.
      -

      +    

      OpenLink ODBC kann unter http://www.openlinksw.com geholt werden. Die

      +    Software arbeitet mit dem Standard-ODBC-Client der Firma, so dass
      +    PostgreSQL-ODBC auf jeder Client-Plattform zur Verfügung steht, die
      +    unterstützt wird (Win, Mac, Unix, VMS).

       
      -Die Mailing-Liste ist: [email protected].
      -Die Liste ist für PostgreSQL betreffende Themen vorbehalten. Um sich anzumelden, sende eine
      -Email mit folgenden Zeilen im Text (nicht in der Betreffzeile):
      +    

      OpenLink wird dieses Produkt wahrscheinlich an Leute verkaufen, die

      +    kommerziellen Support benötigen, dennoch wird immer eine
      +    Freeware-Version verfügbar sein. Fragen dazu bitte an
      +    [email protected]

       
      -
      -
      -   subscribe
      -   end
      -
      -

      +    

      Bitte beachten Sie auch das Kapitel zu ODBC im Progammer's Guide.

      +
      +    

      2.2) Welche Werkzeuge gibt es, um Web-Seiten mit PostgreSQL zu

      +    verbinden?
       
      +    

      Eine nette Einführung zu datenbank-gestützten Webseiten kann unter

      +     http://www.webreview.com (engl.) abgerufen werden.

       
      -Es gibt auch eine Digest-Liste (Eine Liste, die Mails zusammengefasst sendet).
      -Um sich an dieser Digestliste anzumelden, sende eine Email an:
      -mit folgendem Text:
      +    

      Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle.

      +    PHP gibt es bei http://www.php.net

       
      -
      -
      -   subscribe
      -   end
      -
      -
      +    

      Für komplexere Aufgaben bietet sich die Perl-Schnittstelle mit CGI.pm

      +    oder mod_perl.

       
      -Die Digests werden an die Mitglieder der Liste geschickt, wenn ca. 30kB an Mails
      -zusammengekommen sind.>
      +    

      2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle? Einen

      +    Report-Generator? Eine eingebaute Query-Schnittstelle?>
       
      -Die Bug-Mailingliste ist verfübar. Um sich an dieser Liste anzumelden,
      -sende eine Email an [email protected]
      -mit folgendem Text:>
      +    

      Wir haben eine nette grafische Benutzerschnittstelle namens

      +    PgAccess, der außerdem einen Reportgenerator enthält:
      +      http://www.pgaccess.org>
       
      -
      -
      -   subscribe
      -   end
      -
      -
      +    

      Die Distribution enthält außerdem ecpg, die eine eingebettete

      +    SQL-Query-Schnittstelle für C zur Verfügung stellt.

       
      -Es gibt ebenfalls eine Entwickler-Diskussionsliste.  Um sich an dieser Liste anzumelden,
      -sende eine Email an [email protected]
      -mit diesem Text:

      +    

      2.4) Welche Programmiersprachen und Schnittstellen gibt es?

       
      -
      -
      -   subscribe
      -   end
      -
      -

      +    

      PostgreSQL bietet:

      +    
        +      
      • C (libpq)
      •  
        -Weitere Mailinglisten und Informationen zu PostgreSQL können auf der PostgreSQL-Homepage im WWW
        -gefunden werden:
        -
        -http://postgreSQL.org
        -

        +      
      • C++ (libpq++)
      •  
        -Es gibt außerdem einen IRC-Channel im EFNet, Kanal #PostgreSQL.
        -Bruce nutzt den Unix-Befehl: irc -c '#PostgreSQL' "$USER" irc.phoenix.net um teilzunehmen

         

        +      
      • Embedded C (ecpg)
      •  
        -Kommerzieller Support für PostgreSQL ist bei http://www.pgsql.com/ verfügbar>
        +      
      • Java (jdbc)>
      •  
        +      
      • Perl (perl5, DBD::Pg)
      •  
        -

        1.7) Was ist die neueste Version von PostgreSQL?

        >
        +      
      • ODBC (odbc)>
      •  
        -Das neueste Release von PostgreSQL ist die Version 6.5.>
        +      
      • Python (PyGreSQL)>
      •  
        -Wir planen alle 4 Monate Hauptreleases herauszugeben.>
        +      
      • TCL (libpgtcl)>
      •  
        +      
      • C Easy API (libpgeasy)
      •  
        -

        1.8) Welche Dokumente sind für PostgreSQL verfügbar?   

        +      
      • PHP ('pg_' functions, Pear::DB)
      • +    
        +    
        +    Administrative Fragen

         
        -Einige Handbücher, Man-Pages und einige kleine Testprogramme sind in der Distribution enthalten.
        -Siehe im /doc-Verzeichnis.

        +    

        3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?

         
        -psql 
        -hat einige nette \d-Befehle, um Informationen über Typen, Operatoren, Funktionen, Aggregate, usw. zu zeigen. >
        +    

        Bei der Ausführung von configure die Option --prefix mit dem Zielverzeichnis

        +    angeben.>
         
        -Die Website enthält sogar noch mehr Unterlagen.

        +    

        3.2)  Wenn ich den postmaster starte, erhalte ich einen Nachricht

        +    "Bad System Call" bzw. "core dumped". Wieso?
         
        -

        1.9) Wie erfahre ich etwas über bekannte Fehler oder fehlende Eigenschaften von PostgreSQL?

        -

        +    

        Das kann verschiedene Ursachen haben. Überprüfen Sie zuerst, ob Ihr Kernel

        +    System V Extensions unterstützt. PostgreSQL benötigt Kernel-Unterstützung
        +    für Shared Memory und Semaphoren.

         
        +    

        3.3) Wenn ich versuche, den postmaster zu starten, bekomme ich "IpcMemoryCreate"-Fehlermeldungen. Warum?

         
        -PostgreSQL unterstützt eine ausgedehnte Untermenge von SQL-92.
        -Siehe unser TODO
        -für eine Auflistung der bekannten Fehler, fehlende Eigenschaften und zukünftige Pläne.

        +    

        Entweder ist Shared Memory in Ihrem Kernel nicht korrekt konfiguriert, oder

        +    Sie müssen den Shared Memory Bereich vergrößern. Die genaue Größe hängt
        +    von Ihrer Systemarchitektur und von der Anzahl der Puffer und Serverprozesse
        +    ab, die Sie für postmaster konfiguriert haben. Bei den voreingestellten
        +    Werten für Puffer und Prozesse benötigen Sie bei den meisten Systemen
        +    ein Minimum von ca. 1 MB. Der "PostgreSQL Administrator's Guide"
        +    (http://www.PostgreSQL.org/idocs/index.php?kernel-resources.html)
        +    enthält weitere Informationen zu Shared Memory und Semaphores.

         
         
        -

        1.10)   Wie kann ich SQL lernen?

        +    

        3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich

        +    "IpcSemaphoreCreate"-Fehlermeldungen. Warum?
         
        -Es gibt nette SQL-Tutorials bei 
        -http://w3.one.net/~jhoffman/sqltut.htm und bei 
        -http://ourworld.compuserve.com/homepages/Graeme_Birchall/DB2_COOK.HTM.

        +    

        Falls die Fehlermeldung "IpcSemaphoreCreate: semget failed (No space

        +    left on device)" lautet, ist Ihr Kernel mit zu wenig Semaphoren
        +    konfiguriert. PostgreSQL benötigt eine Semaphore pro möglichem
        +    Backend-Prozess. Eine Zwischenlösung wäre, postmaster mit einer
        +    geringeren Anzahl an Backend-Prozessen zu starten. Benutzen Sie dazu die
        +    -N Option mit einem kleineren Wert als die standardmäßigen 32. Eine
        +    dauerhafte Lösung wäre es, die Parameter SEMMNS und SEMMNI Ihres Kernels
        +    zu erhöhen.

         
        -Viele unserer User mögen The Practical SQL Handbook, Bowman et al.,
        -Addison Wesley.>
        +    

        Nichtfunktionierende Semaphores können außerdem bei hoher Datenbanklast

        +    zu Abstürzen führen.>
         
        +    

        Falls die Fehlermeldung anders aussieht, ist möglicherweise keine

        +    Semaphoren-Unterstützung in Ihrem Kernel aktiviert. Der "PostgreSQL
        +    Administrator's Guideenthält weitere Informationen zu Shared Memory
        +    und Semaphores.

         
        -

        1.11)   Ist PostgreSQL Y2K (Jahr 2000) fähig?

         
        -Ja, wir können Datumsangaben nach dem Jahr 2000 n.Chr. und vor 2000 v.Chr. leicht 
        -verarbeiten.

        +    

        3.5) Wie regle ich Zugriffe von anderen Rechnern?

         
        -

        1.12)   Wie kann ich am Entwicklerteam teilnehmen?

        +    

        PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom

        +    lokalen Rechner über Unix Domain Sockets möglich sind. Verbindungen
        +    von anderen Rechnern über TCP/IP sind nur möglich, wenn der postmaster
        +    mit der -i Option gestartet wird und die host-basierte Authentifizierung in
        +    der Datei $PGDATA/pg_hba.conf entsprechend angepasst ist.

         
        -Zuerst lade die neuesten Quellen herunter und lies die PostgreSQL-Entwicklerunterlagen
        -auf unserer Website oder in der Distribution. Zweitens melde Dich zu den Mailinglisten
        -pgsql-hackers und pgsql-patches an. Drittens sende qualitativ hochwertige Programmänderungen
        -an die pgsql-patches Mailingliste.

         
        -Es gibt ungefähr ein Dutzend Leute, die das commit-Recht im PostgreSQL-CVS Archiv haben.
        -Alle haben so viele hochwertige Patches eingebracht, daß es schwer für die 
        -CVS-Verwalter war, mitzuhalten. Und wir hatten das Vertrauen, daß
        -die Änderungen, die sie festlegten, sehr wahrscheinlich von hoher Qualität sind. 

        -
        -

        1.13)   Wie sende ich einen Fehler-Bericht?

        -
        -Fülle die "Fehler-Vorlage"-Datei (bug.template im doc-Verzeichnis) aus und sende sie an: 
        -
        -Überprüfe auch den ftp-Server ftp://ftp.postgreSQL.org/pub,
        -um nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches gibt.
        -

        -
        -
        -

        1.14)   Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?

        -
        -Es gibt verschiedene Methoden, Software zu messen: Eigenschaften, Leistung,
        -Zuverlässigkeit, Support und Preis.

        -
        -
        -
         Eigenschaften
        -
        -
        -PostgreSQL hat die meisten Eigenschaften, die in großen kommerziellen DBMS's, wie
        -Transaktionen, Sub-SELECTs, Trigger, Views und verfeinertes Locking, vorhanden sind.
        -Wir haben einige Eigenschaften, die andere nicht haben, wie benutzerbestimmte Typen, Vererbung,
        -Regeln, und die Multi-Versionen-Steuerung zum Verringern von konkurrierenden Locks.
        -Wir haben keine referentielle Integrität von externen Schlüsseln oder Outer Joins,
        -aber wir arbeiten an diesen Dingen für unser nächstes Release.

        -
        -
         Leistung
        -
        -
        -PostgreSQL läuft in zwei Modi. Im normalen fsync-Modus wird jede komplette Transaktion
        -auf die Platte geschrieben und garantiert, daß, selbst wenn das Betriebssystem abstürzt und
        -der Strom ausfällt, die Daten sicher gespeichert wurden. 
        -In diesem Modus sind wir langsamer als die meisten kommerziellen Datenbanken,
        -zum Teil, weil wenige von ihnen solch eine konservatives Methode der Datenspeicherung in ihren
        -Standardbetriebsmodi betreiben.

        -
        -Im no-fsync-Modus sind wir normalerweise schneller als kommerzielle Datenbanken. In
        -diesem Modus kann ein Betriebssystemabsturz jedoch Datenkorruption zur Folge haben.
        -Wir arbeiten daran, einen Zwischenmodus zur Verfügung zu stellen, der unter weniger Leistungseinbuße
        -leidet als der fsync-Modus und die Datenintegrität innerhalb 30 Sekunden 
        -im Falle eines Betriebssystemabsturzes erlaubt. Der Modus ist durch den Datenbankverwalter
        -auswählbar.

        -
        -Im Vergleich zu MySQL oder schlankeren Datenbanksystemen sind wir hinsichtlich INSERTs/UPDATEs langsamer,
        -weil wir einen Transaktions-Overhead haben.
        -Selbstverständlich hat MySQL kaum eine der Eigenschaften, die oben im Kapitel Eigenschaften erwähnt werden.
        -PostgreSQL ist für Flexibilität und gute Eigenschaften designed, trotzdem fahren wir fort,
        -die Leistung durch Profiling und Quellcodeanalyse zu verbessern.

         

        -
        -
        -
        -
         Zuverlässigkeit
        -
        -
        -Wir stellen fest, daß ein DBMS zuverlässig sein muß, oder es ist wertlos. Wir bemühen uns,
        -gut geprüften, beständigen Code freizugeben, der nur ein Minimum an Programmfehler hat.
        -Jede Freigabe hat mindestens einen Monat Betatestphase hinter sich, und unsere Freigabehistorie zeigt,
        -daß wir stabile, solide Versionen freigeben, die im Produktionsbetrieb
        -genutzt werden können. Wir glauben, daß wir im Vergleich mit anderer
        -Datenbanksoftware vorteilhaft dastehen.

        -
        -
         Support
        -
        -
        -Unsere Mailingliste stellt eine große Gruppe Entwickler und Benutzer zur Behebung aller
        -möglichen anzutreffenden Probleme zur Verfügung.
        -
        -Wir können nicht immer eine Fehlerbehebung garantieren, 
        -kommerzielle DBMS's tun dies aber auch nicht. 
        -
        -Direkter Zugriff zu den Entwicklern, zur Benutzergemeinschaft, zu den Handbüchern und zum Quellcode bietet häufig 
        -höherwertigen PostgreSQL-Support im Vergleich zu anderen DBMS's. 
        -
        -Es gibt den kommerziellen "Pro-Ereignis"-Support,
        -der für diejenigen bereitgestellt wird, die ihn benötigen. (siehe Support-Faq), 

        -
        -
         Preis
        -
        -PostgrSQL ist frei verfügbar, sowohl für die kommerzielle, wie für die nicht-kommerzielle
        -Nutzung. Du kannst Deinen Code fast ohne Beschränkungen zu unserem hinzufügen. Die einzigen 
        -Beschränkungen werden in der BSD-artigen Lizenz weiter oben aufgeführt.
        -
        -
        -
        -
        -
        -

        Fragen zu Benutzerprogrammen

        -
        -
        -
        -

        2.1) Gibt es ODBC-Treiber für PostgreSQL?

        -
        -Es sind zwei ODBC-Treiber verfügbar: PostODBC und OpenLink ODBC.

        -
        -PostODBC ist in der Distribution enthalten. Mehr Informationen können unter
        -http://www.insightdist.com/psqlodbc abgerufen werden.

        -
        -OpenLink ODBC kann unter http://www.openlinksw.com
        -geholt werden.
        -Die Software arbeitet mit OpenLinks Standard-ODBC-Client, so daß PostgreSQL-ODBC auf
        -jeder Client-Plattform zur Verfügung steht, die unterstützt wird (Win, Mac, Unix, VMS).

        -
        -Sie werden dieses Produkt wahrscheinlich an Leute verkaufen, die kommerziellen Qualitäts-Support
        -brauchen, aber es wird immer eine Freeware-Version verfügbar sein.
        -Fragen dazu bitte an [email protected].

        -
        -
        -
        -

        2.2) Welche Werkzeuge gibt es, um PostgreSQL-Datenbanken über Webseiten

        -verfügbar zu machen?

        -
        -Eine nette Einführung zu Datenbank-gestützten Webseiten kann unter 
        -http://www.webtools.com abgerufen werden.

        -
        -Eine weitere gibt es bei 
        -http://www.phone.net/home/mwm/hotlist/.

        -
        -Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle.
        -PHP gibt es bei http://www.php.net

        -
        -PHP ist hervorragend für einfache Anbindungen geeignet. Für komplexere
        -Aufgaben nutzen viele die Perl-Schnittstelle mit CGI.pm.

        -
        -Einen WWW-Gateway, basierend auf WDB, kann man bei 
        -http://www.eol.ists.ca/~dunlop/wdb-p95 herunterladen.
        -
        -

        2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?

        -Einen Report-Generator? Eine eingebaute Query-Schnittstelle?

        -
        -Wir haben eine nette grafische Benutzerschnittstelle mit Namen 
        -pgaccess, welche in der Distribution enthalten ist.
        -pgaccess hat auch einen Reportgenerator.  Die Webpage liegt hier: 
        -http://www.flex.ro/pgaccess

        -
        -In der Distribution gibt es außerdem ecpg,,
        -welches eine eingebundene SQL-Query-Schnittstelle für C zur Verfügung stellt.
        -
        -
        -

        2.4) Welche Sprachen sind für die Kommunikation mit PostgreSQL verfügbar?

        -
        -Wir haben:
        -
          -
        • C(libpq)
        • -
        • C++(libpq++)
        • -
        • Embedded C(ecpg)
        • -
        • Java(jdbc)
        • -
        • Perl(perl5)
        • -
        • ODBC(odbc)
        • -
        • Python(PyGreSQL)
        • -
        • TCL(libpgtcl)
        • -
        • ein rohes C/4GL(contrib/pginterface)
        • -
        • Embedded HTML(PHP from http://www.php.net)    
        • -

          -
          -
          -
          -

          Administrative Fragen

          -
          -
          -

          3.1) Warum schlägt initdb fehl?

          -
          -
            -
          •  
          • -überprüfe, daß keine Binaries vorheriger Versionen in Deinem Pfad
            -(PATH-Variable) sind.
            -(Wenn Du die Meldung siehst: NOTICE:heap_modifytuple: repl is \  9, ist das das Problem.)
            -
          •  überprüfe, daß der Pfad richtig gesetzt ist
          • -
          •  überprüfe, ob der User postgres der Eigentümer der entsprechenden Dateien ist
          • -

            -
            -
            -

            3.2) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?

            -
            -Der einfachste Weg ist mittels der --prefix Option beim configure den Pfad anzugeben.
            -Falls Du das vergessen haben solltest, kannst Du die Datei Makefile.global ändern und
            -POSTGRESDIR entsprechend anpassen, oder Du erzeugst ein Makefile.custom und definierst POSTGRESDIR dort.
            -

            -
            -
            -

            3.3) Wenn ich den postmaster starte, bekomme ich einen Bad System Call oder eine core dumped Meldung. Warum?

            -
            -Das kann verschiedene Ursachen haben. Überprüfe zuerst, ob Dein Kernel System V Extensions
            -enthält. PostgreSQL benötigt die Kernel-Unterstützung für Shared Memory und Semaphoren.
            -

            -
            -
            -

            3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich IpcMemoryCreate Fehlermeldungen. Warum?

            -
            -Du hast entweder den Kernel nicht für Shared Memory konfiguriert, oder Du mußt den
            -Shared Memory Bereich vergrößern.
            -Die genaue Größe hängt von Deiner Systemarchitektur ab und mit wievielen
            -Puffern und Serverprozessen Du postmaster konfiguriert hast.
            -Für die meisten Systeme, mit Standardangaben für Puffer und Prozessen benötigst
            -Du ein Minimum von ca. 1 MB.
            -
            -
            -

            3.5) Wenn ich versuche, den postmaster zu starten, bekomme ich IpcSemaphoreCreate Fehlermeldungen. Warum?

            -
            -Falls die Fehlermeldung IpcSemaphoreCreate: semget failed (No space
            -left on device) lautet, dann ist Dein Kernel mit zu wenig Semaphoren konfiguriert.
            -
            -Postgres benötigt eine Semaphore pro möglichen Backend-Prozess.
            -Eine Zwischenlösung wäre, postmaster mit einer geringeren Anzahl an Backend-Prozessen zu starten.
            -Benutze dazu die -N Option mit einem Wert kleiner als die standardmäßigen 32.
            -
            -Eine dauerhafte Lösung wäre es, die Kernel-Parameter 
            -SEMMNS und SEMMNI zu erhöhen.

            -
            -Falls die Fehlermeldung anders aussieht, hast Du möglicherweise keine Semaphoren-Unterstützung
            -in Deinem Kernel aktiviert.

            -
            -
            -

            3.6) Wie verhindere ich, daß andere Hosts auf meine PostgreSQL Datenbanken zugreifen?

            -
            -Die Standardeinstellung ist, daß PostgreSQL Verbindungen von der lokalen Maschine über
            -Unix-Domain-Sockets erlaubt. Andere Maschinen werden keine Verbindung aufbauen können, bis
            -der postmaster mit der -i Option gestartet ist und die Host-basierte Authentizierung
            -in der Datei $PGDATA/pg_hba.conf entsprechend angepasst ist.
            -Das erlaubt TCP/IP-Verbindungen.
            -

            -
            -

            3.7) Warum kann ich mich nicht von einer anderen Maschine mit meiner Datenbank verbinden?

            -
            -Die Standardeinstellung erlaubt nur Unix-Domain-Socket-Verbindungen der lokalen Maschine.
            -Um TCP/IP Verbindungen zu ermöglichen, stelle sicher, daß der postmaster
            -mit der -i Option gestartet wurde, und füge einen passenden Host-Eintrag in die Datei
            -pgsql/data/pg_hba.conf ein.  Siehe auch die pg_hba.conf Man-Page.

            -
            -
            -

            3.8) Warum kann ich nicht als root auf die Datenbank zugreifen?

            -
            -Du solltest keine Datenbank-Benutzer mit der User-ID 0 (root) erzeugen.
            -Sie werden auf keine Datenbank zugreifen können. Das ist eine Sicherheitsmaßnahme,
            -wegen der Möglichkeit Objekt-Module dynamisch in die Datenbank zu linken.
            -

            -
            -
            -

            3.9) Alle meine Server stürzen bei gleichzeitigem Tabellenzugriff ab. Warum?

            -
            -Dieses Problem kann durch einen Kernel verursacht werden, der ohne Support für Semaphoren
            -konfiguriert wurde.
            -
            -
            -

            3.10)   Wie optimiere ich die Datenbankmaschine für bessere Leistung?

            -
            -Sicherlich können Indizes Abfragen beschleunigen. Der explain Befehl
            -erlaubt Dir zu sehen, wie PostgreSQL Deine Abfrage interpretiert und welche Indizes
            -benutzt werden.
            -

            -
            -Wenn Du eine Menge INSERTs machst, überprüfe, ob Du sie als Stapelverarbeitung
            -mit dem copy-Befehl abarbeiten kannst.
            -Das ist viel schneller als einzelne INSERTs.
            -
            -Zweitens, SQL-Statements, die nicht in einem begin work/commit Transaktions-Block eingegeben werden,
            -werden als eigene Transaktion behandelt. Überprüfe, ob die Statements nicht
            -in einen einzelnen Transaktions-Block zusammengefasst werden können. Das reduziert den Transaktions-Overhead.
            -
            -Du kannst auch erwägen, Indizes zu löschen und neu zu erstellen, wenn Du große
            -Datenmengen änderst.

            -
            -Es gibt verschiedene Tuning-Maßnahmen, die man ergreifen kann.
            -Du kannst fsync() abschalten, indem Du beim Starten des postmasters die Optionen -o -F angibst.
            -Das hindert fsync()´s daran, nach jeder Transaktion die Daten auf die Platte zu schreiben.
            -
            -Du kannst auch mit der -B Option des postmasters die Anzahl der Shared Memory Puffer für den Backend-Prozess erhöhen.
            -Falls Du diesen Wert zu hoch einstellst, kann es sein, daß der postmaster nicht startet, weil 
            -der Shared Memory Speicherplatz Deines Kernels aufgebraucht wird.
            -Jeder Puffer ist 8 kB groß und es gibt standardmäßig 64 Puffer.

            -
            -Du kannst ebenfalls die -S Option des Backends nutzen, um die Größe des Speicherplatzes für 
            -temporäres Sortieren zu erhöhen.
            -Der -S Wert wird in Kilobyte gemessen und ist standardmäßig auf 512 kB festgelegt. Es wäre
            -jedoch unklug, den Wert zu hoch anzugeben, da ein Query möglicherweise Speicherplatzmangel verursacht,
            -wenn es viele gleichzeitige Sortierungen durchführen muß.

            -
            -Der cluster Befehl kann benutzt werden, um Daten in Basistabellen zu gruppieren, so daß sie 
            -auf einen Index zusammengebracht werden. Siehe auch die cluster(l) Man-Page für weitere Details.
            -
            -
            -

            3.11)   Welche Debugging/Fehlersuch-Hilfsmittel sind für PostgreSQL verfügbar?

            -
            -PostgreSQL hat einige Möglichkeiten, Statusinformationen zu berichten, die 
            -nützlich für die Fehlersuche sein können.

            -
            -Erstens, wenn beim configure-Lauf die Option --enable-cassert angegeben wurde,
            -verfolgen viele assert()´s den Fortschritt des Backends und halten das Programm
            -an, wenn etwas Unerwartetes passiert.
            -

            -
            -Postmaster und postgres, haben mehrere Fehlersuch-Optionen zur Verfügung.
            -Stelle zuerst sicher, daß Du den Standard-Output und Fehlerkanal in eine Datei umleitest, wenn Du den postmaster startest, :
            -
            -
            -   cd /usr/local/pgsql
            -   ./bin/postmaster >server.log 2>&1 &
            -
            -

            -
            -Das erzeugt eine server.log Datei im PostgreSQL-Verzeichnis.
            -Diese Datei enthält nützliche Informationen über Probleme oder Fehler, die im Server
            -aufgetreten sind. Postmaster hat eine -d Option, die noch detailliertere Informationen liefert.
            -Zur -d Option wird eine Nummer angegeben, die den Debug-Level - also die Menge der berichteten Information - angibt.
            -Achtung, hohe Debug-Level erzeugen schnell große Logdateien!
            -

            -
            -Du kannst tatsächlich das Postgres-Backend auf der Kommandozeile
            -laufen lassen und SQL-Statements direkt eingeben.
            -Diese Vorgehensweise wird aber nur zur Fehlersuche empfohlen.
            -Beachte, daß ein Zeilenumbruch das SQL-Statement beendet, nicht das Semikolon.
            -Wenn Du PostgreSQL mit Debugging-Symbolen kompiliert hast, kannst Du einen Debugger
            -benutzen, um zu beobachten, was passiert.
            -Da das Backend nicht vom postmaster gestartet wurde, läuft es nicht in der
            -gleichen Umgebung und deshalb können einige locking/backend Operationen 
            -nicht reproduziert werden.
            -Einige Betriebssysteme können sich an einen Backend-Prozess direkt
            -anhängen, um Probleme zu diagnostizieren.
            -

            -
            -Das Programm postgres hat -s, -A und -t Optionen, die bei der Fehlersuche
            -und Leistungsmessung sehr nützlich sein können.
            -
            -Du kannst das Paket auch mit Profiling kompilieren, um zu sehen, welche Funktionen wieviel 
            -Ausführungszeit beanspruchen.
            -Das Backend Profil wird im Verzeichnis pgsql/data/base/dbname abgelegt.
            -Das Client Profil wird in das aktuelle Verzeichnis abgelegt.
            -

            -
            -
            -

            3.12)   Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine Verbindung versuche.  Warum?

            -
            -Du mußt die Grenze des postmasters, die festlegt,
            - wieviele gleichzeitige Backend-Prozesse gestartet werden können, hochsetzen.

            -
            -In Postgres 6.5 sind das normalerweise 32 Prozesse. Du kannst diesen Wert dadurch erhöhen,
            -daß Du den postmaster mit einem entsprechenden -N Wert neu startest.
            -In der Standardkonfiguration kannst Du -N auf maximal 1024 setzen.
            -Falls Du mehr brauchst, erhöhe MAXBACKENDS in include/pg_config.h und
            -kompiliere das Paket neu.
            -Du kannst den Standardwert von -N während der Konfiguration 
            -setzen, indem Du --with-maxbackends angibst.
            -
            -Anmerkung: Falls Du -N größer als 32 einstellst, solltest
            -Du -B auf einen Wert, höher als 64 setzen.
            -Für eine hohe Anzahl an Backend-Prozessen, solltest Du möglicherweise einige
            -Unix-Kernel Parameter ebenfalls erhöhen.
            -Folgendes Parameter solltest Du prüfen:
            -die Maximalgröße der Shared Memory Blocks SHMMAX,
            -die Maximalanzahl der Semaphoren SEMMNS und SEMMNI,
            - die maximale Anzahl von Prozessen NPROC, 
            -die maximale Anzahl von Prozessen pro User MAXUPRC,
            -und die Maximalzahl der geöffneten Dateien NFILE und NINODE.
            -
            -Der Grund für die Begrenzung der erlaubten Backend-Prozesse liegt darin, daß 
            -verhindert werden soll, daß das System seine freien Ressourcen aufbraucht.
            -

            -
            -In den Postgres-Versionen vor 6.5 war die maximale Anzahl von Backends auf
            -64 festgelegt und eine Änderung setzte eine erneute Kompilierung voraus,
            -bei der die Konstante MaxBackendId in include/storage/sinvaladt.h.
            -entsprechend angepasst wurde.

            -
            -

            3.13)   Was sind die pg_psort.XXX Dateien in meinem Datenbank-Verzeichnis?

            -
            -Dies sind temporäre Dateien, die durch den Query-Ausführer erzeugt werden.
            -Wenn zum Beispiel eine Sortierung durchgeführt werden muß, um ein ORDER BY
            -auszuführen, und diese Sortierung mehr Platz benötigt, als mit dem Backend-Parameter -S
            -erlaubt wurde, dann werden diese temporären Dateien erzeugt, um die Daten dort zu halten.
            -

            -
            -Die temporären Dateien sollten automatisch gelöscht werden, falls das Backend jedoch
            -während einer Sortierung abstürzt, bleiben sie erhalten.
            -Wenn zu diesem Zeitpunkt keine Transaktion läuft, kannst Du die
            -pg_tempNNN.NN Dateien ohne Gefahr löschen.

            -
            -

            3.14)   Wie richte ich eine Benutzergruppe (pg_group) ein?

            -
            -Zur Zeit gibt es keine einfache Schnittstelle, um Benutzergruppen einzurichten
            -Du mußt explizit die pg_group-Tabelle mittels INSERT/UPDATE modifizieren.
            -Zum Beispiel:
            -
            -
            -
            -   jolly=> INSERT into pg_group (groname, grosysid, grolist)
            -   jolly=>     values ('posthackers', '1234', '{5443, 8261}');
            -   INSERT 548224
            -   jolly=> grant INSERT on foo to group posthackers;
            -   CHANGE
            -   jolly=>
            -
            -

            -
            -   Die Felder in pg_group sind:
            -
              -
            •  groname:  der Gruppenname.  Dieser Name sollte rein alphanumerisch sein. Keine Unterstriche oder andere Punktionen
            • -
            •        grosysid: die Gruppen-ID.  Die Gruppen-ID ist ein int4-Feld. Sie sollte eindeutig für jede Gruppe sein.
            • -
            •        grolist:   die Liste der pg_user IDs, die zu dieser Gruppe gehören. (int4[].)
            • -

              -
              -
              -
              -
              -

              Fragen zum Betrieb

              -
              -
              -

              4.1) Das System scheint Kommata, Dezimalpunkte und Datumsformate durcheinanderzubringen.

              -
              -Überprüfe die Konfiguration Deiner Locale-Einstellung. PostgreSQL benutzt die 
              -Einstellungen des jeweiligen Users und nicht die des postmaster Prozesses.
              -Es gibt postgres und psql SET Befehle, um das Datumsformat zu kontrollieren.
              -Setzte diese entsprechend Deiner Arbeitsumgebung.
              -

              -
              -
              -

              4.2) Was ist der genauer Unterschied zwischen Binary Cursors und Normal Cursors?

              -
              -Vgl. die declare Man-Page für eine Beschreibung.

              -
              -

              4.3) Wie wähle ich per SELECT nur die ersten paar Zeilen in einem Query aus?

              -
              -Vgl. die fetch Man-Page, oder benutze SELECT ... LIMIT....

              -
              -Das verhindert nur, daß alle Ergebniszeilen zum Client übermittelt werden.
              -Die komplette Abfrage muß abgearbeitet werden, selbst wenn Du nur die ersten paar Zeilen haben möchtest.
              -Ziehe ein Query in Erwägung, das ein ORDER BY benutzt. Es gibt keine Möglichkeit Zeilen
              -zurückzuliefern, bevor nicht die komplette Abfrage abgearbeitet ist.
              -

              -
              -

              4.4) Wie bekomme ich eine Liste der Tabellen oder anderen Dingen, die ich in psql sehen kann

              -
              -Du kannst Dir die Datei pgsql/src/bin/psql/psql.c mit dem Quellcode für psql ansehen.
              -Sie enthält die SQL-Befehle, die die Backslash-Kommandos (\) ausführen.
              -Seit Postgres 6.5 kannst Du psql auch mit der -E Option starten. Dadurch gibt
              -psql die Queries aus, die es bei der Ausführung der Befehle benutzt.
              -

              -
              -
              -

              4.5) Wie entferne ich eine Spalte von einer Tabelle?

              -
              -Wir unterstützen  alter table drop column nicht, aber mache es so:
              -
               
              -   SELECT ...  -- wähle alle Spalten außer die, die Du entfernen willst
              -   INTO TABLE new_table
              -   FROM old_table;
              -   DROP TABLE old_table;
              -   ALTER TABLE new_table RENAME TO old_table;
              -
              -

              -
              -
              -

              4.6) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?

              -
              -Zeilen sind auf 8 kB begrenzt, aber das kann geändert werden, indem Du in
              -include/config.h die Konstante BLCKSZ änderst.
              -Um Attribute mit mehr als 8 kB zu nutzen, kannst Du auch das "Large Object Interface" benutzen.

              -Zeilen überschreiten keine 8 kB-Grenzen. Eine Zeile mit 5 kB wird 8 kB Speicherplatz benötigen.
              -

              -
              -Tabellen- und Datenbankgrößen haben keine Grenzen. Es gibt viele Datenbanken mit zig Gigabytes und
              -wahrscheinlich einige mit hunderten Gigabyte.
              -
              -

              4.7) Wieviel Plattenplatz benötigt eine Datenbank zur Speicherung einer Datendatei mit zeilenweisen Datensätzen?

              -
              -Eine Postgres Datenbank kann ungefähr sechseinhalb mal soviel Platz brauchen,
              -wie eine einfache Textdatei.

              -
              -Betrachten wir eine Datei mit 300.000 Zeilen, mit jeweil zwei Integern pro Zeile.
              -Die einfache Textdatei benötigt 2,4 MB Speicherplatz.
              -Die Größe der Postgres Datenbankdatei, die diese Daten enthält, liegt 
              -ungefähr bei 14 MB.
              -
              -
              -    36 Bytes: jeder Zeilenkopf (ungefähr)
              -   + 8 Bytes: zwei Integer-Felder @ jedes 4 Bytes
              -   + 4 Bytes: Zeiger auf den Datensatz
              +    

              3.6) Wie optimiere ich die Datenbank für bessere Leistung?

              +
              +    

              Der Einsatz von Indizes sollte auf jeden Fall Abfragen beschleunigen. Die

              +    Anweisung EXPLAIN zeigt, wie PostgreSQL Abfragen interpretiert und welche
              +    Indizes benutzt werden.

              +
              +    

              Wenn Sie eine große Anzahl von INSERT-Anweisungen durchführen, sollten Sie

              +    überlegen, ob die Durchführung mit der COPY-Anweisung in Frage kommt. Dies
              +    funktioniert wesentlich schneller als einzelne INSERT-Befehle.
              +    SQL-Anweisungen, die sich nicht in einem BEGIN WORK/COMMIT Transaktions-
              +    Block befinden, werden als eigene Transaktionen behandelt. Überlegen Sie,
              +    ob die Anweisungen nicht in einen einzelnen Transaktionsblock zusammen-
              +    gefasst werden können. Das reduziert den Transaktionsaufwand. Überlegen
              +    Sie auch, bei größeren Datenänderungen Indizes zu löschen und danach
              +    wiederherzustellen.

              +
              +    

              Es gibt verschiedene Tuning-Optionen. Sie können fsync() ausschalten,

              +    indem Sie beim Starten des postmaster die Optionen -o -F angeben. Das
              +    hindert fsync()-Operationen daran, nach jeder Transaktion die Daten direkt
              +    auf die Festplatte zu schreiben.

              +
              +    

              Sie können auch mit der -B Option des postmaster die Anzahl der

              +    Shared Memory Puffer für die Backend-Prozesse erhöhen. Falls Sie diesen Wert
              +    jedoch zu hoch setzen, kann es vorkommen, dass der postmaster nicht startet,
              +    weil die Obergrenze der Speicherzuweisung für Shared Memory überschritten
              +    wird. Jeder Puffer ist 8 kB groß, standardmäßig gibt es 64 Puffer.

              +
              +    

              Sie können auch die -S Option des Backends nutzen, um die Größe

              +    des Speicherplatzes für temporäres Sortieren zu erhöhen. Der -S Wert
              +    wird in Kilobyte gemessen und ist standardmäßig auf 512 kB festgelegt.

              +
              +    

              Die CLUSTER-Anweisung kann benutzt werden, um Daten in Basistabellen zu

              +    gruppieren, so dass sie auf einen Index zusammengebracht werden. Siehe
              +    auch die CLUSTER(l) Man-Page für weitere Details.

              +
              +    

              3.7) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?

              +
              +    

              PostgreSQL hat einige Möglichkeiten, Statusinformationen anzuzeigen,

              +    die bei der Fehlersuche nützlich sein können.

              +    
              +    

              Wenn Sie PostgreSQL mit dem --enable-cassert Option kompiliert

              +    haben, verfolgen zahlreiche assert()-Anweisungen den Ablauf des
              +    Backends und halten das Programm an, wenn etwas Unerwartetes passiert.

              +
              +    

              Sowohl der postmaster als auch postgres stellen mehrere

              +    Debug-Optionen zur Verfügung. Stellen Sie zuerst sicher, dass Sie den Standard-Output
              +    und den Fehlerkanal in eine Datei umleiten, wenn Sie den postmaster starten:

              +
              +      cd /usr/local/pgsql
              +      ./bin/postmaster >server.log 2>&1 &
              +
              +
              +    

              Dadurch wird die Datei server.log im PostgreSQL-Verzeichnis erzeugt. Diese

              +    Datei enthält nützliche Informationen über Probleme oder Fehler, die
              +    im Server aufgetreten sind. postmaster hat eine -d Option, die noch
              +    detailliertere Informationen liefert. Zur -d Option wird eine Nummer
              +    angegeben, die den Debug-Level - also die Menge der berichteten
              +    Information - angibt. Achtung, hohe Debug-Levels erzeugen schnell große
              +    Logdateien!

              +
              +    

              Wenn der postmaster nicht läuft, können Sie sogar den postgres-Backend

              +    von der Befehlszeile ausführen und eine SQL-Anweisung direkt eingeben.
              +    Dies ist nur für Debugging-Zwecke zu empfehlen. Beachten Sie, dass ein
              +    Zeilenumbruch, und nicht das Semikolon die SQL-Anweisung beendet.
              +    Falls Sie PostgreSQL mit Debugging-Symbolen kompiliert haben, können Sie
              +    mit einem Debugger sehen, was passiert. Da das Backend jedoch nicht vom
              +    postmaster gestartet wurde, läuft es nicht in der gleichen
              +    Umgebung und deshalb können einige locking/backend Operationen nicht
              +    reproduziert werden.

              +
              +    

              Wenn dagegen der postmaster läuft, führen Sie psql in einem Fenster aus, dann

              +    ermitteln Sie die Prozessnummer (PID) des postgres-Prozesses, der von psql
              +    verwendet wird. Binden Sie einen Debugger an diese PID und führen Sie
              +    Abfragen von psql aus. Wenn Sie den postgres-Serverstart analysieren wollen,
              +    setzen Sie die Umgebungsvariable PGOPTIONS="-W n", und starten Sie dann
              +    psql. Dies verzögert den Start um n Sekunden, damit Sie einen Debugger an
              +    den Prozess binden können und ggf. Breakpoints setzen, bevor die
              +    Startsequenz begonnen wird.

              +
              +    

              Das Programm postgres hat auch die Optionen  -s-A und -t, die bei der Fehlersuche

              +    und Performanzmessung sehr nützlich sein können.

              +
              +    

              Sie können die Anwendung auch mit Profiling kompilieren, um zu sehen,

              +    welche Funktionen wieviel Ausführungszeit beanspruchen. Das Backend
              +    Profil wird im Verzeichnis pgsql/data/base/dbname abgelegt. Das
              +    Client-Profil wird in das aktuelle Verzeichnis abgelegt. Bitte beachtern Sie, 
              +    dass unter Linux PostgreSQL mit der Option -DLINUX_PROFILE kompiliert werden
              +    muß, um Profiling nutzen zu können.

              +
              +    

              3.8) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine 

              +    Verbindung augzubauen versuche. Warum?
              +   
              +    

              Sie müssen die maximale Anzahl der gleichzeitig ausfühbaren Backend-

              +    Prozesse hochsetzen.

              +
              +    

              Die Voreinstellung ist 32 Prozesse. Sie können diese erhöhen, indem Sie

              +    den postmaster mit einem entsprechenden -N Parameter starten bzw. die
              +    Konfigurationsdatei postgresql.conf anpassen.

              +
              +    

              Bitte beachten Sie, dass Sie auch -B auf ein Wert größer als die Voreinstellung

              +    von 64 setzen müssen, wenn Sie -N  auf einen Wert höher als 32 setzen;
              +    -B muss mindestens das Doppelte von -N betragen, und einer besseren
              +    Performanz wegen sollte der Wert noch höher sein. Bei einer hohen Anzahl von
              +    Backend-Prozessen kann es vorkommen, dass Sie einige Unix-Kernel-
              +    Parameter ebenfalls erhöhen müssen. Folgende Parameter sind zu überprüfen:
              +    die Maximalgröße der Shared Memory Blocks SHMMAX; die Maximalanzahl der
              +    Semaphoren SEMMNS und SEMMNI; die maximale Anzahl von Prozessen NPROC;
              +    die maximale Anzahl von Prozessen pro User MAXUPRC; und die Maximalzahl
              +    der geöffneten Dateien NFILE und NINODE.  Durch die Begrenzung der Anzahl
              +    erlaubter Backend-Prozesse wird verhindert, dass System-Ressourcen
              +    durch PostgreSQL aufgebraucht werden.

              +
              +    

              In den PostgreSQL-Versionen vor 6.5 war die maximale Anzahl von Backends

              +    auf 64 festgelegt und eine Änderung setzte eine erneute Kompilierung
              +    voraus, bei der die Konstante MaxBackendId in include/storage/sinvaladt.h
              +    entsprechend angepasst werden mußte.
              +
              +    

              3.9) Was befindet sich im Verzeichnis pgsql_tmp/?

              +
              +    

              Dieses Verzeichnis enthält temporäre Dateien, die durch den query executor

              +    erzeugt werden. Wenn zum Beispiel eine Sortierung durchgeführt werden muß,
              +    um ein ORDER BY auszuführen, und diese Sortierung mehr Hauptspeicher
              +    benötigt, als mit dem Backend-Parameter -S erlaubt wurde, dann werden
              +    diese Dateien erzeugt, um die Daten dort zu auszulagern.

              +
              +    

              Die temporären Dateien sollten automatisch gelöscht werden. Falls das

              +    Backend jedoch während einer Sortierung abstürzen sollte, bleiben sie
              +    erhalten. Nach einem Neustart des postmaster werden sie
              +    auomatisch gelöscht.

              +
              +    

              3.10) Warum muß ich bei jeder neuen Hauptversion von PostgreSQL

              +    die komplette Datenbank exportieren und anschließend reimportieren?
              +
              +    

              Zwischen "kleinen" PostgreSQL-Versionsänderungen (z.B. zwischen

              +    7.2 und 7.2.1) werden keine strukturellen Änderungen durchgeführt,
              +    wodurch ein erneutes Aus- und Einlesen der Daten nicht benötigt wird.
              +    Allerdings wird bei "großen" Versionsänderungen (z.B. zwischen 7.2 und 7.3)
              +    oft das interne Format der Systemtabellen und Datendateien
              +    angepasst. Diese Änderungen sind oft sehr komplex, wodurch die
              +    Rückwärtskompatibilität der Datendateien nicht gewährleistet werden kann.
              +    Durch das Exportieren werden die Daten in einem generischen Format
              +    ausgegeben, wodurch die Importierung in das neue interne Format
              +    ermöglicht wird.

              +
              +    

              Bei Versionenwechseln, wo kein Formatänderungen stattgefunden haben,

              +    kann das pg_upgrade-Skript benutzt werden, um die Daten ohne Aus- 
              +    und Einlesen zu übertragen. Die jeweilige Dokumentation gibt an, ob für
              +    die betreffende Version pg_upgrade verfügbar ist.

              +
              +    
              +
              +    Fragen zum Betrieb
              +
              +    

              4.1) Worin besteht der Unterschied zwischen Binary Cursors und Normal

              +    Cursors?
              +
              +    

              Vgl. die DECLARE Man-Page für eine Beschreibung.

              +
              +    

              4.2) Wie wähle ich per SELECT-Anweisung nur die ersten paar

              +    Zeilen in einer Abfrage aus?
              +
              +    

              Vgl. die FETCH Man-Page, oder benutzen Sie SELECT ... LIMIT... .

              +
              +    

              Selbst wenn Sie nur die ersten paar Zeilen einer Tabelle abfragen möchten,

              +    muß unter Umständen die komplette Abfrage abgearbeitet werden. Ziehen Sie also
              +    möglichst eine Abfrage in Erwägung, die eine ORDER BY-Anweisung
              +    benutzt, die wiederum auf indizierte Spalten verweist. In diesem Fall kann
              +    PostgreSQL direkt nach den gewünschten Zeilen suchen und braucht nicht
              +    jede mögliche Ergebniszeile abzuarbeiten.

              +
              +    

              Bitte beachten Sie, dass mit PostgreSQL 7.3 die Syntax LIMIT nm

              +    durch LIMIT n OFFSET m ersetzt wurde.

              +
              +
              +    

              4.3) Wie bekomme ich eine Liste der Tabellen oder anderen Dinge, die ich

              +    in psql sehen kann?
              +
              +    

              Sie können sich die Datei pgsql/src/bin/psql/describe.c mit dem Quellcode

              +    für psql ansehen. Sie enthält die SQL-Abfragen, die die
              +    Backslash-Kommandos (\) ausführen. Sie können psql auch mit der -E
              +    Option starten. Danach gibt psql die Abfragen aus, die es bei der Ausführung der Befehle
              +    benutzt.

              +
              +    

              4.4) Wie entferne ich eine Spalte aus einer Tabelle?

              +
              +    

              Der Syntax ALTER TABLE DROP COLUMN wird erst ab PostgreSQL 7.3 unterstützt.

              +
              +    

              Bei früheren Versionen bietet das folgende Verfahren Ersatz:

              +
              +      BEGIN;
              +      LOCK TABLE old_table;
              +      SELECT ...  -- alle außer der zu entfernenden Spalte hier auswählen
              +        INTO TABLE new_table
              +        FROM old_table;
              +      DROP TABLE old_table;
              +      ALTER TABLE new_table RENAME TO old_table;
              +      COMMIT;
              +
              +
              +    

              4.5) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?

              +
              +    

              Es bestehen folgende Obergrenzen:

              +
              +    Maximale Größe eine Datenbank?           unbeschränkt (es existieren
              +                                               Datenbanken mit >1TB)
              +    Maximale Größe einer Tabelle?            16 TB
              +    Maximale Größe einer Zeile?              1,6 TB
              +    Maximale Größe einer Spalte?             1 GB
              +    Maximale Anzahl von Zeilen in einer Tabelle?
              +                                             unbeschränkt
              +    Maximale Anzahl von Spalten in einer Tabelle?
              +                                             250-1600 je nach Spaltentyp
              +    Maximale Anzahl von Indizies für eine Tabelle?
              +                                             unbeschränkt
              +
              +    

              Selbstverständlich sind dies theoretische Werte, die oft durch die

              +    verfügbaren Platten- und Speicherressourcen eingeschränkt sind.
              +    Extreme Größen können zu Leistungseinbußen führen.

              +   
              +    

              Die maximale Tabellengröße von 16 TB benötigt keine Large-File-Unterstützung

              +    im Betriebssystem. Große Tabellen werden in Dateien mit einer Größe von
              +    1 GB aufgeteilt, wodurch etwaige dateisystem-bedingte Beschränkungen nicht
              +    relevant sind.

              +
              +    

              Die maximale Tabellengröße und die maximale Anzahl von Spalten können

              +    gesteigert werden, wenn die Default-Blockgröße auf 32 KB heraufgesetzt
              +    wird.

              +
              +    

              4.6) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen

              +    Textdatei abzuspeichern? 
              +    
              +    

              Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen Textdatei

              +    bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe der Datei
              +    beanspruchen.

              +
              +    

              Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und einer

              +    Textbeschreibung pro Zeile. Gehen wir davon aus, dass die durchschnittliche
              +    Länge der Textbeschreibung 20 Byte beträgt. Die einfache Datei würde 2,8 MB
              +    groß sein. Die Größe der PostgreSQL-Datenbankdatei, die diese Daten enthält,
              +    liegt ungefähr bei 6,4 MB:

              +
              +    36 Bytes: jeder Zeilenkopf (ungefähr)
              +   +24 Bytes: ein Integer-Feld und ein Textfeld
              +   + 4 Bytes: Zeiger auf der Datenseite auf den Tupel
                  -----------------------------------------------
              -    48 Bytes pro Zeile
              -
              -   Die Größe einer Datenseite in PostgreSQL ist 8192 Bytes (8 KB), also:
              -
              +    64 Bytes pro Zeile
              +
              +    

              Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB), also:

              +
                  8192 Bytes pro Seite
              -   ---------------------   =  171 Zeilen pro Seite (aufgerundet)
              -     48 Bytes pro Zeile
              -
              -   300000 Datenzeilen
              -   -----------------------  =  1755 Datenbankseiten
              -      171 Zeilen pro Seite
              -
              -1755 Datenbankseiten * 8192 Bytes pro Seite  =  14,376,960 Bytes (14MB)
              -

              -
              -Indizes haben nicht einen solchen Overhead, sie beinhalten jedoch die Daten, die sie
              -indizieren und können so auch sehr groß werden.
              -

              -
              -

              4.8) Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank definiert sind?

              -
              -psql hat eine Vielzahl von Backslash Befehlen, um solche Informationen zu zeigen.
              -Benutze \?, um sie zu sehen.
              -

              -
              -Schaue Dir auch die Datei pgsql/src/tutorial/syscat.source.  an.
              -Sie illustriert viele der SELECTs, die benötigt werden, um diese Informationen
              -von der Datenbank-Systemtabelle zu erhalten
              -

              -
              -
              -

              4.9) Meine Queries sind langsam oder nutzen die Indizes nicht. Warum?

              -
              -PostgeSQL pflegt automatische Statistiken nicht. 
              -Um die Statistiken zu aktualisieren, mußt Du ein explizites vacuum eingeben.
              -Nach dieser Aktualisierung weiß der Optimierer
              -wieviele Zeilen in der Tabelle sind und kann besser entscheiden, ob Indizes benutzt werden sollten.
              -Der Optimierer benutzt keine Indizes, wenn die Tabelle klein ist, weil ein sequentieller Suchlauf
              -dann schneller sein würde.

              -
              -Benutze den Befehl  vacuum analyze für die spaltenspezifische Optimierung.
              Vacuum analyze ist für komplexe Multi-Join-Abfragen wichtig, damit der Optimierer
              -die Anzahl der Zeilen von jeder Tabelle schätzen und dann die passende Join-Reihenfolge
              -wählen kann.
              -Das Backend verfolgt die Spaltenstatistik nicht selbst, so daß vacuum analyze
              -regelmäßig aufgerufen werden sollte.
              -

              -
              -Indizes werden nicht für ORDER BY Operationen benutzt.

              -
              -Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~,  können Indizes
              -nur benutzt werden, wenn die Suche mit dem Anfang eines Strings startet.
              -Um also Indizes zu nutzen, sollten LIKE-Suchen nicht mit 
              -%, und ~  beginnen (Die Sucheparameter regulärer Ausdrücke sollten
              -mit ^.  beginnen.
              -
              -

              4.10)   Auf welche Weise kann ich sehen, wie der Query-Optimierer meine Abfrage auswertet?

              -
              -Vgl. die EXPLAIN Man-Page.

              -
              -

              4.11)   Was ist ein R-Tree Index?

              -
              -Ein R-Tree Index wird benutzt, um räumliche Daten zu indizieren.
              -Ein Hash-Index kann nicht für Bereichssuchen genutzt werden.
              -Ein B-Tree Index kann nur für Bereichssuchen in eindimensionalen Daten
              -genutzt werden. R-Trees können multi-dimensionale Daten abhandeln.
              -Ein Beispiel: Wenn ein R-Tree Index auf ein Attribut vom Typ POINT
              -gebildet wird, dann kann das System Abfragen wie z.B. "Zeige alle Punkte,
              -die sich in einem umgebenden Rechteck befinden" effizienter beantworten.
              -

              -
              -Die kanonische Veröffentlichung , die das originale R-Tree Design beschreibt ist:
              -

              -
              -Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial Searching."
              -Proc of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.

              -
              -Du kannst dieses Werk ebenfalls in Stonebraker's "Readings in Database
              -Systems" finden.

              -
              -Die eingebauten R-Trees können Polygone und Rechtecke verarbeiten.
              -Theoretisch können R-Trees auf eine hohe Anzahl von Dimensionen erweitert werden.
              -Praktisch bedingt diese Erweiterung eine Menge Arbeit und wir haben derzeit
              -keinerlei Dokumentation darüber, wie das zu machen wäre.
              -

              -
              -
              -

              4.12)   Was ist "Genetic Query Optimization"?

              -
              -Das GEQO-Modul in PostgreSQL soll dazu dienen, das Optimierungsproblem beim
              -Joining vieler Tabellen auf der Basis genetischer Algorithmen (GA) zu lösen.
              -Es erlaubt die Behandlung von großen Join-Queries ohne erschöpfende Suche.
              -

              -Für weitere Informationen siehe die Dokumentation.
              -
              -
              -

              4.13)   Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer Suche mit Ignorierung der Groß- und Kleinschreibweisen?

              -
              -~ und ~*  sind wahrscheinlich das, was Du willst.
              -Vgl. psql's  \do Befehl. 

              -
              -
              -

              4.14)   Wie ermittle ich in einem Query, daß ein Feld NULL ist?

              -
              -Du testest die Spalte mit IS NULL und IS NOT NULL.

              -
              -
              -

              4.15)   Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?

              -
              -
              -Typ             interner Name   Bemerkungen
              ---------------------------------------------------
              -CHAR            char            1 Zeichen
              -CHAR(#)         bpchar          mit Leerzeichen gefüllt bis zur angegebenen Länge
              -VARCHAR(#)      varchar         Die Größe legt die Maximallänge fest, kein Ausfüllen mit Leerzeichen
              -TEXT            text            Die Länge wird nur durch die maximale Zeilenlänge beschränkt
              -BYTEA           bytea           Bytearray mit variabler Länge
              -

              -
              -Du mußt die internen Namen benutzen, wenn Du interne Operationen durchführen willst.
              -

              -
              -Die letzten vier Typen sind "varlena"-Typen (d.h. die ersten vier Bytes geben die Länge an, gefolgt 
              -von den Daten).
              -CHAR(#) belegt die maximale Anzahl von Bytes, unabhängig davon, wieviele Daten im 
              -Feld gespeichert werden.
              -TEXT, VARCHAR(#) und BYTEA haben alle eine variable Länge auf dem Datenträger,
              -deshalb gibt es einen leichten Geschwindigkeitsnachteil bei der Nutzung dieser Typen.
              -Genauer, der Nachteil gilt für den Zugriff auf alle Spalten nach der ersten Spalte dieses Typs.
              -

              -
              -
              -

              4.16)   Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Inhalts?

              -
              -PostgreSQL unterstützt einen SERIAL Datentyp. Er erzeugt automatisch eine
              -Sequenz und einen Index auf die Spalte. Siehe die create_sequence Man-Page
              -für weitere Informationen über Sequenzen.
              -
              -Du kannst aber auch das Oid Feld jeder Zeile als eindeutigen Wert nutzen.
              -Jedoch mußt Du, falls Du Deine Datenbank einmal komplett ausgeben und wieder einlesen willst,
              -die pg_dump's -o oder die copy with oids Option benutzen, um die Oids zu retten.

              -
              -

              4.17)   Was ist ein Oid? Was ist ein Tid?

              -
              -Oids sind PostgreSQLs Antwort auf eindeutige Zeilen-IDs. Jede Zeile, die in PostgreSQL
              -erzeugt wird, bekommt eine eindeutige Oid. Alle Oids, die während initdb erzeugt werden, sind kleiner
              -als 16384 (nach backend/access/transam.h). 
              -Alle Oids, die durch den Benutzer erzeugt werden, sind gleich oder größer als dieser Wert.
              -Standardmäßig sind all diese Oids nicht nur innerhalb einer Tabelle oder Datenbank, sondern
              -in der gesamten PostgreSQL Installation eindeutig.
              -

              -PostgreSQL benutzt Oids in seinen internen Systemtabellen, um Zeilen zwischen den Tabellen zu 
              -verbinden. Diese Oids können zur Identifikation spezifischer Benutzerzeilen und in Joins 
              -genutzt werden.
              -Es wird empfohlen, den Spaltentyp OID zu nutzen, um Oids-Werte zu speichern.
              -Siehe die sql(l) Man-Page, um die anderen internen Spalten kennenzulernen.
              -Du kannst einen Index auf ein Oid-Feld erzeugen, um schnelleren Zugriff zu erreichen.
              -

              -
              -Oids werden allen neuen Zeilen von einem zentralen Bereich, der von allen Datenbanken
              -genutzt wird, zugewiesen. Es gibt keinen Grund, warum Du nicht die Oid ändern, oder eine Kopie der 
              -Tabelle mit den originalen Oids anlegen könntest. 
              -
              -        CREATE TABLE new_table(old_oid oid, mycol int);
              -        SELECT INTO new SELECT old_oid, mycol FROM old;
              -        COPY new TO '/tmp/pgtable';
              -        DELETE FROM new;
              -        COPY new WITH OIDS FROM '/tmp/pgtable';
              -
              -

              -
              -Tids werden genutzt, um spezifische physische Zeilen mit Block und 
              -Versatzwert zu identifizieren. Tids ändern sich, wenn Zeilen geändert oder
              -neu geladen werden. Sie werden von Index-Einträgen genutzt, um die 
              -Zeilen physisch zu adressieren.
              -
              -

              4.18)   Was ist die Bedeutung der verschiedenen Ausdrücke, die in PostgreSQL benutzt werden (z.B. attribute, class,...)?

              -
              -Einige der Quelltexte und die ältere Dokumentation nutzen allgemeine Begriffe.
              -Hier sind einige aufgeführt:
              -
              -
                -
              •  row, record, tuple
              • -
              •  attribute, field, column
              • -
              •  table, class
              • -
              •  retrieve, SELECT
              • -
              •  replace, UPDATE
              • -
              •  append, INSERT
              • -
              •  oid, serial value
              • -
              •  portal, cursor
              • -
              •  range variable, table name, table alias
              • -

                -
                -

                4.19)   Wieso bekomme ich einen Fehler: "FATAL:  palloc failure: memory exhausted?"

                -
                -Möglicherweise ist der virtuelle Speicher verbraucht oder Dein Kernel hat
                -eine niedrige Grenze für bestimmte Ressourcen.
                -Versuche dieses, bevor Du den postmaster startest:
                -
                -
                -
                -   ulimit -d 65536
                -   limit datasize 64m
                -
                -
                -
                -Je nach Deiner eingesetzten Shell mag nur einer dieser Befehle funktionieren.
                -Aber es wird die Grenze des Datensegments für Prozesse erhöhen und vielleicht 
                -läuft so Dein Query durch.
                -Dieser Befehl wirkt sich auf den aktuellen Prozess und alle seine Unterprozesse 
                -aus, die nach diesem Befehl gestartet werden. Falls Du ein Problem mit dem SQL-CLient hast,
                -weil das Backend zu viele Daten zurückliefert, versuche diesen Befehl, bevor Du den 
                -SQL-Client startest.
                -

                -
                -

                4.20)   Wie kann ich feststellen, welche PostgreSQL-Version ich laufen habe?

                -
                -Gib in psql SELECT version(); ein

                -
                -

                4.21)   Beim Arbeiten mit "large-object" kommt die Fehlermeldung: invalid large obj descriptor.  Warum?

                -
                -Du solltest die Befehle BEGIN WORK und COMMIT
                - bei jeden Gebrauch von Large Objects benutzen. Also um
                -lo_open ... lo_close.

                -
                -Die Dokumentation hat schon immer darauf hingewiesen, daß 
                -lo_open in eine Transaktion eingebunden werden muß, aber die PostgreSQL Versionen vor 6.5 
                -haben diese Regel nicht erzwungen.
                -Statt dessen scheiterten sie gelegentlich, wenn Du diese Regel gebrochen hattest.

                -
                -Das aktuelle PostgreSQL erzwingt diese Regel, indem es die Handles der Large Objects
                -beim COMMIT der Transaktion schließt, was sofort nach dem lo_open passiert,
                -wenn Du nicht innerhalb einer Transaktion bist.
                -So führt der erste Versuch, etwas mit dem Large Object zu machen zu einem
                -invalid large obj descriptor.
                -Also wird der Code, der bisher benutzt wurde, nun diese Fehlermeldung erzeugen, wenn Du
                -keine Transaktionen benutzt hast.
                -

                -Falls Du eine Client-Schnittstelle wie ODBC benutzt, kann es sein, daß Du 
                -auto-commit off setzen mußt.

                -
                -
                -
                -

                PostgreSQL erweitern

                -
                -
                -

                5.1) Ich habe eine benutzerdefinierte Funktion geschrieben.  Wenn ich sie in psql aufrufe, kommt ein core dump. Warum?

                -
                -Dieses Problem kann viele Ursachen haben. Teste deine Funktion zuerst in einem 
                -Extra-Testprogramm. Stelle außerdem sicher, daß Deine Funktion nicht etwa elog-Nachrichten sendet, wenn der Client Daten erwartet,
                -wie in den type_in() oder type_out() Funktionen

                -
                -
                -

                5.2) Was bedeutet die Meldung: NOTICE:PortalHeapMemoryFree: 0x402251d0 not in alloc set!?

                -
                -Du pfreest etwas, das Du nicht palloct hast!
                -Stelle sicher, daß Du nicht malloc/free und palloc/pfree durcheinanderwürfelst.
                -
                -
                -

                5.3) Wie kann ich ein paar elegante neue Feldtypen und Funktionen zu PostgreSQL beitragen?

                -

                -
                -Sende Deine Erweiterungen zur pgsql-hackers Mailing Liste, 
                -und sie werden eventuell im contrib/ Verzeichnis enden.

                +   ---------------------   =  128 Zeilen pro Seite (abgerundet)
                +     64 Bytes pro Zeile
                +
                +   100.000 Datenzeilen
                +   -----------------------  =  782 Datenbankseiten (aufgerundet)
                +       128 Zeilen pro Seite
                +
                +   782 Datenbankseiten * 8192 Bytes pro Seite  =  6.406.144 Byte (6,4 MB)
                +
                +    

                Indizes beanspruchen nicht so viel Platz. Da sie jedoch die

                +    Daten beinhalten, die sie indizieren, können auch sie sehr groß werden.

                +
                +    

                NULL-Werte werden in Bitmaps gespeichert, wodurch sie sehr wenig

                +    Platz in Anspruch nehmen.

                +
                +    

                4.7) Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank

                +    definiert sind?
                +
                +    

                psql hat eine Vielzahl von Backslash-Befehlen, mit denen solche Informationen

                +    angezeigt werden können. Der Befehl \? zeigt eine Übersicht. Außerdem
                +    zeigt der Befehl \l eine Liste von allen verfügbaren Datenbanken an.
                +
                +    

                Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele

                +    SELECT-Anweisungen, mit deren Hilfe man Information über die Systemtabellen
                +    erhalten kann.

                +
                +    

                4.8) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?

                +
                +    

                Indizes werden nicht automatisch bei jeder Abfrage verwendet. Indizes werden

                +    nur dann verwendet, wenn die abzufragende Tabelle eine bestimmte Größe
                +    übersteigt,  und die Abfrage nur eine kleine Prozentzahl der Tabellenzeilen
                +    abfragt. Grund hierfür ist, dass die durch einen Index verursachten
                +    Festplattenzugriffe manchmal langsamer sind als ein einfaches Auslesen
                +    aller Tabellenzeilen (sequentieller Scan).

                +
                +    

                Um festzustellen, ob ein Index verwendet werden soll, braucht PostgreSQL

                +    Statistiken über die Tabelle. Diese Statistiken werden durch die Anweisungen
                +    VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand der Statistiken kennt der
                +    Abfragenoptimierer die Anzahl der Tabellenzeilen und kann besser
                +    entscheiden, ob Indizes verwendet werden sollen. Statistiken sind auch
                +    bei der Feststellung optimaler JOIN-Reihenfolge und -Methoden wertvoll.

                +
                +    

                Indizes werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs

                +    verwendet. Ein sequentieller Scan mit anschließendem explizitem
                +    Sortiervorgang ist normalerweise schneller als ein Index-Scan einer
                +    großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen mit
                +    ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein
                +    kleiner Abschnitt der Tabelle zurückgeliefert wird. Dadurch wird es
                +    auch möglich, die Minimal- und Maximalwerte einer Abfrage unter
                +    Verwendung von Indizes zu ermitteln:

                +
                +       SELECT spalte
                +         FROM tabelle
                +     ORDER BY spalte [ DESC ]
                +        LIMIT 1
                +
                +    

                (Die Aggregatfunktionen MIN() und MAX() verwenden keine Indizes). 

                +
                +    

                Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können

                +    Indizes nur unter bestimmten Umständen verwendet werden:

                +  
                  +    
                • Der Anfang des Suchmusters muß mit dem Anfang des Strings
                • +        verknüpft werden, d.h.:
                  +      
                    +        
                  • LIKE-Suchmuster dürfen nicht mit % anfangen;
                  • +        
                  • ~ (reguläre Ausdrücke) müssen mit ^ anfangen.
                  • +      
                    +    
                    +    
                  • Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e])
                  • +    anfangen
                    +  
                    +    

                    Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B.

                    +    ILIKE bzw. ~*), verwenden keine Indizes. Stattdessen können
                    +    funktionale Indizes verwendet werden, die im Punkt 4.12 beschrieben werden.

                    +
                    +    

                    Die C-Locale muß während der Datenbank-Initialisierung mit initdb

                    +    bestimmt worden sein.

                    +
                    +    

                    4.9) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine

                    +    Abfrage auswertet?
                    +
                    +    

                    Vgl. die EXPLAIN Man-Page.

                    +
                    +    

                    4.10) Was ist ein R-Tree Index?

                    +
                    +    

                    Ein R-Tree Index wird benutzt, um räumliche Daten zu indizieren. Ein

                    +    Hash-Index kann nicht für Bereichssuchen genutzt werden. Ein B-Tree
                    +    Index kann nur für Bereichssuchen in eindimensionalen Daten genutzt
                    +    werden. R-Trees können multi-dimensionale Daten abhandeln. Ein
                    +    Beispiel: Wenn ein R-Tree Index auf ein Attribut vom Typ POINT
                    +    gebildet wird, dann kann das System Abfragen wie z.B. "Zeige alle
                    +    Punkte, die sich in einem umgebenden Rechteck befinden" effizienter
                    +    beantworten.

                    +    
                    +    

                    Die kanonische Veröffentlichung, die das originale R-Tree Design

                    +    beschreibt, ist:

                    +
                    +    

                    Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial Searching."

                    +    Proc of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.

                    +
                    +    

                    Sie können dieses Werk auch in Stonebrakers "Readings in Database

                    +    Systems" finden.

                    +
                    +    

                    Die eingebauten R-Trees können Polygone und Rechtecke verarbeiten.

                    +    Theoretisch können R-Trees auf eine hohe Anzahl von Dimensionen
                    +    erweitert werden. Praktisch bedingt diese Erweiterung eine Menge
                    +    Arbeit und wir haben derzeit keinerlei Dokumentation darüber, wie das
                    +    zu machen wäre.

                    +
                    +    

                    4.11) Was ist der "Genetic Query Optimizer"?

                    +
                    +    

                    Das GEQO-Modul in PostgreSQL soll dazu dienen, das Optimierungsproblem

                    +    beim JOIN von vielen Tabellen auf der Basis genetischer Algorithmen
                    +    (GA) zu lösen. Es ermöglicht die Behandlung von großen JOIN-Queries durch
                    +    eine nicht-erschöpfende Suche.

                    +
                    +    

                    4.12) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer

                    +    Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende
                    +    ich einen Index bei solchen Suchabfragen?
                    +
                    +    

                    Der Operator ~ bewirkt die Anwendung eines regulären Ausdrucks. ~* führt

                    +    zur Anwendung eines regulären Ausdrucks mit Ignorierung der Groß-
                    +    und Kleinschreibung.

                    +
                    +    

                    Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren, werden

                    +    in der Regel so ausgedruckt:

                    +
                    +      SELECT *
                    +        FROM tabelle
                    +       WHERE LOWER(spalte) = 'abc'
                    +
                    +    

                    Ein funktionaler Index, der wie folgt erstellt wird, wird auf jeden Fall

                    +    verwendet:

                    +
                    +      CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))
                    +
                    +    

                    4.13) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?

                    +
                    +    

                    Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.

                    +
                    +    

                    4.14) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?

                    +Typ           interner Name   Bemerkungen
                    +-------------------------------------------------
                    +"char"        char            1 Zeichen
                    +CHAR(n)       bpchar          mit Leerzeichen gefüllt bis zur angegebenen Länge
                    +VARCHAR(n)    varchar         die Größe legt die Maximallänge fest; kein
                    +                               Ausfüllen mit Leerzeichen
                    +TEXT          text            Die Länge wird nur durch die maximale Zeilenlänge
                    +                               beschränkt
                    +BYTEA         bytea           Bytearray mit variabler Länge
                    +
                    +    

                    Der interne Name kommt vor allem in den Systemkatalogen und in manchen

                    +    Fehlermeldungen vor.

                    +
                    +    

                    Die letzten vier Typen sind "varlena"-Typen (d.h. die ersten vier

                    +    Bytes geben die Länge an, gefolgt von den Daten). Daher ist der tatsächlich
                    +    belegte Platz immer etwas mehr als die deklarierte Feldgröße. Allerdings
                    +    wird unter Umständen auf diese Datentypen Datenkompression durch das TOAST-
                    +    Verfahren angewendet, womit der tatsächlich belegte Platz auch geringer
                    +    als erwartet ausfallen kann.

                    +
                    +    

                    CHAR(n) ist geeignet für die Speicherung von Zeichenketten ähnlicher Länge.

                    +    VARCHAR(n) ist geeignet für Zeichenketten abweichender Längen, setzt jedoch
                    +    eine maximale Länge. TEXT setzt keine Längengrenze, allerdings gibt es
                    +    eine systembedingte Obergrenze von 1 GB. BYTEA ist für binäre Daten,
                    +    besonders für Werte, die NULL-Bytes haben. Die erwähnten Typen weisen
                    +    ähnliche Performanzeigenschaften auf.

                    +
                    +    

                    4.15.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des

                    +    Werts?
                    +
                    +    

                    PostgreSQL bietet einen SERIAL-Datentyp. Dieser erzeugt automatisch

                    +    eine Sequenz und einen Index auf die angegebene Spalte. Zum Beispiel:

                    +
                    +      CREATE TABLE person (
                    +          id   SERIAL,
                    +          name TEXT
                    +      )
                    +    

                    wird automatisch in:

                    +
                    +      CREATE SEQUENCE person_id_seq;
                    +      CREATE TABLE person (
                    +        id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
                    +        name TEXT
                    +      );
                    +      CREATE UNIQUE INDEX person_id_key ON person ( id );
                    +

                        umgewandelt.

                    +
                    +    

                    Die create_sequence Man-Page liefert weitere Informationen über Sequenzen.

                    +    Es ist auch möglich, den OID-Wert jeder Spalte als einmaligen Wert
                    +    einzusetzen. Sollten Sie allerdings die Datenbank exportieren und
                    +    reimportieren wollen, müssen Sie die Option -o von pg_dump bzw. COPY
                    +    WITH OIDS verwenden, um die OIDs beizubehalten.

                    +
                    +    

                    4.15.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?

                    +
                    +    

                    Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten SERIAL-Wert

                    +    von dem Sequenzobjekt vor der Auszuführung einer INSERT-Anweisung anzufordern und ihn 
                    +    dann explizit in die INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in
                    +    4.15.1 könnte dieser Vorgang in einer Pseudosprache so aussehen:

                    +
                    +    new_id = output of execute("SELECT nextval('person_id_seq')");
                    +    execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
                    +
                    +    

                    Danach stünde der neue Wert in der Variablen new_id für die Verwendung in

                    +    weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel zur
                    +    Tabelle 'person'). Bitte beachten Sie, dass der Name des automatisch
                    +    erstellten SEQUENCE-Objektes folgenden Name hat:
                    +    <table>_<serialcolumn>_seq
                    +    wobei 'table' und 'serialcolumn' die Namen der jeweils betreffenden
                    +    Tabelle / Spalte darstellen.

                    +
                    +    

                    Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den

                    +    automatisch eingefügten SERIAL-Wert mit der currval()-Funktion zurückgeben
                    +    lassen:

                    +
                    +    execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
                    +    new_id = output of execute("SELECT currval('person_id_seq')");
                    +
                    +    

                    Schließlich besteht noch die Möglichkeit, den von einer INSERT-Anweisung

                    +    zurückgelieferten OID-Wert als einmaligen Wert zu verwenden.
                    +    In Perl mit dem DBD::Pg-Modul von Edmund Mergl wird der OID-Wert nach einem
                    +    $sth->excute() über $sth->{pg_oid_status} zurückgeliefert.

                    +
                    +    

                    4.15.3) Führen currval() und nextval() zu einer Race-Condition mit anderen

                    +     Nutzern?
                    +
                    +    

                    Nein. Die Funktionen liefern einen Wert zurück, der von Ihrem Backend

                    +    bestimmt wird, und der anderen Benutzern nicht zur Verfügung steht.

                    +
                    +    

                    4.15.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht

                    +     zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
                    +     Sequenz-/SERIAL-Spalte?
                    +
                    +    

                    Um die konkurrente Verarbeitung zu verbessern, werden Sequenzwerte

                    +    nach Bedarf an laufende Transaktionen zugeteilt und erst beim
                    +    Abschluß der Transaktion gesperrt. Durch abgebrochene Transaktionen werden
                    +    Lücken in der Sequenznummerierung verursacht.

                    +
                    +
                    +    

                    4.16) Was ist ein OID? Was ist ein TID?

                    +
                    +    

                    OIDs sind PostgreSQLs Antwort auf eindeutige Zeilen-IDs. Jede Zeile,

                    +    die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID. Alle
                    +    OIDs, die durch initdb erzeugt werden, sind kleiner als 16384 (siehe
                    +    include/access/transam.h). Alle OIDs, die durch den Benutzer erzeugt
                    +    werden, sind gleich oder größer als dieser Wert. Standardmäßig sind
                    +    all OIDs nicht nur innerhalb einer Tabelle oder Datenbank,
                    +    sondern in der gesamten PostgreSQL-Installation einmalig.

                    +   
                    +    

                    PostgreSQL benutzt OIDs in seinen internen Systemtabellen, um Zeilen

                    +    in JOINs zwischen Tabellen zu verknüpfen. Es ist möglich, einen Index
                    +    für die OID-Spalte zu erstellen, wodurch schnellere Zugriffszeiten
                    +    erreicht werden können. Es wird empfohlen, OID-Werte in Spalten vom Typ OID
                    +    zu speichern.

                    +
                    +    

                    OIDs werden allen neuen Zeilen von einem zentralen Bereich, der von

                    +    allen Datenbanken genutzt wird, zugewiesen. Nichts hindert Sie daran,
                    +    die OID zu ändern, oder eine Kopie der Tabelle mit den originalen Oids
                    +    anzulegen:

                    +
                    +      CREATE TABLE new_table(old_oid OID, mycol INT);
                    +      SELECT INTO new SELECT old_oid, mycol FROM old;
                    +      COPY new TO '/tmp/pgtable';
                    +      DELETE FROM new;
                    +      COPY new WITH OIDS FROM '/tmp/pgtable';
                    +
                    +
                    +    

                    4.17) Welche Bedeutung haben die verschiedenen Ausdrücke, die in

                    +    PostgreSQL benutzt werden (z.B. attribute, class,...)?
                    +
                    +    

                    Einige der Quelltexte und die ältere Dokumentation nutzen allgemeine

                    +    Begriffe. Hier sind einige aufgeführt:

                    +    
                      +      
                    • row, record, tuple
                    • +      
                    • attribute, field, column
                    • +      
                    • table, class
                    • +      
                    • retrieve, SELECT
                    • +      
                    • replace, UPDATE
                    • +      
                    • append, INSERT
                    • +      
                    • oid, serial value
                    • +      
                    • portal, cursor
                    • +      
                    • range variable, table name, table alias
                    • +    
                      +
                      +    

                      Eine allgemeine Liste der Datenbank-Terminologie erhalten Sie hier:

                      +    http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html
                      +    (engl.).

                      +
                      +    

                      4.18) Wieso bekomme ich einen Fehler: "ERROR: Memory exhausted in

                      +    AllocSetAlloc()"?
                      +
                      +    

                      Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System

                      +    oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen.
                      +    Probieren Sie vor dem Start von postmaster folgendes:

                      +
                      +      ulimit -d 262144
                      +      limit datasize 256m
                      +
                      +    

                      Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich

                      +    ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments für
                      +    Prozesse erhöht werden und eventuell die erfolgreiche Ausführung der
                      +    Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-CLient haben,
                      +    weil das Backend zu viele Daten zurückliefert, versuchen Sie dies vor dem
                      +    Start des SQL-Clients.

                      +
                      +    

                      4.19) Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft?

                      +
                      +    Geben Sie in psql SELECT VERSION(); ein.
                      +
                      +    

                      4.20) Bei "large-object"-Operationen kommt die Fehlermeldung: "invalid

                      +    large obj descriptor". Warum?
                      +
                      +    

                      Sie sollten die Anweisungen BEGIN WORK und COMMIT bei jeden Gebrauch von

                      +    Large Objects benutzen. Also um lo_open ... lo_close.

                      +
                      +    

                      Derzeit erzwingt PostgreSQL diese Regel, indem es die Handles der

                      +    Large Objects beim COMMIT der Transaktion schließt. So führt der erste
                      +    Versuch, etwas mit dem Large Object zu machen, zu einer Meldung
                      +    "invalid large obj descriptor". Solange Sie keine Transaktionen benutzen,
                      +    wird der Code, der in älteren PostgreSQL-Versionen funktionierte,
                      +    nun diese Fehlermeldung erzeugen.

                      +
                      +    

                      Falls Sie eine Client-Schnittstelle wie ODBC benutzen, kann es sein,

                      +    dass die auto-commit-Option ausgeschaltet werden muss.

                      +
                      +    

                      4.21) Wie kann ich eine Spalte erstellen, deren Default-Wert immer

                      +    die aktuelle Uhrzeit enthalten soll?
                      +
                      +    

                      Dazu verwenden Sie CURRENT_TIMESTAMP:

                      +
                      +      CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
                      +
                      +    

                      4.22) Warum sind meine Unterabfragen (subqueries), die IN verwenden,

                      +    so langsam?
                      +
                      +    

                      Derzeit werden Unterabfragen mit der äusseren Abfrage verbunden, indem

                      +    für jede Reihe der äusseren Query die Ergebnisse der Unterabfrage
                      +    sequentiell geprüft werden. Um dies zu vermeiden, kann man IN durch
                      +    EXISTS ersetzen, z.B.:

                      +
                      +      SELECT *
                      +        FROM tabelle_1
                      +       WHERE spalte1 IN (SELECT spalte2 FROM tabelle_2)
                      +
                      +    

                      in:

                      +
                      +      SELECT *
                      +        FROM tabelle_1
                      +       WHERE EXISTS (SELECT spalte2 FROM tabelle_2 WHERE spalte1 = spalte2)
                      +
                      +    

                       Damit diese Abfrage effizient durchgeführt wird, sollte für 'spalte2'

                      +    ein Index angelegt worden sein. Die Einschränkung von Abfragen mit IN
                      +    soll in einer künftigen PotsgreSQL-Version behoben werden.

                      +
                      +    

                      4.23) Wie führe ich einen OUTER JOIN durch?

                      +
                      +    

                      PostgreSQL ab der Version 7.1 unterstützt OUTER JOINs nach dem SQL-

                      +    Standardsyntax. Hier zwei Beispiele:

                      +
                      +      SELECT *
                      +        FROM tabelle_1 t1
                      +             LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)
                      +
                      +    

                      bzw.:

                      +
                      +      SELECT *
                      +        FROM tabelle_1 t1
                      +             LEFT OUTER JOIN tabelle_2 t2 USING (spalte)
                      +
                      +    

                      +    Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die
                      +    Spalte 'spalte' und geben außerdem alle unverknüpften Zeilen in tabelle_1
                      +    (diejenigen, die keine Entsprechung in tabelle_2 haben) zurück.
                      +    Ein FULL JOIN würde dagegen alle verknüpften Zeilen sowie jeweils alle
                      +    unverknüpften Zeilen aus den beiden Tabellen verknüpfen. Die Angabe von
                      +    OUTER ist nicht zwingend und kann in LEFTRIGHT und FULL-Verknüpfungen
                      +    weggelassen werden. Normale Verknüpfungen sind INNER JOINs.

                      +
                      +    

                      In früheren Versionen von PostgreSQL können OUTER JOINs mittels UNION

                      +    und NOT IN simuliert werden. Zum Beispiel 'tabelle_1' und 'tabelle_2'
                      +    können als LEFT OUTER JOIN auch so verknüpft werden:

                      +
                      +      SELECT t1.spalte1, t2.spalte2
                      +        FROM tabelle_1 t1, tabelle_2 t2
                      +       WHERE t1.spalte1 = t2.spalte1
                      +       UNION ALL
                      +      SELECT t1.spalte1, NULL
                      +        FROM tabelle_1 t1
                      +       WHERE t1.spalte1 NOT IN (SELECT t2.spalte1 FROM tabelle_2 t2)
                      +       ORDER BY spalte1
                      +
                      +
                      +    

                      4.24) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?

                      +
                      +    

                      Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine Datenbank

                      +    zuzugreifen. Da PostgreSQL datenbank-spezifische Systemkataloge lädt, ist
                      +    eine datenbankübergreifende Abfrage nicht möglich.

                      +
                      +    

                      contrib/dblink ermöglicht datenbankübergreifende Abfragen.

                      +
                      +    

                      Es ist natürlich möglich, dass eine Client-Anwendung gleichzeitige Verbindungen

                      +    zu verschiedenen Datenbanken aufbaut und selber Datensätze zusammenfügt.

                      +
                      +    

                      4.25) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion

                      +    zurückgeben lassen?
                      +
                      +    

                      "Result sets" können mittels refcursors von PL/PgSQL-Funktionen zurückgegeben

                      +    werden. Vgl.:
                      +    http://www.postgresql.org/idocs/index.php?plpgsql-cursors.html
                      +    (Abschnitt 23.7.3.3).

                      +
                      +    

                      4.26) Warum kann ich temporäre Tabellen in PL/PgSQL-Funktionen nicht

                      +    zuverlässig erstellen bzw. löschen?
                      +
                      +    

                      PL/PgSQL verarbeitet die Inhalte einer Funktion in einer Cache. Dies hat

                      +    eine unangenehme Nebenwirkung, nämlich dass wenn eine PL/PgSQL-
                      +    Funktion auf eine temporäre Tabelle zugreift, und diese Tabelle
                      +    anschließend gelöscht bzw. neu erstellt wird, die Funktion
                      +    fehlschlagen wird, da die gecachte Funktionsinhalte noch auf die alte
                      +    temporäre Tabelle zeigen.

                      +
                      +    

                      Die Lösung für diese Probleme besteht darin, in der Funktion mittels

                      +    EXECUTE auf temporäre Tabellen zuzugreifen. Diese bewirkt, dass bei
                      +    jedem Funktionsruf die betreffende Abfrage von PL/PgSQL neu geparst wird.

                      +
                      +    

                      4.27) Welche Möglichkeiten zur Datenbank-Replikation gibt es?

                      +
                      +    

                      Es existieren mehrere Ansätze zur Master/Slave-Replikation in PostgreSQL.

                      +    In diesen werden Datenänderungen in der Master-Datenbank durchgeführt und an
                      +    Slave-Datenbanken weitergeleitet. Informationen über diese Lösungen
                      +    befinden sich auf der folgenden Seite (unten):
                      +      http://gborg.PostgreSQL.org/genpage?replication_research .

                      +
                      +    

                      Eine Multi-Master-Lösung befindet sich in der Entwicklung. Näheres dazu

                      +    befindet sich hier:
                      +      http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php .

                      +
                      +    

                      4.28) Welche Möglichkeiten zur Verschlüsselung gibt es?

                      +
                      +    
                        +    
                      • contrib/pgcrypto enthält diverse Funktionen für die Benützung mit
                      • +      SQL-Abfragen;
                        +    
                      • die einzige Möglichkeit, Kommunikationen zwischen Client und Server
                      • +      zu verschlüsseln, ist durch die Anwendung von hostssl in pg_hba.conf;
                        +    
                      • Die Passwörter der Datenbanknutzer werden ab Version 7.3 automatisch
                      • +      verschlüsselt (in früheren Versionen muß der Parameter PASSWORD_ENCRYPTION
                        +      in postgresql.conf explizit eingeschaltet werden);
                        +    
                      • der Server läuft auf einem verschlüsselten Dateisystem.
                      • +    
                        +
                        +    
                        +
                        +    PostgreSQL erweitern
                        +
                        +    

                        5.1) Ich habe eine benutzerdefinierte Funktion geschrieben.  Wenn ich sie in

                        +    psql aufrufe, kommt ein core dump. Warum?
                        +
                        +    

                        Dieses Problem kann viele Ursachen haben. Testen Sie Ihre Funktion zuerst

                        +    in einem eigenen Testprogramm.

                        +
                        +    

                        5.2) Wie kann ich praktische neue Typen und Funktionen zu PostgreSQL

                        +    hinzufügen?
                        +
                        +    

                        Senden Sie Ihre Beiträge an die Mailing Liste pgsql-hackers, und sie

                        +    werden nach Prüfung eventuell ins contrib/ Verzeichnis des Quellcodes
                        +    aufgenommen werden.

                        +
                        +    

                        5.3) Wie schreibe ich eine Funktion in C, die einen Tupel zurückliefert?

                        +
                        +    

                        Ab PostgreSQL 7.3 werden Funktionen, die Tupel zurückliefern, in C, PL/PgSQL und SQL

                        +    unterstützt. Der Programmer's Guide enthält weitere Informationen
                        +    dazu. Ein Bespiel einer solchen Funktion befindet sich in contrib/tablefunc.

                         
                        +    

                        5.4) Ich habe eine der Quellendateien geändert. Warum macht sich

                        +    die Änderung beim erneuten Kompilieren nicht bemerkbar?
                         
                        -

                        5.4) Wie schreibe ich eine Funktion in C, die einen Tuple zurückliefert?

                        +    

                        Die Makefiles enthalten nicht die richtigen Abhängigkeiten für include-

                        +    Dateien. Sie müssen ein "make clean" und dann ein weiteres "make" ausführen.
                        +    Wenn Sie gcc benutzen, können Sie die "--enable-depend"-Option des configure-
                        +    Skripts benutzen, damit der Compiler die Abhängigkeiten automatisch
                        +    ermittelt.

                         
                        -Das erfordert derart extreme Genialität, daß die Autoren es niemals versucht haben,
                        -obwohl es im Prinzip zu machen wäre.

                        +    
                         
                        -

                        5.5) Ich habe eine der Quellendateien geändert. Warum macht sich die Änderung beim erneuten Compilerlauf nicht bemerkbar?

                        >
                        +    

                        Anmerkungen des Übersetzers>

                         
                        -Die Makefiles finden nicht die richtigen Abhängigkeiten. Du mußt ein make clean und dann ein weiteres make machen.
                        +    

                        Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher liegt

                        +    die Übersetzung nicht immer auf dem aktuellsten Stand.
                         
                        +    

                        Über Verbesserungshinweise und Korrekturvorschläge sowie Verständnisfragen

                        +    zum Inhalt der FAQ freue ich mich. Ich nehme auch allgemeine Fragen zu PostgreSQL gerne
                        +    entgegen, kann aber leider keine zeitige Antwort garantieren.

                         
                        -BODY>
                        -HTML>
                        +body>
                        +html>