mirror of
https://github.com/postgres/postgres.git
synced 2025-04-25 21:42:33 +03:00
1137 lines
53 KiB
HTML
1137 lines
53 KiB
HTML
<HTML>
|
||
<HEAD>
|
||
<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>
|
||
Last updated: Sat Jul 10 00:37:57 EDT 1999
|
||
<P>
|
||
Current maintainer: Bruce Momjian (<a
|
||
href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>) <BR>
|
||
<P>
|
||
Deutsche Übersetzung von Karsten Schulz (<A HREF="mailto:schulz@linux-systemhaus.de">schulz@linux-systemhaus.de</a>) <BR>
|
||
<P>
|
||
Letzte Aktualisierung der deutschen Ü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 Ü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ä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 Dokumente sind für PostgreSQL verfügbar?<BR>
|
||
<a href="#1.9">1.9</a>) Wie erfahre ich etwas ü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ä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ä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ür PostgreSQL?<BR>
|
||
<a href="#2.2">2.2</a>) Welche Werkzeuge gibt es, um PostgreSQL-Datenbanken über Webseiten
|
||
verfü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ür die Kommunikation mit PostgreSQL verfügbar?<BR>
|
||
|
||
|
||
<H2><CENTER>Administrative Fragen</CENTER></H2>
|
||
|
||
<a href="#3.1">3.1</a>) Warum schlä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ß 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ürzen bei gleichzeitigem Tabellenzugriff ab. Warum?<BR>
|
||
<a href="#3.10">3.10</a>) Wie optimiere ich die Datenbankmaschine für bessere Leistung?<BR>
|
||
<a href="#3.11">3.11</a>) Welche Debugging/Fehlersuch-Hilfsmittel sind für PostgreSQL verfü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ä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öße für eine Zeile, eine Tabelle, eine Datenbank?<BR>
|
||
<a href="#4.7">4.7</a>) Wieviel Plattenplatz benötigt eine Datenbank zur Speicherung einer Datendatei mit zeilenweisen Datensä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ären Ausdrücken und bei
|
||
einer Suche mit Ignorierung der Groß- und Kleinschreibweisen?<BR>
|
||
<a href="#4.14">4.14</a>) Wie ermittle ich in einem Query, daß 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ö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ü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ückliefert?<BR>
|
||
<a href="#5.5">5.5</a>) Ich habe eine der Quellendateien geändert. Warum macht sich die Ä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ä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.
|
||
<P>
|
||
|
||
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
|
||
(<a href="mailto:scrappy@postgreSQL.org">scrappy@postgreSQL.org</a>) (siehe unten, wie
|
||
man sich anmelden kann). Dieses Team ist jetzt für alle aktuellen und zukü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ü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.
|
||
|
||
<P>
|
||
|
||
Der ursprüngliche Name der Software bei Berkeley war Postgres. Als die SQL-Funktionalität 1995
|
||
hinzugefügt wurde, wurde sein Name zu Postgres95 geändert. Der Name wurde Ende 1996 zu
|
||
PostgreSQL geändert.
|
||
<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
|
||
Übersetzung. Die Übersetzung besitzt keinerlei rechtlichen Status.
|
||
Insbesondere kann sich niemand auf diese Ü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ü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. <P>
|
||
|
||
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. <P>
|
||
|
||
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.
|
||
|
||
<H4><a name="1.3">1.3</a>) Auf welchen Unix-Plattformen läuft PostgreSQL?</H4><P>
|
||
|
||
Die Autoren haben PostgreSQL auf folgenden Plattformen kompiliert und getestet
|
||
(einige dieser Kompilierungen benö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>
|
||
|
||
<H4><a name="1.4">1.4</a>) Welche Nicht-Unix-Versionen sind verfügbar?</H4><P>
|
||
|
||
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 <I>win31.mak</I> in der Distribution, um die Win32 libpq-Bibliothek und psql
|
||
zu erzeugen.<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>
|
||
|
||
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>
|
||
|
||
|
||
<H4><a name="1.5">1.5</a>) Woher bekomme ich PostgreSQL?</H4><P>
|
||
Die erste Anlaufadresse für PostgreSQL ist der ftp-Server <a href="ftp://ftp.postgreSQL.org/pub">ftp://ftp.postgreSQL.org/pub</a>
|
||
<P>
|
||
|
||
Die entsprechenden Spiegelserver sind auf der Hauptwebseite aufgelistet.
|
||
|
||
<H4><a name="1.6">1.6</a>) Wo bekomme ich Support für PostgreSQL?</H4><P>
|
||
|
||
Es gibt keinen offiziellen Support für PostgreSQL von der Universität von Kalifornien, Berkeley. Der
|
||
Support wird durch freiwilligen Einsatz geleistet.
|
||
<P>
|
||
|
||
Die Mailing-Liste ist: <a href="mailto:pgsql-general@postgreSQL.org">pgsql-general@postgreSQL.org</a>.
|
||
Die Liste ist für PostgreSQL betreffende Themen vorbehalten. Um sich anzumelden, sende eine
|
||
Email mit folgenden Zeilen im Text (nicht in der Betreffzeile):
|
||
|
||
<PRE>
|
||
<CODE>
|
||
subscribe
|
||
end
|
||
</CODE>
|
||
</PRE><P>
|
||
|
||
an <a href="mailto:pgsql-general-request@postgreSQL.org">pgsql-general-request@postgreSQL.org</a>.<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:
|
||
|
||
<PRE>
|
||
<CODE>
|
||
subscribe
|
||
end
|
||
</CODE>
|
||
</PRE>
|
||
|
||
Die Digests werden an die Mitglieder der Liste geschickt, wenn ca. 30kB an Mails
|
||
zusammengekommen sind.<P>
|
||
|
||
Die Bug-Mailingliste ist verfü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>
|
||
|
||
<PRE>
|
||
<CODE>
|
||
subscribe
|
||
end
|
||
</CODE>
|
||
</PRE>
|
||
|
||
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>
|
||
|
||
<PRE>
|
||
<CODE>
|
||
subscribe
|
||
end
|
||
</CODE>
|
||
</PRE><P>
|
||
|
||
Weitere Mailinglisten und Informationen zu PostgreSQL können auf der PostgreSQL-Homepage im WWW
|
||
gefunden werden:
|
||
<BLOCKQUOTE>
|
||
<a href="http://postgreSQL.org">http://postgreSQL.org</a>
|
||
</BLOCKQUOTE><P>
|
||
|
||
Es gibt auß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>
|
||
|
||
Kommerzieller Support für PostgreSQL ist bei <a href="http://www.pgsql.com">http://www.pgsql.com/</a> verfügbar<P>
|
||
|
||
|
||
<H4><a name="1.7">1.7</a>) Was ist die neueste Version von PostgreSQL?</H4><P>
|
||
|
||
Das neueste Release von PostgreSQL ist die Version 6.5.<P>
|
||
|
||
Wir planen alle 4 Monate Hauptreleases herauszugeben.<P>
|
||
|
||
|
||
<H4><a name="1.8">1.8</a>) Welche Dokumente sind für PostgreSQL verfügbar? </H4><P>
|
||
|
||
Einige Handbücher, Man-Pages und einige kleine Testprogramme sind in der Distribution enthalten.
|
||
Siehe im /doc-Verzeichnis.<P>
|
||
|
||
<I>psql</I>
|
||
hat einige nette \d-Befehle, um Informationen über Typen, Operatoren, Funktionen, Aggregate, usw. zu zeigen. <P>
|
||
|
||
Die Website enthält sogar noch mehr Unterlagen.<P>
|
||
|
||
<H4><a name="1.9">1.9</a>) Wie erfahre ich etwas über bekannte Fehler oder fehlende Eigenschaften von PostgreSQL?
|
||
</H4><P>
|
||
|
||
|
||
PostgreSQL unterstützt eine ausgedehnte Untermenge von SQL-92.
|
||
Siehe unser <a href="http://www.postgreSQL.org/docs/todo.html">TODO</a>
|
||
für eine Auflistung der bekannten Fehler, fehlende Eigenschaften und zukünftige Pläne.<P>
|
||
|
||
|
||
<H4><a name="1.10">1.10</a>) Wie kann ich SQL lernen?</H4><P>
|
||
|
||
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>
|
||
|
||
Viele unserer User mögen <I>The Practical SQL Handbook</I>, Bowman et al.,
|
||
Addison Wesley.<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 am Entwicklerteam teilnehmen?</H4><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änderungen
|
||
an die pgsql-patches Mailingliste.<P>
|
||
|
||
Es gibt ungefähr ein Dutzend Leute, die das <I>commit</I>-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. <P>
|
||
|
||
<H4><a name="1.13">1.13</a>) Wie sende ich einen Fehler-Bericht?</H4><P>
|
||
|
||
Fü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>
|
||
|
||
Ü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>
|
||
<DD>
|
||
|
||
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.<P>
|
||
|
||
<DT> <B>Leistung</B>
|
||
<DD>
|
||
|
||
PostgreSQL läuft in zwei Modi. Im normalen <I>fsync</I>-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.<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ügung zu stellen, der unter weniger Leistungseinbuße
|
||
leidet als der <I>fsync</I>-Modus und die Datenintegrität innerhalb 30 Sekunden
|
||
im Falle eines Betriebssystemabsturzes erlaubt. Der Modus ist durch den Datenbankverwalter
|
||
auswählbar.<P>
|
||
|
||
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 <I>Eigenschaften</I> 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.<P>
|
||
|
||
|
||
|
||
<DT> <B>Zuverlässigkeit</B>
|
||
<DD>
|
||
|
||
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.<P>
|
||
|
||
<DT> <B>Support</B>
|
||
<DD>
|
||
|
||
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), <P>
|
||
|
||
<DT> <B>Preis</B>
|
||
<DD>
|
||
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.
|
||
</DL>
|
||
|
||
|
||
<HR>
|
||
|
||
<H2><CENTER>Fragen zu Benutzerprogrammen</CENTER></H2>
|
||
|
||
|
||
|
||
<H4><a name="2.1">2.1</a>) Gibt es ODBC-Treiber für PostgreSQL?</H4><P>
|
||
|
||
Es sind zwei ODBC-Treiber verfügbar: PostODBC und OpenLink ODBC.<P>
|
||
|
||
PostODBC ist in der Distribution enthalten. Mehr Informationen kö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ß PostgreSQL-ODBC auf
|
||
jeder Client-Plattform zur Verfügung steht, die unterstützt wird (Win, Mac, Unix, VMS).<P>
|
||
|
||
Sie werden dieses Produkt wahrscheinlich an Leute verkaufen, die kommerziellen Qualitäts-Support
|
||
brauchen, aber es wird immer eine Freeware-Version verfügbar sein.
|
||
Fragen dazu bitte an <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 über Webseiten
|
||
verfügbar zu machen?</H4><P>
|
||
|
||
Eine nette Einführung zu Datenbank-gestü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ü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ür einfache Anbindungen geeignet. Fü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ßerdem <I>ecpg,</I>,
|
||
welches eine eingebundene SQL-Query-Schnittstelle für C zur Verfügung stellt.
|
||
|
||
|
||
<H4><a name="2.4">2.4</a>) Welche Sprachen sind für die Kommunikation mit PostgreSQL verfü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ägt initdb fehl?</H4><P>
|
||
|
||
<UL>
|
||
<LI>
|
||
überprüfe, daß 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> überprüfe, daß der Pfad richtig gesetzt ist
|
||
<LI> überprüfe, ob der User <I>postgres</I> der Eigentü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 ä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. Überprüfe zuerst, ob Dein Kernel System V Extensions
|
||
enthält. PostgreSQL benötigt die Kernel-Unterstützung fü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ü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.
|
||
|
||
|
||
<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ötigt eine Semaphore pro möglichen Backend-Prozess.
|
||
Eine Zwischenlösung wäre, postmaster mit einer geringeren Anzahl an Backend-Prozessen zu starten.
|
||
Benutze dazu die <I>-N</I> Option mit einem Wert kleiner als die standardmäßigen 32.
|
||
|
||
Eine dauerhafte Lösung wäre es, die Kernel-Parameter
|
||
<I>SEMMNS</I> und <I>SEMMNI</I> zu erhöhen.<P>
|
||
|
||
Falls die Fehlermeldung anders aussieht, hast Du möglicherweise keine Semaphoren-Unterstützung
|
||
in Deinem Kernel aktiviert.<P>
|
||
|
||
|
||
<H4><a name="3.6">3.6</a>) Wie verhindere ich, daß andere Hosts auf meine PostgreSQL Datenbanken zugreifen?</H4><P>
|
||
|
||
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 <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öglichen, stelle sicher, daß der postmaster
|
||
mit der <I>-i</I> Option gestartet wurde, und fü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önnen. Das ist eine Sicherheitsmaßnahme,
|
||
wegen der Möglichkeit Objekt-Module dynamisch in die Datenbank zu linken.
|
||
<P>
|
||
|
||
|
||
<H4><a name="3.9">3.9</a>) Alle meine Server stürzen bei gleichzeitigem Tabellenzugriff ab. Warum?</H4><P>
|
||
|
||
Dieses Problem kann durch einen Kernel verursacht werden, der ohne Support für Semaphoren
|
||
konfiguriert wurde.
|
||
|
||
|
||
<H4><a name="3.10">3.10</a>) Wie optimiere ich die Datenbankmaschine für bessere Leistung?</H4><P>
|
||
|
||
Sicherlich kö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, überprü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. Ü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.<P>
|
||
|
||
Es gibt verschiedene Tuning-Maß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()<29>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.<P>
|
||
|
||
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ß.<P>
|
||
|
||
Der <I>cluster</I> 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.
|
||
|
||
|
||
<H4><a name="3.11">3.11</a>) Welche Debugging/Fehlersuch-Hilfsmittel sind für PostgreSQL verfügbar?</H4><P>
|
||
|
||
PostgreSQL hat einige Möglichkeiten, Statusinformationen zu berichten, die
|
||
nützlich für die Fehlersuche sein können.<P>
|
||
|
||
Erstens, wenn beim configure-Lauf die Option --enable-cassert angegeben wurde,
|
||
verfolgen viele <I>assert()<29>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ügung.
|
||
Stelle zuerst sicher, daß Du den Standard-Output und Fehlerkanal in eine Datei umleitest, wenn Du den postmaster startest, :
|
||
<PRE>
|
||
<CODE>
|
||
cd /usr/local/pgsql
|
||
./bin/postmaster >server.log 2>&1 &
|
||
</CODE>
|
||
</PRE><P>
|
||
|
||
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!
|
||
<P>
|
||
|
||
Du kannst tatsä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ß ein Zeilenumbruch das SQL-Statement beendet, nicht das Semikolon.
|
||
Wenn Du PostgreSQL mit Debugging-Symbolen kompiliert hast, kannst Du einen Debugger
|
||
benutzen, um zu beobachten, was passiert.
|
||
Da das Backend nicht vom postmaster gestartet wurde, läuft es nicht in der
|
||
gleichen Umgebung und deshalb können einige locking/backend Operationen
|
||
nicht reproduziert werden.
|
||
Einige Betriebssysteme können sich an einen Backend-Prozess direkt
|
||
anhängen, um Probleme zu diagnostizieren.
|
||
<P>
|
||
|
||
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.
|
||
<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ßt die Grenze des postmasters, die festlegt,
|
||
wieviele gleichzeitige Backend-Prozesse gestartet werden können, hochsetzen.<P>
|
||
|
||
In Postgres 6.5 sind das normalerweise 32 Prozesse. Du kannst diesen Wert dadurch erhöhen,
|
||
daß 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ö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ährend der Konfiguration
|
||
setzen, indem Du <I>--with-maxbackends</I> angibst.
|
||
|
||
Anmerkung: Falls Du <I>-N</I> größer als 32 einstellst, solltest
|
||
Du <I>-B</I> 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 <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öffneten Dateien <I>NFILE</I> und <I>NINODE.</I>
|
||
|
||
Der Grund für die Begrenzung der erlaubten Backend-Prozesse liegt darin, daß
|
||
verhindert werden soll, daß 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 Ä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äre Dateien, die durch den Query-Ausführer erzeugt werden.
|
||
Wenn zum Beispiel eine Sortierung durchgeführt werden muß, um ein <I>ORDER BY</I>
|
||
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.
|
||
<P>
|
||
|
||
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.<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ßt explizit die pg_group-Tabelle mittels INSERT/UPDATE modifizieren.
|
||
Zum Beispiel:
|
||
|
||
<PRE>
|
||
<CODE>
|
||
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=>
|
||
</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ür jede Gruppe sein.
|
||
<LI> grolist: die Liste der pg_user IDs, die zu dieser Gruppe gehö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>
|
||
|
||
Ü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.
|
||
<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ür eine Beschreibung.<P>
|
||
|
||
<H4><a name="4.3">4.3</a>) Wie wä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ß 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 <I>ORDER BY</I> benutzt. Es gibt keine Möglichkeit Zeilen
|
||
zurü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ür <I>psql</I> ansehen.
|
||
Sie enthält die SQL-Befehle, die die Backslash-Kommandos (\) ausfü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ü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ützen <I>alter table drop column</I> nicht, aber mache es so:
|
||
<PRE> <CODE>
|
||
SELECT ... -- wähle alle Spalten außer die, die Du entfernen willst
|
||
INTO TABLE new_table
|
||
FROM old_table;
|
||
DROP TABLE old_table;
|
||
ALTER TABLE new_table RENAME TO old_table;
|
||
</CODE>
|
||
</PRE><P>
|
||
|
||
|
||
<H4><a name="4.6">4.6</a>) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?</H4><P>
|
||
|
||
Zeilen sind auf 8 kB begrenzt, aber das kann geändert werden, indem Du in
|
||
<I>include/config.h</I> die Konstante <I>BLCKSZ</I> änderst.
|
||
Um Attribute mit mehr als 8 kB zu nutzen, kannst Du auch das "Large Object Interface" benutzen.<P>
|
||
Zeilen überschreiten keine 8 kB-Grenzen. Eine Zeile mit 5 kB wird 8 kB Speicherplatz benötigen.
|
||
<P>
|
||
|
||
Tabellen- und Datenbankgröß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ötigt eine Datenbank zur Speicherung einer Datendatei mit zeilenweisen Datensätzen?<BR></H4><P>
|
||
|
||
Eine Postgres Datenbank kann ungefä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ötigt 2,4 MB Speicherplatz.
|
||
Die Größe der Postgres Datenbankdatei, die diese Daten enthält, liegt
|
||
ungefähr bei 14 MB.
|
||
|
||
<PRE>
|
||
36 Bytes: jeder Zeilenkopf (ungefähr)
|
||
+ 8 Bytes: zwei Integer-Felder @ jedes 4 Bytes
|
||
+ 4 Bytes: Zeiger auf den Datensatz
|
||
-----------------------------------------------
|
||
48 Bytes pro Zeile
|
||
|
||
Die Größe einer Datenseite in PostgreSQL ist 8192 Bytes (8 KB), also:
|
||
|
||
8192 Bytes pro Seite
|
||
--------------------- = 171 Zeilen pro Seite (aufgerundet)
|
||
48 Bytes pro Zeile
|
||
|
||
300000 Datenzeilen
|
||
----------------------- = 1755 Datenbankseiten
|
||
171 Zeilen pro Seite
|
||
|
||
1755 Datenbankseiten * 8192 Bytes pro Seite = 14,376,960 Bytes (14MB)
|
||
</PRE></P>
|
||
|
||
Indizes haben nicht einen solchen Overhead, sie beinhalten jedoch die Daten, die sie
|
||
indizieren und können so auch sehr groß 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ö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ßt Du ein explizites <I>vacuum</I> 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.<P>
|
||
|
||
Benutze den Befehl <I> vacuum analyze</I> für die spaltenspezifische Optimierung.
|
||
<I>Vacuum analyze</I> 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ß <I>vacuum analyze</I>
|
||
regelmäßig aufgerufen werden sollte.
|
||
<P>
|
||
|
||
Indizes werden nicht für <I>ORDER BY</I> Operationen benutzt.<P>
|
||
|
||
Bei der Nutzung von Wildcard-Operatoren wie <I>LIKE</I> oder <I>~,</I> kö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> beginnen (Die Sucheparameter regulärer Ausdrücke sollten
|
||
mit <I>^.</I> 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ä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 <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ö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ö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.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ösen.
|
||
Es erlaubt die Behandlung von großen Join-Queries ohne erschöpfende Suche.
|
||
<P>
|
||
Für weitere Informationen siehe die Dokumentation.
|
||
|
||
|
||
<H4><a name="4.13">4.13</a>) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer Suche mit Ignorierung der Groß- und Kleinschreibweisen?</H4><P>
|
||
|
||
<I>~</I> und <I>~*</I> 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ß 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üllt bis zur angegebenen Länge
|
||
VARCHAR(#) varchar Die Größe legt die Maximallänge fest, kein Ausfüllen mit Leerzeichen
|
||
TEXT text Die Länge wird nur durch die maximale Zeilenlänge beschränkt
|
||
BYTEA bytea Bytearray mit variabler Länge
|
||
</PRE><P>
|
||
|
||
Du mußt die internen Namen benutzen, wenn Du interne Operationen durchführen willst.
|
||
<P>
|
||
|
||
Die letzten vier Typen sind "varlena"-Typen (d.h. die ersten vier Bytes geben die Länge an, gefolgt
|
||
von den Daten).
|
||
<I>CHAR(#)</I> belegt die maximale Anzahl von Bytes, unabhängig davon, wieviele Daten im
|
||
Feld gespeichert werden.
|
||
<I>TEXT, VARCHAR(#)</I> und <I>BYTEA</I> 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.
|
||
<P>
|
||
|
||
|
||
<H4><a name="4.16">4.16</a>) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Inhalts?</H4><P>
|
||
|
||
PostgreSQL unterstü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ür weitere Informationen über Sequenzen.
|
||
|
||
Du kannst aber auch das <I>Oid</I> Feld jeder Zeile als eindeutigen Wert nutzen.
|
||
Jedoch muß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ä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ößer als dieser Wert.
|
||
Standardmäß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ö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 ändern, oder eine Kopie der
|
||
Tabelle mit den originalen Oids anlegen kö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 ändern sich, wenn Zeilen geändert oder
|
||
neu geladen werden. Sie werden von Index-Einträgen genutzt, um die
|
||
Zeilen physisch zu adressieren.
|
||
|
||
<H4><a name="4.18">4.18</a>) Was ist die Bedeutung der 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:
|
||
|
||
<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öglicherweise ist der virtuelle Speicher verbraucht oder Dein Kernel hat
|
||
eine niedrige Grenze fü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ü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.
|
||
<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ß
|
||
<I>lo_open</I> 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.<P>
|
||
|
||
Das aktuelle PostgreSQL erzwingt diese Regel, indem es die Handles der Large Objects
|
||
beim COMMIT der Transaktion schließt, was sofort nach dem <I>lo_open</I> passiert,
|
||
wenn Du nicht innerhalb einer Transaktion bist.
|
||
So fü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ß Du
|
||
<CODE>auto-commit off</CODE> setzen muß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ßerdem sicher, daß 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ß Du nicht <I>malloc/free</I> und <I>palloc/pfree</I> durcheinanderwü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>
|
||
|
||
|
||
<H4><a name="5.4">5.4</a>) Wie schreibe ich eine Funktion in C, die einen Tuple zurückliefert?</H4><P>
|
||
|
||
Das erfordert derart extreme Genialität, daß die Autoren es niemals versucht haben,
|
||
obwohl es im Prinzip zu machen wäre.<P>
|
||
|
||
<H4><a name="5.5">5.5</a>) Ich habe eine der Quellendateien geändert. Warum macht sich die Änderung beim erneuten Compilerlauf nicht bemerkbar?</H4><P>
|
||
|
||
Die Makefiles finden nicht die richtigen Abhängigkeiten. Du mußt ein <I>make clean</I> und dann ein weiteres <I>make</I> machen.
|
||
|
||
|
||
</BODY>
|
||
</HTML>
|
||
|
||
|