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