2000-09-14 06:21:31 +04:00
|
|
|
|
|
|
|
|
|
H<>ufig gestellte Fragen (FAQ) zu PostgreSQL
|
|
|
|
|
|
|
|
|
|
Last updated: Sat Jul 10 00:37:57 EDT 1999
|
|
|
|
|
|
|
|
|
|
Current maintainer: Bruce Momjian (maillist@candle.pha.pa.us)
|
|
|
|
|
|
|
|
|
|
Deutsche <20>bersetzung von Karsten Schulz (schulz@linux-systemhaus.de)
|
|
|
|
|
|
|
|
|
|
Letzte Aktualisierung der deutschen <20>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
|
|
|
|
|
<20>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.
|
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Allgemeine Fragen
|
|
|
|
|
|
|
|
|
|
1.1) Was ist PostgreSQL?
|
|
|
|
|
1.2) Welches Copyright liegt auf PostgreSQL?
|
|
|
|
|
1.3) Auf welchen Unix-Plattformen l<>uft PostgreSQL?
|
|
|
|
|
1.4) Welche Nicht-Unix-Versionen sind verf<72>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<72>gbar?
|
|
|
|
|
1.9) Wie erfahre ich etwas <20>ber bekannte Fehler oder fehlende
|
|
|
|
|
Eigenschaften von PostgreSQL?
|
|
|
|
|
1.10) Wie kann ich SQL lernen?
|
|
|
|
|
1.11) Ist PostgreSQL Y2K (Jahr 2000) f<>hig?
|
|
|
|
|
1.12) Wie kann ich am Entwicklerteam teilnehmen?
|
|
|
|
|
1.13) Wie sende ich einen Fehler-Bericht?
|
|
|
|
|
1.14) Wie l<>uft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
|
|
|
|
|
|
|
|
|
|
Fragen zu Benutzerprogrammen
|
|
|
|
|
|
|
|
|
|
2.1) Gibt es ODBC-Treiber f<>r PostgreSQL?
|
|
|
|
|
2.2) Welche Werkzeuge gibt es, um PostgreSQL-Datenbanken <20>ber
|
|
|
|
|
Webseiten verf<72>gbar zu machen?
|
|
|
|
|
2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle? Einen
|
|
|
|
|
Report-Generator? Eine eingebaute Query-Schnittstelle?
|
|
|
|
|
2.4) Welche Sprachen sind f<>r die Kommunikation mit PostgreSQL
|
|
|
|
|
verf<72>gbar?
|
|
|
|
|
|
|
|
|
|
Administrative Fragen
|
|
|
|
|
|
|
|
|
|
3.1) Warum schl<68>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<64> 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<73>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<72>gbar?
|
|
|
|
|
3.12) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
|
|
|
|
|
Verbindung versuche. Warum?
|
|
|
|
|
3.13) Was sind die pg_psort.XXX Dateien in meinem
|
|
|
|
|
Datenbank-Verzeichnis?
|
|
|
|
|
3.14) Wie richte ich eine Benutzergruppe (pg_group) ein?
|
|
|
|
|
|
|
|
|
|
Fragen zum Betrieb
|
|
|
|
|
|
|
|
|
|
4.1) Das System scheint Kommata, Dezimalpunkte und Datumsformate
|
|
|
|
|
durcheinanderzubringen.
|
|
|
|
|
4.2) Was ist der genauer Unterschied zwischen Binary Cursors und
|
|
|
|
|
Normal Cursors?
|
|
|
|
|
4.3) Wie w<>hle ich per SELECT nur die ersten paar Zeilen in einem
|
|
|
|
|
Query aus?
|
|
|
|
|
4.4) Wie bekomme ich eine Liste der Tabellen oder anderen Dingen, die
|
|
|
|
|
ich in psql sehen kann
|
|
|
|
|
4.5) Wie entferne ich eine Spalte von einer Tabelle?
|
|
|
|
|
4.6) Was ist die Maximalgr<67><72>e f<>r eine Zeile, eine Tabelle, eine
|
|
|
|
|
Datenbank?
|
|
|
|
|
4.7) Wieviel Plattenplatz ben<65>tigt eine Datenbank zur Speicherung
|
|
|
|
|
einer Datendatei mit zeilenweisen Datens<6E>tzen?
|
|
|
|
|
4.8) Wie finde ich heraus, welche Indizes oder Operationen in der
|
|
|
|
|
Datenbank definiert sind?
|
|
|
|
|
4.9) Meine Queries sind langsam oder nutzen die Indizes nicht. Warum?
|
|
|
|
|
4.10) Auf welche Weise kann ich sehen, wie der Query-Optimierer meine
|
|
|
|
|
Abfrage auswertet?
|
|
|
|
|
4.11) Was ist ein R-Tree Index?
|
|
|
|
|
4.12) Was ist "Genetic Query Optimization"?
|
|
|
|
|
4.13) Wie verfahre ich bei der Suche mit regul<75>ren Ausdr<64>cken und bei
|
|
|
|
|
einer Suche mit Ignorierung der Gro<72>- und Kleinschreibweisen?
|
|
|
|
|
4.14) Wie ermittle ich in einem Query, da<64> 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<72>hung
|
|
|
|
|
des Inhalts?
|
|
|
|
|
4.17) Was ist ein Oid? Was ist ein Tid?
|
|
|
|
|
4.18) Was ist die Bedeutung der verschiedenen Ausdr<64>cke, die in
|
|
|
|
|
PostgreSQL benutzt werden (z.B. attribute, class,...)?
|
|
|
|
|
4.19) Wieso bekomme ich einen Fehler: "FATAL: palloc failure: memory
|
|
|
|
|
exhausted?"
|
|
|
|
|
4.20) Wie kann ich feststellen, welche PostgreSQL-Version ich laufen
|
|
|
|
|
habe?
|
|
|
|
|
4.21) Beim Arbeiten mit "Large-Objects" kommt die Fehlermeldung:
|
|
|
|
|
invalid large obj descriptor. Warum?
|
|
|
|
|
|
|
|
|
|
PostgreSQL erweitern
|
|
|
|
|
|
|
|
|
|
5.1) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich
|
|
|
|
|
sie in psql aufrufe, kommt ein core dump. Warum?
|
|
|
|
|
5.2) Was bedeutet die Meldung: NOTICE:PortalHeapMemoryFree: 0x402251d0
|
|
|
|
|
not in alloc set!?
|
|
|
|
|
5.3) Wie kann ich ein paar elegante neue Feldtypen und Funktionen zu
|
|
|
|
|
PostgreSQL beitragen?
|
|
|
|
|
5.4) Wie schreibe ich eine Funktion in C, die ein Tuple zur<75>ckliefert?
|
|
|
|
|
5.5) Ich habe eine der Quellendateien ge<67>ndert. Warum macht sich die
|
|
|
|
|
<20>nderung beim erneuten Compilerlauf 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<73>hige
|
|
|
|
|
Datenmodell und die reichhaltigen Datentypen von POSTGRES beibeh<65>lt,
|
|
|
|
|
ersetzt es die PostQuel-Abfragesprache durch eine ausgedehnte
|
|
|
|
|
Teilmenge von SQL. PostgreSQL ist frei und der komplette Quellcode ist
|
|
|
|
|
verf<72>gbar.
|
|
|
|
|
|
|
|
|
|
Die PostgreSQL-Entwicklung wird von einem Team von Internet-Entwickler
|
|
|
|
|
durchgef<65>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<75>nftigen Entwicklungen
|
|
|
|
|
von PostgreSQL verantwortlich.
|
|
|
|
|
|
|
|
|
|
Die Autoren von PostgreSQL 1.01 waren Andrew Yu und Jolly Chen. Viele
|
|
|
|
|
andere haben zur Portierung, zu den Tests, zur Fehlersuche und zur
|
|
|
|
|
Verbesserung des Codes beigetragen. Der urspr<70>ngliche Postgres-Code,
|
|
|
|
|
von dem PostgreSQL abstammt, ist auf die Bem<65>hungen von vielen
|
|
|
|
|
Studierenden und Diplomanden, sowie Programmierern, die unter der
|
|
|
|
|
Weisung des Professors Michael Stonebraker an der Universit<69>t von
|
|
|
|
|
Kalifornien, Berkeley arbeiteteten, zur<75>ckzuf<75>hren.
|
|
|
|
|
|
|
|
|
|
Der urspr<70>ngliche Name der Software bei Berkeley war Postgres. Als die
|
|
|
|
|
SQL-Funktionalit<69>t 1995 hinzugef<65>gt wurde, wurde sein Name zu
|
|
|
|
|
Postgres95 ge<67>ndert. Der Name wurde Ende 1996 zu PostgreSQL ge<67>ndert.
|
|
|
|
|
|
|
|
|
|
1.2) Welches Copyright liegt auf PostgreSQL?
|
|
|
|
|
|
|
|
|
|
PostgreSQL steht unter folgendem COPYRIGHT (Originaltext):
|
|
|
|
|
|
|
|
|
|
PostgreSQL Data Base Management System
|
|
|
|
|
|
|
|
|
|
Copyright (c) 1994-6 Regents of the University of California
|
|
|
|
|
|
|
|
|
|
Permission to use, copy, modify, and distribute this software and its
|
|
|
|
|
documentation for any purpose, without fee, and without a written
|
|
|
|
|
agreement is hereby granted, provided that the above copyright notice
|
|
|
|
|
and this paragraph and the following two paragraphs appear in all
|
|
|
|
|
copies.
|
|
|
|
|
|
|
|
|
|
IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
|
|
|
|
|
FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
|
|
|
|
|
INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
|
|
|
|
|
ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
|
|
|
|
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
|
|
|
|
|
THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
|
|
|
|
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
|
|
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
|
|
|
|
|
PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
|
|
|
|
|
CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
|
|
|
|
|
UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
|
|
|
|
|
|
|
|
|
Es gilt die Copyright-Klausel im Original! Informativ folgt hier eine
|
|
|
|
|
<20>bersetzung. Die <20>bersetzung besitzt keinerlei rechtlichen Status.
|
|
|
|
|
Insbesondere kann sich niemand auf diese <20>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<65>hr und ohne eine schriftliche Vereinbarung zu
|
|
|
|
|
benutzen, zu kopieren, zu <20>ndern und zu verteilen wird hiermit
|
|
|
|
|
bewilligt, vorausgesetzt da<64> der oben genannte Urheberrechtsvermerk
|
|
|
|
|
und dieser Paragraph und die folgenden zwei Paragraphen in allen
|
|
|
|
|
Kopien erscheinen.
|
|
|
|
|
|
|
|
|
|
IN KEINEM FALL IST DIE UNIVERSIT<49>T VON KALIFORNIEN GEGEN<45>BER JEDEM
|
|
|
|
|
M<>GLICHEN BETEILIGTEN F<>R DIE DIREKTEN, INDIREKTEN, SPEZIELLEN,
|
|
|
|
|
BEIL<49>UFIGEN ODER FOLGESCH<43>DEN, EINSCHLIE<49>LICH DER VERLORENEN PROFITE
|
|
|
|
|
VERANTWORTLICH, DIE AUS DEM GEBRAUCH VON DIESER SOFTWARE UND SEINEN
|
|
|
|
|
UNTERLAGEN HERAUS ENTSTEHEN, SELBST WENN DIE UNIVERSIT<49>T VON
|
|
|
|
|
KALIFORNIEN VON DER M<>GLICHKEIT SOLCHEN SCHADENS BENACHRICHTIGT WORDEN
|
|
|
|
|
IST.
|
|
|
|
|
|
|
|
|
|
DIE UNIVERSIT<49>T VON KALIFORNIEN LEHNT SPEZIELL ALLE M<>GLICHE GARANTIEN
|
|
|
|
|
AB, EINSCHLIESSLICH, ABER NICHT BEGRENZT AUF, DIE IMPLIZIERTEN
|
|
|
|
|
GARANTIEN VON GESCH<43>FTSNUTZEN UND EIGNUNG ZU EINEM BESTIMMTEN ZWECK.
|
|
|
|
|
DIE SOFTWARE, DIE NACHSTEHEND BEREITGESTELLT WIRD, BASIERT AUF EINER
|
|
|
|
|
"SO WIE SIE IST"-GRUNDLAGE, UND DIE UNIVERSIT<49>T VON KALIFORNIEN HAT
|
|
|
|
|
KEINE VERPFLICHTUNGEN, WARTUNG, SUPPORT, AKTUALISIERUNGSVORG<52>NGE,
|
|
|
|
|
VERBESSERUNGEN ODER <20>NDERUNGEN ZUR VERF<52>GUNG ZU STELLEN.
|
|
|
|
|
|
|
|
|
|
1.3) Auf welchen Unix-Plattformen l<>uft PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Die Autoren haben PostgreSQL auf folgenden Plattformen kompiliert und
|
|
|
|
|
getestet (einige dieser Kompilierungen ben<65>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<72>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 <20>ber TCP/IP mit einem Server in Verbindung, der auf einer
|
|
|
|
|
unserer unterst<73>tzten Unixplattformen l<>uft. Es gibt die Datei
|
|
|
|
|
win31.mak in der Distribution, um die Win32 libpq-Bibliothek und psql
|
|
|
|
|
zu erzeugen.
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
Es gibt eine weitere Portierung, die U/Win benutzt bei
|
|
|
|
|
http://surya.wipro.com/uwin/ported.html.
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
1.6) Wo bekomme ich Support f<>r PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Es gibt keinen offiziellen Support f<>r PostgreSQL von der Universit<69>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):
|
|
|
|
|
|
|
|
|
|
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:
|
|
|
|
|
|
|
|
|
|
subscribe
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
Die Digests werden an die Mitglieder der Liste geschickt, wenn ca.
|
|
|
|
|
30kB an Mails zusammengekommen sind.
|
|
|
|
|
|
|
|
|
|
Die Bug-Mailingliste ist verf<72>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
|
|
|
|
|
|
|
|
|
|
Es gibt au<61>erdem einen IRC-Channel im EFNet, Kanal #PostgreSQL. Bruce
|
|
|
|
|
nutzt den Unix-Befehl: irc -c '#PostgreSQL' "$USER" irc.phoenix.net um
|
|
|
|
|
teilzunehmen
|
|
|
|
|
|
|
|
|
|
Kommerzieller Support f<>r PostgreSQL ist bei http://www.pgsql.com/
|
|
|
|
|
verf<72>gbar
|
|
|
|
|
|
|
|
|
|
1.7) Was ist die neueste Version von PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Das neueste Release von PostgreSQL ist die Version 6.5.
|
|
|
|
|
|
|
|
|
|
Wir planen alle 4 Monate Hauptreleases herauszugeben.
|
|
|
|
|
|
|
|
|
|
1.8) Welche Dokumente sind f<>r PostgreSQL verf<72>gbar?
|
|
|
|
|
|
|
|
|
|
Einige Handb<64>cher, Man-Pages und einige kleine Testprogramme sind in
|
|
|
|
|
der Distribution enthalten. Siehe im /doc-Verzeichnis.
|
|
|
|
|
|
|
|
|
|
psql hat einige nette \d-Befehle, um Informationen <20>ber Typen,
|
|
|
|
|
Operatoren, Funktionen, Aggregate, usw. zu zeigen.
|
|
|
|
|
|
|
|
|
|
Die Website enth<74>lt sogar noch mehr Unterlagen.
|
|
|
|
|
|
|
|
|
|
1.9) Wie erfahre ich etwas <20>ber bekannte Fehler oder fehlende Eigenschaften
|
|
|
|
|
von PostgreSQL?
|
|
|
|
|
|
|
|
|
|
PostgreSQL unterst<73>tzt eine ausgedehnte Untermenge von SQL-92. Siehe
|
|
|
|
|
unser TODO f<>r eine Auflistung der bekannten Fehler, fehlende
|
|
|
|
|
Eigenschaften und zuk<75>nftige Pl<50>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.
|
|
|
|
|
|
|
|
|
|
Viele unserer User m<>gen The Practical SQL Handbook, Bowman et al.,
|
|
|
|
|
Addison Wesley.
|
|
|
|
|
|
|
|
|
|
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?
|
|
|
|
|
|
|
|
|
|
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<6D>nderungen an die pgsql-patches Mailingliste.
|
|
|
|
|
|
|
|
|
|
Es gibt ungef<65>hr ein Dutzend Leute, die das commit-Recht im
|
|
|
|
|
PostgreSQL-CVS Archiv haben. Alle haben so viele hochwertige Patches
|
|
|
|
|
eingebracht, da<64> es schwer f<>r die CVS-Verwalter war, mitzuhalten. Und
|
|
|
|
|
wir hatten das Vertrauen, da<64> die <20>nderungen, die sie festlegten, sehr
|
|
|
|
|
wahrscheinlich von hoher Qualit<69>t sind.
|
|
|
|
|
|
|
|
|
|
1.13) Wie sende ich einen Fehler-Bericht?
|
|
|
|
|
|
|
|
|
|
F<>lle die "Fehler-Vorlage"-Datei (bug.template im doc-Verzeichnis) aus
|
|
|
|
|
und sende sie an: bugs@postgreSQL.org
|
|
|
|
|
|
|
|
|
|
<20>berpr<70>fe auch den ftp-Server ftp://ftp.postgreSQL.org/pub, um
|
|
|
|
|
nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches
|
|
|
|
|
gibt.
|
|
|
|
|
|
|
|
|
|
1.14) Wie l<>uft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
|
|
|
|
|
|
|
|
|
|
Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,
|
|
|
|
|
Leistung, Zuverl<72>ssigkeit, Support und Preis.
|
|
|
|
|
|
|
|
|
|
Eigenschaften
|
|
|
|
|
PostgreSQL hat die meisten Eigenschaften, die in gro<72>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<69>t von externen
|
|
|
|
|
Schl<68>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<64>, selbst wenn das Betriebssystem abst<73>rzt und
|
|
|
|
|
der Strom ausf<73>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<72>gung zu
|
|
|
|
|
stellen, der unter weniger Leistungseinbu<62>e leidet als der
|
|
|
|
|
fsync-Modus und die Datenintegrit<69>t innerhalb 30 Sekunden im
|
|
|
|
|
Falle eines Betriebssystemabsturzes erlaubt. Der Modus ist
|
|
|
|
|
durch den Datenbankverwalter ausw<73>hlbar.
|
|
|
|
|
|
|
|
|
|
Im Vergleich zu MySQL oder schlankeren Datenbanksystemen sind
|
|
|
|
|
wir hinsichtlich INSERTs/UPDATEs langsamer, weil wir einen
|
|
|
|
|
Transaktions-Overhead haben. Selbstverst<73>ndlich hat MySQL kaum
|
|
|
|
|
eine der Eigenschaften, die oben im Kapitel Eigenschaften
|
|
|
|
|
erw<72>hnt werden. PostgreSQL ist f<>r Flexibilit<69>t und gute
|
|
|
|
|
Eigenschaften designed, trotzdem fahren wir fort, die Leistung
|
|
|
|
|
durch Profiling und Quellcodeanalyse zu verbessern.
|
|
|
|
|
|
|
|
|
|
Zuverl<72>ssigkeit
|
|
|
|
|
Wir stellen fest, da<64> ein DBMS zuverl<72>ssig sein mu<6D>, oder es
|
|
|
|
|
ist wertlos. Wir bem<65>hen uns, gut gepr<70>ften, best<73>ndigen Code
|
|
|
|
|
freizugeben, der nur ein Minimum an Programmfehler hat. Jede
|
|
|
|
|
Freigabe hat mindestens einen Monat Betatestphase hinter sich,
|
|
|
|
|
und unsere Freigabehistorie zeigt, da<64> wir stabile, solide
|
|
|
|
|
Versionen freigeben, die im Produktionsbetrieb genutzt werden
|
|
|
|
|
k<>nnen. Wir glauben, da<64> wir im Vergleich mit anderer
|
|
|
|
|
Datenbanksoftware vorteilhaft dastehen.
|
|
|
|
|
|
|
|
|
|
Support
|
|
|
|
|
Unsere Mailingliste stellt eine gro<72>e Gruppe Entwickler und
|
|
|
|
|
Benutzer zur Behebung aller m<>glichen anzutreffenden Probleme
|
|
|
|
|
zur Verf<72>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<64>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<65>tigen. (siehe
|
|
|
|
|
Support-Faq),
|
|
|
|
|
|
|
|
|
|
Preis
|
|
|
|
|
PostgrSQL ist frei verf<72>gbar, sowohl f<>r die kommerzielle, wie
|
|
|
|
|
f<>r die nicht-kommerzielle Nutzung. Du kannst Deinen Code fast
|
|
|
|
|
ohne Beschr<68>nkungen zu unserem hinzuf<75>gen. Die einzigen
|
|
|
|
|
Beschr<68>nkungen werden in der BSD-artigen Lizenz weiter oben
|
|
|
|
|
aufgef<65>hrt.
|
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Fragen zu Benutzerprogrammen
|
|
|
|
|
|
|
|
|
|
2.1) Gibt es ODBC-Treiber f<>r PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Es sind zwei ODBC-Treiber verf<72>gbar: PostODBC und OpenLink ODBC.
|
|
|
|
|
|
|
|
|
|
PostODBC ist in der Distribution enthalten. Mehr Informationen k<>nnen
|
|
|
|
|
unter http://www.insightdist.com/psqlodbc abgerufen werden.
|
|
|
|
|
|
|
|
|
|
OpenLink ODBC kann unter http://www.openlinksw.com geholt werden. Die
|
|
|
|
|
Software arbeitet mit OpenLinks Standard-ODBC-Client, so da<64>
|
|
|
|
|
PostgreSQL-ODBC auf jeder Client-Plattform zur Verf<72>gung steht, die
|
|
|
|
|
unterst<73>tzt wird (Win, Mac, Unix, VMS).
|
|
|
|
|
|
|
|
|
|
Sie werden dieses Produkt wahrscheinlich an Leute verkaufen, die
|
|
|
|
|
kommerziellen Qualit<69>ts-Support brauchen, aber es wird immer eine
|
|
|
|
|
Freeware-Version verf<72>gbar sein. Fragen dazu bitte an
|
|
|
|
|
postgres95@openlink.co.uk.
|
|
|
|
|
|
|
|
|
|
2.2) Welche Werkzeuge gibt es, um PostgreSQL-Datenbanken <20>ber Webseiten
|
|
|
|
|
verf<72>gbar zu machen?
|
|
|
|
|
|
|
|
|
|
Eine nette Einf<6E>hrung zu Datenbank-gest<73>tzten Webseiten kann unter
|
|
|
|
|
http://www.webtools.com abgerufen werden.
|
|
|
|
|
|
|
|
|
|
Eine weitere gibt es bei http://www.phone.net/home/mwm/hotlist/.
|
|
|
|
|
|
|
|
|
|
F<>r die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP
|
|
|
|
|
gibt es bei http://www.php.net
|
|
|
|
|
|
|
|
|
|
PHP ist hervorragend f<>r einfache Anbindungen geeignet. F<>r komplexere
|
|
|
|
|
Aufgaben nutzen viele die Perl-Schnittstelle mit CGI.pm.
|
|
|
|
|
|
|
|
|
|
Einen WWW-Gateway, basierend auf WDB, kann man bei
|
|
|
|
|
http://www.eol.ists.ca/~dunlop/wdb-p95 herunterladen.
|
|
|
|
|
|
|
|
|
|
2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle? Einen
|
|
|
|
|
Report-Generator? Eine eingebaute Query-Schnittstelle?
|
|
|
|
|
|
|
|
|
|
Wir haben eine nette grafische Benutzerschnittstelle mit Namen
|
|
|
|
|
pgaccess, welche in der Distribution enthalten ist. pgaccess hat auch
|
|
|
|
|
einen Reportgenerator. Die Webpage liegt hier:
|
|
|
|
|
http://www.flex.ro/pgaccess
|
|
|
|
|
|
|
|
|
|
In der Distribution gibt es au<61>erdem ecpg,, welches eine eingebundene
|
|
|
|
|
SQL-Query-Schnittstelle f<>r C zur Verf<72>gung stellt.
|
|
|
|
|
|
|
|
|
|
2.4) Welche Sprachen sind f<>r die Kommunikation mit PostgreSQL verf<72>gbar?
|
|
|
|
|
|
|
|
|
|
Wir haben:
|
|
|
|
|
* C(libpq)
|
|
|
|
|
* C++(libpq++)
|
|
|
|
|
* Embedded C(ecpg)
|
|
|
|
|
* Java(jdbc)
|
|
|
|
|
* Perl(perl5)
|
|
|
|
|
* ODBC(odbc)
|
|
|
|
|
* Python(PyGreSQL)
|
|
|
|
|
* TCL(libpgtcl)
|
|
|
|
|
* ein rohes C/4GL(contrib/pginterface)
|
|
|
|
|
* Embedded HTML(PHP from http://www.php.net)
|
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Administrative Fragen
|
|
|
|
|
|
|
|
|
|
3.1) Warum schl<68>gt initdb fehl?
|
|
|
|
|
|
|
|
|
|
* <20>berpr<70>fe, da<64> keine Binaries vorheriger Versionen in Deinem Pfad
|
|
|
|
|
(PATH-Variable) sind. (Wenn Du die Meldung siehst:
|
2000-12-15 23:01:55 +03:00
|
|
|
|
NOTICE:heap_modifytuple: repl is \ 9, ist das das Problem.)
|
2000-09-14 06:21:31 +04:00
|
|
|
|
* <20>berpr<70>fe, da<64> der Pfad richtig gesetzt ist
|
|
|
|
|
* <20>berpr<70>fe, ob der User postgres der Eigent<6E>mer der entsprechenden
|
|
|
|
|
Dateien ist
|
|
|
|
|
|
|
|
|
|
3.2) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
|
|
|
|
|
|
|
|
|
|
Der einfachste Weg ist mittels der --prefix Option beim configure den
|
|
|
|
|
Pfad anzugeben. Falls Du das vergessen haben solltest, kannst Du die
|
|
|
|
|
Datei Makefile.global <20>ndern und POSTGRESDIR entsprechend anpassen,
|
|
|
|
|
oder Du erzeugst ein Makefile.custom und definierst POSTGRESDIR dort.
|
|
|
|
|
|
|
|
|
|
3.3) Wenn ich den postmaster starte, bekomme ich einen Bad System Call oder
|
|
|
|
|
eine core dumped Meldung. Warum?
|
|
|
|
|
|
|
|
|
|
Das kann verschiedene Ursachen haben. <20>berpr<70>fe zuerst, ob Dein Kernel
|
|
|
|
|
System V Extensions enth<74>lt. PostgreSQL ben<65>tigt die
|
|
|
|
|
Kernel-Unterst<73>tzung f<>r Shared Memory und Semaphoren.
|
|
|
|
|
|
|
|
|
|
3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich
|
|
|
|
|
IpcMemoryCreate Fehlermeldungen. Warum?
|
|
|
|
|
|
|
|
|
|
Du hast entweder den Kernel nicht f<>r Shared Memory konfiguriert, oder
|
|
|
|
|
Du mu<6D>t den Shared Memory Bereich vergr<67><72>ern. Die genaue Gr<47><72>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<65>tigst Du ein
|
|
|
|
|
Minimum von ca. 1 MB.
|
|
|
|
|
|
|
|
|
|
3.5) Wenn ich versuche, den postmaster zu starten, bekomme ich
|
|
|
|
|
IpcSemaphoreCreate Fehlermeldungen. Warum?
|
|
|
|
|
|
|
|
|
|
Falls die Fehlermeldung IpcSemaphoreCreate: semget failed (No space
|
|
|
|
|
left on device) lautet, dann ist Dein Kernel mit zu wenig Semaphoren
|
|
|
|
|
konfiguriert. Postgres ben<65>tigt eine Semaphore pro m<>glichen
|
|
|
|
|
Backend-Prozess. Eine Zwischenl<6E>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<64><6D>igen 32. Eine
|
|
|
|
|
dauerhafte L<>sung w<>re es, die Kernel-Parameter SEMMNS und SEMMNI zu
|
|
|
|
|
erh<72>hen.
|
|
|
|
|
|
|
|
|
|
Falls die Fehlermeldung anders aussieht, hast Du m<>glicherweise keine
|
|
|
|
|
Semaphoren-Unterst<73>tzung in Deinem Kernel aktiviert.
|
|
|
|
|
|
|
|
|
|
3.6) Wie verhindere ich, da<64> andere Hosts auf meine PostgreSQL Datenbanken
|
|
|
|
|
zugreifen?
|
|
|
|
|
|
|
|
|
|
Die Standardeinstellung ist, da<64> PostgreSQL Verbindungen von der
|
|
|
|
|
lokalen Maschine <20>ber Unix-Domain-Sockets erlaubt. Andere Maschinen
|
|
|
|
|
werden keine Verbindung aufbauen k<>nnen, bis der postmaster mit der -i
|
|
|
|
|
Option gestartet ist und die Host-basierte Authentizierung in der
|
|
|
|
|
Datei $PGDATA/pg_hba.conf entsprechend angepasst ist. Das erlaubt
|
|
|
|
|
TCP/IP-Verbindungen.
|
|
|
|
|
|
|
|
|
|
3.7) Warum kann ich mich nicht von einer anderen Maschine mit meiner
|
|
|
|
|
Datenbank verbinden?
|
|
|
|
|
|
|
|
|
|
Die Standardeinstellung erlaubt nur Unix-Domain-Socket-Verbindungen
|
|
|
|
|
der lokalen Maschine. Um TCP/IP Verbindungen zu erm<72>glichen, stelle
|
|
|
|
|
sicher, da<64> der postmaster mit der -i Option gestartet wurde, und f<>ge
|
|
|
|
|
einen passenden Host-Eintrag in die Datei pgsql/data/pg_hba.conf ein.
|
|
|
|
|
Siehe auch die pg_hba.conf Man-Page.
|
|
|
|
|
|
|
|
|
|
3.8) Warum kann ich nicht als root auf die Datenbank zugreifen?
|
|
|
|
|
|
|
|
|
|
Du solltest keine Datenbank-Benutzer mit der User-ID 0 (root)
|
|
|
|
|
erzeugen. Sie werden auf keine Datenbank zugreifen k<>nnen. Das ist
|
|
|
|
|
eine Sicherheitsma<6D>nahme, wegen der M<>glichkeit Objekt-Module
|
|
|
|
|
dynamisch in die Datenbank zu linken.
|
|
|
|
|
|
|
|
|
|
3.9) Alle meine Server st<73>rzen bei gleichzeitigem Tabellenzugriff ab.
|
|
|
|
|
Warum?
|
|
|
|
|
|
|
|
|
|
Dieses Problem kann durch einen Kernel verursacht werden, der ohne
|
|
|
|
|
Support f<>r Semaphoren konfiguriert wurde.
|
|
|
|
|
|
|
|
|
|
3.10) Wie optimiere ich die Datenbankmaschine f<>r bessere Leistung?
|
|
|
|
|
|
|
|
|
|
Sicherlich k<>nnen Indizes Abfragen beschleunigen. Der explain Befehl
|
|
|
|
|
erlaubt Dir zu sehen, wie PostgreSQL Deine Abfrage interpretiert und
|
|
|
|
|
welche Indizes benutzt werden.
|
|
|
|
|
|
|
|
|
|
Wenn Du eine Menge INSERTs machst, <20>berpr<70>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. <20>berpr<70>fe, ob die Statements nicht
|
|
|
|
|
in einen einzelnen Transaktions-Block zusammengefasst werden k<>nnen.
|
|
|
|
|
Das reduziert den Transaktions-Overhead. Du kannst auch erw<72>gen,
|
|
|
|
|
Indizes zu l<>schen und neu zu erstellen, wenn Du gro<72>e Datenmengen
|
|
|
|
|
<20>nderst.
|
|
|
|
|
|
|
|
|
|
Es gibt verschiedene Tuning-Ma<4D>nahmen, die man ergreifen kann. Du
|
|
|
|
|
kannst fsync() abschalten, indem Du beim Starten des postmasters die
|
|
|
|
|
Optionen -o -F 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<72>hen. Falls Du diesen Wert zu hoch einstellst,
|
|
|
|
|
kann es sein, da<64> der postmaster nicht startet, weil der Shared Memory
|
|
|
|
|
Speicherplatz Deines Kernels aufgebraucht wird. Jeder Puffer ist 8 kB
|
|
|
|
|
gro<72> und es gibt standardm<64><6D>ig 64 Puffer.
|
|
|
|
|
|
|
|
|
|
Du kannst ebenfalls die -S Option des Backends nutzen, um die Gr<47><72>e
|
|
|
|
|
des Speicherplatzes f<>r tempor<6F>res Sortieren zu erh<72>hen. Der -S Wert
|
|
|
|
|
wird in Kilobyte gemessen und ist standardm<64><6D>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<68>hren mu<6D>.
|
|
|
|
|
|
|
|
|
|
Der cluster Befehl kann benutzt werden, um Daten in Basistabellen zu
|
|
|
|
|
gruppieren, so da<64> 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<72>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()<29>s den Fortschritt des
|
|
|
|
|
Backends und halten das Programm an, wenn etwas Unerwartetes passiert.
|
|
|
|
|
|
|
|
|
|
Postmaster und postgres, haben mehrere Fehlersuch-Optionen zur
|
|
|
|
|
Verf<72>gung. Stelle zuerst sicher, da<64> Du den Standard-Output und
|
|
|
|
|
Fehlerkanal in eine Datei umleitest, wenn Du den postmaster startest,
|
|
|
|
|
:
|
|
|
|
|
|
|
|
|
|
cd /usr/local/pgsql
|
|
|
|
|
./bin/postmaster >server.log 2>&1 &
|
|
|
|
|
|
|
|
|
|
Das erzeugt eine server.log Datei im PostgreSQL-Verzeichnis. Diese
|
|
|
|
|
Datei enth<74>lt n<>tzliche Informationen <20>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<72>e
|
|
|
|
|
Logdateien!
|
|
|
|
|
|
|
|
|
|
Du kannst tats<74>chlich das Postgres-Backend auf der Kommandozeile
|
|
|
|
|
laufen lassen und SQL-Statements direkt eingeben. Diese Vorgehensweise
|
|
|
|
|
wird aber nur zur Fehlersuche empfohlen. Beachte, da<64> 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<6E>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<73>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<6D>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<72>hen, da<64> 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<72>he MAXBACKENDS in
|
|
|
|
|
include/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<67><72>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<72>hen. Folgendes Parameter
|
|
|
|
|
solltest Du pr<70>fen: die Maximalgr<67><72>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<67>ffneten Dateien NFILE und NINODE.
|
|
|
|
|
Der Grund f<>r die Begrenzung der erlaubten Backend-Prozesse liegt
|
|
|
|
|
darin, da<64> verhindert werden soll, da<64> das System seine freien
|
|
|
|
|
Ressourcen aufbraucht.
|
|
|
|
|
|
|
|
|
|
In den Postgres-Versionen vor 6.5 war die maximale Anzahl von Backends
|
|
|
|
|
auf 64 festgelegt und eine <20>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<6F>re Dateien, die durch den Query-Ausf<73>hrer erzeugt
|
|
|
|
|
werden. Wenn zum Beispiel eine Sortierung durchgef<65>hrt werden mu<6D>, um
|
|
|
|
|
ein ORDER BY auszuf<75>hren, und diese Sortierung mehr Platz ben<65>tigt,
|
|
|
|
|
als mit dem Backend-Parameter -S erlaubt wurde, dann werden diese
|
|
|
|
|
tempor<6F>ren Dateien erzeugt, um die Daten dort zu halten.
|
|
|
|
|
|
|
|
|
|
Die tempor<6F>ren Dateien sollten automatisch gel<65>scht werden, falls das
|
|
|
|
|
Backend jedoch w<>hrend einer Sortierung abst<73>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<6D>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<65>ren.
|
|
|
|
|
(int4[].)
|
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Fragen zum Betrieb
|
|
|
|
|
|
|
|
|
|
4.1) Das System scheint Kommata, Dezimalpunkte und Datumsformate
|
|
|
|
|
durcheinanderzubringen.
|
|
|
|
|
|
|
|
|
|
<20>berpr<70>fe die Konfiguration Deiner Locale-Einstellung. PostgreSQL
|
|
|
|
|
benutzt die Einstellungen des jeweiligen Users und nicht die des
|
|
|
|
|
postmaster Prozesses. Es gibt postgres und psql SET Befehle, um das
|
|
|
|
|
Datumsformat zu kontrollieren. Setzte diese entsprechend Deiner
|
|
|
|
|
Arbeitsumgebung.
|
|
|
|
|
|
|
|
|
|
4.2) Was ist der genauer Unterschied zwischen Binary Cursors und Normal
|
|
|
|
|
Cursors?
|
|
|
|
|
|
|
|
|
|
Vgl. die declare Man-Page f<>r eine Beschreibung.
|
|
|
|
|
|
|
|
|
|
4.3) Wie w<>hle ich per SELECT nur die ersten paar Zeilen in einem Query
|
|
|
|
|
aus?
|
|
|
|
|
|
|
|
|
|
Vgl. die fetch Man-Page, oder benutze SELECT ... LIMIT....
|
|
|
|
|
|
|
|
|
|
Das verhindert nur, da<64> alle Ergebniszeilen zum Client <20>bermittelt
|
|
|
|
|
werden. Die komplette Abfrage mu<6D> abgearbeitet werden, selbst wenn Du
|
|
|
|
|
nur die ersten paar Zeilen haben m<>chtest. Ziehe ein Query in
|
|
|
|
|
Erw<72>gung, das ein ORDER BY benutzt. Es gibt keine M<>glichkeit Zeilen
|
|
|
|
|
zur<75>ckzuliefern, bevor nicht die komplette Abfrage abgearbeitet ist.
|
|
|
|
|
|
|
|
|
|
4.4) Wie bekomme ich eine Liste der Tabellen oder anderen Dingen, die ich
|
|
|
|
|
in psql sehen kann
|
|
|
|
|
|
|
|
|
|
Du kannst Dir die Datei pgsql/src/bin/psql/psql.c mit dem Quellcode
|
|
|
|
|
f<>r psql ansehen. Sie enth<74>lt die SQL-Befehle, die die
|
|
|
|
|
Backslash-Kommandos (\) ausf<73>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<73>hrung der Befehle benutzt.
|
|
|
|
|
|
|
|
|
|
4.5) Wie entferne ich eine Spalte von einer Tabelle?
|
|
|
|
|
|
|
|
|
|
Wir unterst<73>tzen alter table drop column nicht, aber mache es so:
|
|
|
|
|
|
|
|
|
|
SELECT ... -- w<>hle alle Spalten au<61>er die, die Du entfernen willst
|
|
|
|
|
INTO TABLE new_table
|
|
|
|
|
FROM old_table;
|
|
|
|
|
DROP TABLE old_table;
|
|
|
|
|
ALTER TABLE new_table RENAME TO old_table;
|
|
|
|
|
|
|
|
|
|
4.6) Was ist die Maximalgr<67><72>e f<>r eine Zeile, eine Tabelle, eine Datenbank?
|
|
|
|
|
|
|
|
|
|
Zeilen sind auf 8 kB begrenzt, aber das kann ge<67>ndert werden, indem Du
|
|
|
|
|
in include/config.h die Konstante BLCKSZ <20>nderst. Um Attribute mit
|
|
|
|
|
mehr als 8 kB zu nutzen, kannst Du auch das "Large Object Interface"
|
|
|
|
|
benutzen.
|
|
|
|
|
|
|
|
|
|
Zeilen <20>berschreiten keine 8 kB-Grenzen. Eine Zeile mit 5 kB wird 8 kB
|
|
|
|
|
Speicherplatz ben<65>tigen.
|
|
|
|
|
|
|
|
|
|
Tabellen- und Datenbankgr<67><72>en haben keine Grenzen. Es gibt viele
|
|
|
|
|
Datenbanken mit zig Gigabytes und wahrscheinlich einige mit hunderten
|
|
|
|
|
Gigabyte.
|
|
|
|
|
|
|
|
|
|
4.7) Wieviel Plattenplatz ben<65>tigt eine Datenbank zur Speicherung einer
|
|
|
|
|
Datendatei mit zeilenweisen Datens<6E>tzen?
|
|
|
|
|
|
|
|
|
|
Eine Postgres Datenbank kann ungef<65>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<65>tigt 2,4 MB Speicherplatz. Die
|
|
|
|
|
Gr<47><72>e der Postgres Datenbankdatei, die diese Daten enth<74>lt, liegt
|
|
|
|
|
ungef<65>hr bei 14 MB.
|
|
|
|
|
36 Bytes: jeder Zeilenkopf (ungef<65>hr)
|
|
|
|
|
+ 8 Bytes: zwei Integer-Felder @ jedes 4 Bytes
|
|
|
|
|
+ 4 Bytes: Zeiger auf den Datensatz
|
|
|
|
|
-----------------------------------------------
|
|
|
|
|
48 Bytes pro Zeile
|
|
|
|
|
|
|
|
|
|
Die Gr<47><72>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)
|
|
|
|
|
|
|
|
|
|
Indizes haben nicht einen solchen Overhead, sie beinhalten jedoch die
|
|
|
|
|
Daten, die sie indizieren und k<>nnen so auch sehr gro<72> werden.
|
|
|
|
|
|
|
|
|
|
4.8) Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank
|
|
|
|
|
definiert sind?
|
|
|
|
|
|
|
|
|
|
psql hat eine Vielzahl von Backslash Befehlen, um solche Informationen
|
|
|
|
|
zu zeigen. Benutze \?, um sie zu sehen.
|
|
|
|
|
|
|
|
|
|
Schaue Dir auch die Datei pgsql/src/tutorial/syscat.source. an. Sie
|
|
|
|
|
illustriert viele der SELECTs, die ben<65>tigt werden, um diese
|
|
|
|
|
Informationen von der Datenbank-Systemtabelle zu erhalten
|
|
|
|
|
|
|
|
|
|
4.9) Meine Queries sind langsam oder nutzen die Indizes nicht. Warum?
|
|
|
|
|
|
|
|
|
|
PostgeSQL pflegt automatische Statistiken nicht. Um die Statistiken zu
|
|
|
|
|
aktualisieren, mu<6D>t Du ein explizites vacuum eingeben. Nach dieser
|
|
|
|
|
Aktualisierung wei<65> 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<63>tzen und dann die passende Join-Reihenfolge w<>hlen kann. Das
|
|
|
|
|
Backend verfolgt die Spaltenstatistik nicht selbst, so da<64> vacuum
|
|
|
|
|
analyze regelm<6C><6D>ig aufgerufen werden sollte.
|
|
|
|
|
|
|
|
|
|
Indizes werden nicht f<>r ORDER BY Operationen benutzt.
|
|
|
|
|
|
|
|
|
|
Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, k<>nnen
|
|
|
|
|
Indizes nur benutzt werden, wenn die Suche mit dem Anfang eines
|
|
|
|
|
Strings startet. Um also Indizes zu nutzen, sollten LIKE-Suchen nicht
|
|
|
|
|
mit %, und ~ beginnen (Die Sucheparameter regul<75>rer Ausdr<64>cke sollten
|
|
|
|
|
mit ^. beginnen.
|
|
|
|
|
|
|
|
|
|
4.10) Auf welche Weise kann ich sehen, wie der Query-Optimierer meine
|
|
|
|
|
Abfrage auswertet?
|
|
|
|
|
|
|
|
|
|
Vgl. die EXPLAIN Man-Page.
|
|
|
|
|
|
|
|
|
|
4.11) Was ist ein R-Tree Index?
|
|
|
|
|
|
|
|
|
|
Ein R-Tree Index wird benutzt, um r<>umliche Daten zu indizieren. Ein
|
|
|
|
|
Hash-Index kann nicht f<>r Bereichssuchen genutzt werden. Ein B-Tree
|
|
|
|
|
Index kann nur f<>r Bereichssuchen in eindimensionalen Daten genutzt
|
|
|
|
|
werden. R-Trees k<>nnen multi-dimensionale Daten abhandeln. Ein
|
|
|
|
|
Beispiel: Wenn ein R-Tree Index auf ein Attribut vom Typ POINT
|
|
|
|
|
gebildet wird, dann kann das System Abfragen wie z.B. "Zeige alle
|
|
|
|
|
Punkte, die sich in einem umgebenden Rechteck befinden" effizienter
|
|
|
|
|
beantworten.
|
|
|
|
|
|
|
|
|
|
Die kanonische Ver<65>ffentlichung , die das originale R-Tree Design
|
|
|
|
|
beschreibt ist:
|
|
|
|
|
|
|
|
|
|
Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial
|
|
|
|
|
Searching." Proc of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data,
|
|
|
|
|
45-57.
|
|
|
|
|
|
|
|
|
|
Du kannst dieses Werk ebenfalls in Stonebraker's "Readings in Database
|
|
|
|
|
Systems" finden.
|
|
|
|
|
|
|
|
|
|
Die eingebauten R-Trees k<>nnen Polygone und Rechtecke verarbeiten.
|
|
|
|
|
Theoretisch k<>nnen R-Trees auf eine hohe Anzahl von Dimensionen
|
|
|
|
|
erweitert werden. Praktisch bedingt diese Erweiterung eine Menge
|
|
|
|
|
Arbeit und wir haben derzeit keinerlei Dokumentation dar<61>ber, wie das
|
|
|
|
|
zu machen w<>re.
|
|
|
|
|
|
|
|
|
|
4.12) Was ist "Genetic Query Optimization"?
|
|
|
|
|
|
|
|
|
|
Das GEQO-Modul in PostgreSQL soll dazu dienen, das Optimierungsproblem
|
|
|
|
|
beim Joining vieler Tabellen auf der Basis genetischer Algorithmen
|
|
|
|
|
(GA) zu l<>sen. Es erlaubt die Behandlung von gro<72>en Join-Queries ohne
|
|
|
|
|
ersch<63>pfende Suche.
|
|
|
|
|
|
|
|
|
|
F<>r weitere Informationen siehe die Dokumentation.
|
|
|
|
|
|
|
|
|
|
4.13) Wie verfahre ich bei der Suche mit regul<75>ren Ausdr<64>cken und bei einer
|
|
|
|
|
Suche mit Ignorierung der Gro<72>- und Kleinschreibweisen?
|
|
|
|
|
|
|
|
|
|
~ und ~* sind wahrscheinlich das, was Du willst. Vgl. psql's \do
|
|
|
|
|
Befehl.
|
|
|
|
|
|
|
|
|
|
4.14) Wie ermittle ich in einem Query, da<64> ein Feld NULL ist?
|
|
|
|
|
|
|
|
|
|
Du testest die Spalte mit IS NULL und IS NOT NULL.
|
|
|
|
|
|
|
|
|
|
4.15) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
|
|
|
|
|
|
|
|
|
|
Typ interner Name Bemerkungen
|
|
|
|
|
--------------------------------------------------
|
|
|
|
|
CHAR char 1 Zeichen
|
|
|
|
|
CHAR(#) bpchar mit Leerzeichen gef<65>llt bis zur angegebenen L<>n
|
|
|
|
|
ge
|
|
|
|
|
VARCHAR(#) varchar Die Gr<47><72>e legt die Maximall<6C>nge fest, kein Ausf
|
|
|
|
|
<EFBFBD>llen mit Leerzeichen
|
|
|
|
|
TEXT text Die L<>nge wird nur durch die maximale Zeilenl<6E>n
|
|
|
|
|
ge beschr<68>nkt
|
|
|
|
|
BYTEA bytea Bytearray mit variabler L<>nge
|
|
|
|
|
|
|
|
|
|
Du mu<6D>t die internen Namen benutzen, wenn Du interne Operationen
|
|
|
|
|
durchf<68>hren willst.
|
|
|
|
|
|
|
|
|
|
Die letzten vier Typen sind "varlena"-Typen (d.h. die ersten vier
|
|
|
|
|
Bytes geben die L<>nge an, gefolgt von den Daten). CHAR(#) belegt die
|
|
|
|
|
maximale Anzahl von Bytes, unabh<62>ngig davon, wieviele Daten im Feld
|
|
|
|
|
gespeichert werden. TEXT, VARCHAR(#) und BYTEA haben alle eine
|
|
|
|
|
variable L<>nge auf dem Datentr<74>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<72>hung des
|
|
|
|
|
Inhalts?
|
|
|
|
|
|
|
|
|
|
PostgreSQL unterst<73>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 <20>ber Sequenzen. Du kannst aber auch
|
|
|
|
|
das Oid Feld jeder Zeile als eindeutigen Wert nutzen. Jedoch mu<6D>t Du,
|
|
|
|
|
falls Du Deine Datenbank einmal komplett ausgeben und wieder einlesen
|
|
|
|
|
willst, die pg_dump's -o oder die copy with oids Option benutzen, um
|
|
|
|
|
die Oids zu retten.
|
|
|
|
|
|
|
|
|
|
4.17) Was ist ein Oid? Was ist ein Tid?
|
|
|
|
|
|
|
|
|
|
Oids sind PostgreSQLs Antwort auf eindeutige Zeilen-IDs. Jede Zeile,
|
|
|
|
|
die in PostgreSQL erzeugt wird, bekommt eine eindeutige Oid. Alle
|
|
|
|
|
Oids, die w<>hrend initdb erzeugt werden, sind kleiner als 16384 (nach
|
|
|
|
|
backend/access/transam.h). Alle Oids, die durch den Benutzer erzeugt
|
|
|
|
|
werden, sind gleich oder gr<67><72>er als dieser Wert. Standardm<64><6D>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 <20>ndern, oder eine Kopie der Tabelle mit den
|
|
|
|
|
originalen Oids anlegen k<>nntest.
|
|
|
|
|
CREATE TABLE new_table(old_oid oid, mycol int);
|
|
|
|
|
SELECT INTO new SELECT old_oid, mycol FROM old;
|
|
|
|
|
COPY new TO '/tmp/pgtable';
|
|
|
|
|
DELETE FROM new;
|
|
|
|
|
COPY new WITH OIDS FROM '/tmp/pgtable';
|
|
|
|
|
|
|
|
|
|
Tids werden genutzt, um spezifische physische Zeilen mit Block und
|
|
|
|
|
Versatzwert zu identifizieren. Tids <20>ndern sich, wenn Zeilen ge<67>ndert
|
|
|
|
|
oder neu geladen werden. Sie werden von Index-Eintr<74>gen genutzt, um
|
|
|
|
|
die Zeilen physisch zu adressieren.
|
|
|
|
|
|
|
|
|
|
4.18) Was ist die Bedeutung der verschiedenen Ausdr<64>cke, die in PostgreSQL
|
|
|
|
|
benutzt werden (z.B. attribute, class,...)?
|
|
|
|
|
|
|
|
|
|
Einige der Quelltexte und die <20>ltere Dokumentation nutzen allgemeine
|
|
|
|
|
Begriffe. Hier sind einige aufgef<65>hrt:
|
|
|
|
|
* row, record, tuple
|
|
|
|
|
* attribute, field, column
|
|
|
|
|
* table, class
|
|
|
|
|
* retrieve, SELECT
|
|
|
|
|
* replace, UPDATE
|
|
|
|
|
* append, INSERT
|
|
|
|
|
* oid, serial value
|
|
|
|
|
* portal, cursor
|
|
|
|
|
* range variable, table name, table alias
|
|
|
|
|
|
|
|
|
|
4.19) Wieso bekomme ich einen Fehler: "FATAL: palloc failure: memory
|
|
|
|
|
exhausted?"
|
|
|
|
|
|
|
|
|
|
M<>glicherweise ist der virtuelle Speicher verbraucht oder Dein Kernel
|
|
|
|
|
hat eine niedrige Grenze f<>r bestimmte Ressourcen. Versuche dieses,
|
|
|
|
|
bevor Du den postmaster startest:
|
|
|
|
|
|
|
|
|
|
ulimit -d 65536
|
|
|
|
|
limit datasize 64m
|
|
|
|
|
|
|
|
|
|
Je nach Deiner eingesetzten Shell mag nur einer dieser Befehle
|
|
|
|
|
funktionieren. Aber es wird die Grenze des Datensegments f<>r Prozesse
|
|
|
|
|
erh<72>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<75>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<64> lo_open in
|
|
|
|
|
eine Transaktion eingebunden werden mu<6D>, 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<69>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<64>
|
|
|
|
|
Du auto-commit off setzen mu<6D>t.
|
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
PostgreSQL erweitern
|
|
|
|
|
|
|
|
|
|
5.1) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich sie in
|
|
|
|
|
psql aufrufe, kommt ein core dump. Warum?
|
|
|
|
|
|
|
|
|
|
Dieses Problem kann viele Ursachen haben. Teste deine Funktion zuerst
|
|
|
|
|
in einem Extra-Testprogramm. Stelle au<61>erdem sicher, da<64> Deine
|
|
|
|
|
Funktion nicht etwa elog-Nachrichten sendet, wenn der Client Daten
|
|
|
|
|
erwartet, wie in den type_in() oder type_out() Funktionen
|
|
|
|
|
|
|
|
|
|
5.2) Was bedeutet die Meldung: NOTICE:PortalHeapMemoryFree: 0x402251d0 not
|
|
|
|
|
in alloc set!?
|
|
|
|
|
|
|
|
|
|
Du pfreest etwas, das Du nicht palloct hast! Stelle sicher, da<64> Du
|
|
|
|
|
nicht malloc/free und palloc/pfree durcheinanderw<72>rfelst.
|
|
|
|
|
|
|
|
|
|
5.3) Wie kann ich ein paar elegante neue Feldtypen und Funktionen zu
|
|
|
|
|
PostgreSQL beitragen?
|
|
|
|
|
|
|
|
|
|
Sende Deine Erweiterungen zur pgsql-hackers Mailing Liste, und sie
|
|
|
|
|
werden eventuell im contrib/ Verzeichnis enden.
|
|
|
|
|
|
|
|
|
|
5.4) Wie schreibe ich eine Funktion in C, die einen Tuple zur<75>ckliefert?
|
|
|
|
|
|
|
|
|
|
Das erfordert derart extreme Genialit<69>t, da<64> die Autoren es niemals
|
|
|
|
|
versucht haben, obwohl es im Prinzip zu machen w<>re.
|
|
|
|
|
|
|
|
|
|
5.5) Ich habe eine der Quellendateien ge<67>ndert. Warum macht sich die
|
|
|
|
|
<20>nderung beim erneuten Compilerlauf nicht bemerkbar?
|
|
|
|
|
|
|
|
|
|
Die Makefiles finden nicht die richtigen Abh<62>ngigkeiten. Du mu<6D>t ein
|
|
|
|
|
make clean und dann ein weiteres make machen.
|