|
|
|
|
|
|
|
|
|
H<EFBFBD>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 <EFBFBD>bersetzung von Karsten Schulz (schulz@linux-systemhaus.de)
|
|
|
|
|
|
|
|
|
|
Letzte Aktualisierung der deutschen <EFBFBD>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
|
|
|
|
|
<EFBFBD>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<EFBFBD>uft PostgreSQL?
|
|
|
|
|
1.4) Welche Nicht-Unix-Versionen sind verf<EFBFBD>gbar?
|
|
|
|
|
1.5) Woher bekomme ich PostgreSQL?
|
|
|
|
|
1.6) Wo bekomme ich Support f<EFBFBD>r PostgreSQL?
|
|
|
|
|
1.7) Was ist die neueste Version von PostgreSQL?
|
|
|
|
|
1.8) Welche Dokumente sind f<EFBFBD>r PostgreSQL verf<EFBFBD>gbar?
|
|
|
|
|
1.9) Wie erfahre ich etwas <EFBFBD>ber bekannte Fehler oder fehlende
|
|
|
|
|
Eigenschaften von PostgreSQL?
|
|
|
|
|
1.10) Wie kann ich SQL lernen?
|
|
|
|
|
1.11) Ist PostgreSQL Y2K (Jahr 2000) f<EFBFBD>hig?
|
|
|
|
|
1.12) Wie kann ich am Entwicklerteam teilnehmen?
|
|
|
|
|
1.13) Wie sende ich einen Fehler-Bericht?
|
|
|
|
|
1.14) Wie l<EFBFBD>uft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
|
|
|
|
|
|
|
|
|
|
Fragen zu Benutzerprogrammen
|
|
|
|
|
|
|
|
|
|
2.1) Gibt es ODBC-Treiber f<EFBFBD>r PostgreSQL?
|
|
|
|
|
2.2) Welche Werkzeuge gibt es, um PostgreSQL-Datenbanken <EFBFBD>ber
|
|
|
|
|
Webseiten verf<EFBFBD>gbar zu machen?
|
|
|
|
|
2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle? Einen
|
|
|
|
|
Report-Generator? Eine eingebaute Query-Schnittstelle?
|
|
|
|
|
2.4) Welche Sprachen sind f<EFBFBD>r die Kommunikation mit PostgreSQL
|
|
|
|
|
verf<EFBFBD>gbar?
|
|
|
|
|
|
|
|
|
|
Administrative Fragen
|
|
|
|
|
|
|
|
|
|
3.1) Warum schl<EFBFBD>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<EFBFBD> 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<EFBFBD>rzen bei gleichzeitigem Tabellenzugriff ab.
|
|
|
|
|
Warum?
|
|
|
|
|
3.10) Wie optimiere ich die Datenbankmaschine f<EFBFBD>r bessere Leistung?
|
|
|
|
|
3.11) Welche Debugging/Fehlersuch-Hilfsmittel sind f<EFBFBD>r PostgreSQL
|
|
|
|
|
verf<EFBFBD>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<EFBFBD>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<EFBFBD><EFBFBD>e f<EFBFBD>r eine Zeile, eine Tabelle, eine
|
|
|
|
|
Datenbank?
|
|
|
|
|
4.7) Wieviel Plattenplatz ben<EFBFBD>tigt eine Datenbank zur Speicherung
|
|
|
|
|
einer Datendatei mit zeilenweisen Datens<EFBFBD>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<EFBFBD>ren Ausdr<EFBFBD>cken und bei
|
|
|
|
|
einer Suche mit Ignorierung der Gro<EFBFBD>- und Kleinschreibweisen?
|
|
|
|
|
4.14) Wie ermittle ich in einem Query, da<EFBFBD> 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<EFBFBD>hung
|
|
|
|
|
des Inhalts?
|
|
|
|
|
4.17) Was ist ein Oid? Was ist ein Tid?
|
|
|
|
|
4.18) Was ist die Bedeutung der verschiedenen Ausdr<EFBFBD>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<EFBFBD>ckliefert?
|
|
|
|
|
5.5) Ich habe eine der Quellendateien ge<EFBFBD>ndert. Warum macht sich die
|
|
|
|
|
<EFBFBD>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<EFBFBD>hrend PostgreSQL das leistungsf<EFBFBD>hige
|
|
|
|
|
Datenmodell und die reichhaltigen Datentypen von POSTGRES beibeh<EFBFBD>lt,
|
|
|
|
|
ersetzt es die PostQuel-Abfragesprache durch eine ausgedehnte
|
|
|
|
|
Teilmenge von SQL. PostgreSQL ist frei und der komplette Quellcode ist
|
|
|
|
|
verf<EFBFBD>gbar.
|
|
|
|
|
|
|
|
|
|
Die PostgreSQL-Entwicklung wird von einem Team von Internet-Entwickler
|
|
|
|
|
durchgef<EFBFBD>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<EFBFBD>r alle aktuellen und zuk<EFBFBD>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<EFBFBD>ngliche Postgres-Code,
|
|
|
|
|
von dem PostgreSQL abstammt, ist auf die Bem<EFBFBD>hungen von vielen
|
|
|
|
|
Studierenden und Diplomanden, sowie Programmierern, die unter der
|
|
|
|
|
Weisung des Professors Michael Stonebraker an der Universit<EFBFBD>t von
|
|
|
|
|
Kalifornien, Berkeley arbeiteteten, zur<EFBFBD>ckzuf<EFBFBD>hren.
|
|
|
|
|
|
|
|
|
|
Der urspr<EFBFBD>ngliche Name der Software bei Berkeley war Postgres. Als die
|
|
|
|
|
SQL-Funktionalit<EFBFBD>t 1995 hinzugef<EFBFBD>gt wurde, wurde sein Name zu
|
|
|
|
|
Postgres95 ge<EFBFBD>ndert. Der Name wurde Ende 1996 zu PostgreSQL ge<EFBFBD>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
|
|
|
|
|
<EFBFBD>bersetzung. Die <EFBFBD>bersetzung besitzt keinerlei rechtlichen Status.
|
|
|
|
|
Insbesondere kann sich niemand auf diese <EFBFBD>bersetzung berufen:
|
|
|
|
|
|
|
|
|
|
PostgreSQL Datenbank Management System
|
|
|
|
|
|
|
|
|
|
Copyright (c) 1994-6 Regents of the University of California
|
|
|
|
|
|
|
|
|
|
Die Erlaubnis, diese Software und seine Unterlagen f<EFBFBD>r jeden m<EFBFBD>glichen
|
|
|
|
|
Zweck, ohne Geb<EFBFBD>hr und ohne eine schriftliche Vereinbarung zu
|
|
|
|
|
benutzen, zu kopieren, zu <EFBFBD>ndern und zu verteilen wird hiermit
|
|
|
|
|
bewilligt, vorausgesetzt da<EFBFBD> der oben genannte Urheberrechtsvermerk
|
|
|
|
|
und dieser Paragraph und die folgenden zwei Paragraphen in allen
|
|
|
|
|
Kopien erscheinen.
|
|
|
|
|
|
|
|
|
|
IN KEINEM FALL IST DIE UNIVERSIT<EFBFBD>T VON KALIFORNIEN GEGEN<EFBFBD>BER JEDEM
|
|
|
|
|
M<EFBFBD>GLICHEN BETEILIGTEN F<EFBFBD>R DIE DIREKTEN, INDIREKTEN, SPEZIELLEN,
|
|
|
|
|
BEIL<EFBFBD>UFIGEN ODER FOLGESCH<EFBFBD>DEN, EINSCHLIE<EFBFBD>LICH DER VERLORENEN PROFITE
|
|
|
|
|
VERANTWORTLICH, DIE AUS DEM GEBRAUCH VON DIESER SOFTWARE UND SEINEN
|
|
|
|
|
UNTERLAGEN HERAUS ENTSTEHEN, SELBST WENN DIE UNIVERSIT<EFBFBD>T VON
|
|
|
|
|
KALIFORNIEN VON DER M<EFBFBD>GLICHKEIT SOLCHEN SCHADENS BENACHRICHTIGT WORDEN
|
|
|
|
|
IST.
|
|
|
|
|
|
|
|
|
|
DIE UNIVERSIT<EFBFBD>T VON KALIFORNIEN LEHNT SPEZIELL ALLE M<EFBFBD>GLICHE GARANTIEN
|
|
|
|
|
AB, EINSCHLIESSLICH, ABER NICHT BEGRENZT AUF, DIE IMPLIZIERTEN
|
|
|
|
|
GARANTIEN VON GESCH<EFBFBD>FTSNUTZEN UND EIGNUNG ZU EINEM BESTIMMTEN ZWECK.
|
|
|
|
|
DIE SOFTWARE, DIE NACHSTEHEND BEREITGESTELLT WIRD, BASIERT AUF EINER
|
|
|
|
|
"SO WIE SIE IST"-GRUNDLAGE, UND DIE UNIVERSIT<EFBFBD>T VON KALIFORNIEN HAT
|
|
|
|
|
KEINE VERPFLICHTUNGEN, WARTUNG, SUPPORT, AKTUALISIERUNGSVORG<EFBFBD>NGE,
|
|
|
|
|
VERBESSERUNGEN ODER <EFBFBD>NDERUNGEN ZUR VERF<EFBFBD>GUNG ZU STELLEN.
|
|
|
|
|
|
|
|
|
|
1.3) Auf welchen Unix-Plattformen l<EFBFBD>uft PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Die Autoren haben PostgreSQL auf folgenden Plattformen kompiliert und
|
|
|
|
|
getestet (einige dieser Kompilierungen ben<EFBFBD>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<EFBFBD>gbar?
|
|
|
|
|
|
|
|
|
|
Es ist m<EFBFBD>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<EFBFBD>uft der Client auf MS-Windows und
|
|
|
|
|
steht <EFBFBD>ber TCP/IP mit einem Server in Verbindung, der auf einer
|
|
|
|
|
unserer unterst<EFBFBD>tzten Unixplattformen l<EFBFBD>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<EFBFBD>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<EFBFBD>r PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Es gibt keinen offiziellen Support f<EFBFBD>r PostgreSQL von der Universit<EFBFBD>t
|
|
|
|
|
von Kalifornien, Berkeley. Der Support wird durch freiwilligen Einsatz
|
|
|
|
|
geleistet.
|
|
|
|
|
|
|
|
|
|
Die Mailing-Liste ist: pgsql-general@postgreSQL.org. Die Liste ist f<EFBFBD>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<EFBFBD>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<EFBFBD>nnen auf der
|
|
|
|
|
PostgreSQL-Homepage im WWW gefunden werden:
|
|
|
|
|
|
|
|
|
|
http://postgreSQL.org
|
|
|
|
|
|
|
|
|
|
Es gibt au<EFBFBD>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<EFBFBD>r PostgreSQL ist bei http://www.pgsql.com/
|
|
|
|
|
verf<EFBFBD>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<EFBFBD>r PostgreSQL verf<EFBFBD>gbar?
|
|
|
|
|
|
|
|
|
|
Einige Handb<EFBFBD>cher, Man-Pages und einige kleine Testprogramme sind in
|
|
|
|
|
der Distribution enthalten. Siehe im /doc-Verzeichnis.
|
|
|
|
|
|
|
|
|
|
psql hat einige nette \d-Befehle, um Informationen <EFBFBD>ber Typen,
|
|
|
|
|
Operatoren, Funktionen, Aggregate, usw. zu zeigen.
|
|
|
|
|
|
|
|
|
|
Die Website enth<EFBFBD>lt sogar noch mehr Unterlagen.
|
|
|
|
|
|
|
|
|
|
1.9) Wie erfahre ich etwas <EFBFBD>ber bekannte Fehler oder fehlende Eigenschaften
|
|
|
|
|
von PostgreSQL?
|
|
|
|
|
|
|
|
|
|
PostgreSQL unterst<EFBFBD>tzt eine ausgedehnte Untermenge von SQL-92. Siehe
|
|
|
|
|
unser TODO f<EFBFBD>r eine Auflistung der bekannten Fehler, fehlende
|
|
|
|
|
Eigenschaften und zuk<EFBFBD>nftige Pl<EFBFBD>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<EFBFBD>gen The Practical SQL Handbook, Bowman et al.,
|
|
|
|
|
Addison Wesley.
|
|
|
|
|
|
|
|
|
|
1.11) Ist PostgreSQL Y2K (Jahr 2000) f<EFBFBD>hig?
|
|
|
|
|
|
|
|
|
|
Ja, wir k<EFBFBD>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<EFBFBD>nderungen an die pgsql-patches Mailingliste.
|
|
|
|
|
|
|
|
|
|
Es gibt ungef<EFBFBD>hr ein Dutzend Leute, die das commit-Recht im
|
|
|
|
|
PostgreSQL-CVS Archiv haben. Alle haben so viele hochwertige Patches
|
|
|
|
|
eingebracht, da<EFBFBD> es schwer f<EFBFBD>r die CVS-Verwalter war, mitzuhalten. Und
|
|
|
|
|
wir hatten das Vertrauen, da<EFBFBD> die <EFBFBD>nderungen, die sie festlegten, sehr
|
|
|
|
|
wahrscheinlich von hoher Qualit<EFBFBD>t sind.
|
|
|
|
|
|
|
|
|
|
1.13) Wie sende ich einen Fehler-Bericht?
|
|
|
|
|
|
|
|
|
|
F<EFBFBD>lle die "Fehler-Vorlage"-Datei (bug.template im doc-Verzeichnis) aus
|
|
|
|
|
und sende sie an: bugs@postgreSQL.org
|
|
|
|
|
|
|
|
|
|
<EFBFBD>berpr<EFBFBD>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<EFBFBD>uft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
|
|
|
|
|
|
|
|
|
|
Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,
|
|
|
|
|
Leistung, Zuverl<EFBFBD>ssigkeit, Support und Preis.
|
|
|
|
|
|
|
|
|
|
Eigenschaften
|
|
|
|
|
PostgreSQL hat die meisten Eigenschaften, die in gro<EFBFBD>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<EFBFBD>t von externen
|
|
|
|
|
Schl<EFBFBD>sseln oder Outer Joins, aber wir arbeiten an diesen Dingen
|
|
|
|
|
f<EFBFBD>r unser n<EFBFBD>chstes Release.
|
|
|
|
|
|
|
|
|
|
Leistung
|
|
|
|
|
PostgreSQL l<EFBFBD>uft in zwei Modi. Im normalen fsync-Modus wird
|
|
|
|
|
jede komplette Transaktion auf die Platte geschrieben und
|
|
|
|
|
garantiert, da<EFBFBD>, selbst wenn das Betriebssystem abst<EFBFBD>rzt und
|
|
|
|
|
der Strom ausf<EFBFBD>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<EFBFBD>gung zu
|
|
|
|
|
stellen, der unter weniger Leistungseinbu<EFBFBD>e leidet als der
|
|
|
|
|
fsync-Modus und die Datenintegrit<EFBFBD>t innerhalb 30 Sekunden im
|
|
|
|
|
Falle eines Betriebssystemabsturzes erlaubt. Der Modus ist
|
|
|
|
|
durch den Datenbankverwalter ausw<EFBFBD>hlbar.
|
|
|
|
|
|
|
|
|
|
Im Vergleich zu MySQL oder schlankeren Datenbanksystemen sind
|
|
|
|
|
wir hinsichtlich INSERTs/UPDATEs langsamer, weil wir einen
|
|
|
|
|
Transaktions-Overhead haben. Selbstverst<EFBFBD>ndlich hat MySQL kaum
|
|
|
|
|
eine der Eigenschaften, die oben im Kapitel Eigenschaften
|
|
|
|
|
erw<EFBFBD>hnt werden. PostgreSQL ist f<EFBFBD>r Flexibilit<EFBFBD>t und gute
|
|
|
|
|
Eigenschaften designed, trotzdem fahren wir fort, die Leistung
|
|
|
|
|
durch Profiling und Quellcodeanalyse zu verbessern.
|
|
|
|
|
|
|
|
|
|
Zuverl<EFBFBD>ssigkeit
|
|
|
|
|
Wir stellen fest, da<EFBFBD> ein DBMS zuverl<EFBFBD>ssig sein mu<EFBFBD>, oder es
|
|
|
|
|
ist wertlos. Wir bem<EFBFBD>hen uns, gut gepr<EFBFBD>ften, best<EFBFBD>ndigen Code
|
|
|
|
|
freizugeben, der nur ein Minimum an Programmfehler hat. Jede
|
|
|
|
|
Freigabe hat mindestens einen Monat Betatestphase hinter sich,
|
|
|
|
|
und unsere Freigabehistorie zeigt, da<EFBFBD> wir stabile, solide
|
|
|
|
|
Versionen freigeben, die im Produktionsbetrieb genutzt werden
|
|
|
|
|
k<EFBFBD>nnen. Wir glauben, da<EFBFBD> wir im Vergleich mit anderer
|
|
|
|
|
Datenbanksoftware vorteilhaft dastehen.
|
|
|
|
|
|
|
|
|
|
Support
|
|
|
|
|
Unsere Mailingliste stellt eine gro<EFBFBD>e Gruppe Entwickler und
|
|
|
|
|
Benutzer zur Behebung aller m<EFBFBD>glichen anzutreffenden Probleme
|
|
|
|
|
zur Verf<EFBFBD>gung. Wir k<EFBFBD>nnen nicht immer eine Fehlerbehebung
|
|
|
|
|
garantieren, kommerzielle DBMS's tun dies aber auch nicht.
|
|
|
|
|
Direkter Zugriff zu den Entwicklern, zur Benutzergemeinschaft,
|
|
|
|
|
zu den Handb<EFBFBD>chern und zum Quellcode bietet h<EFBFBD>ufig
|
|
|
|
|
h<EFBFBD>herwertigen PostgreSQL-Support im Vergleich zu anderen
|
|
|
|
|
DBMS's. Es gibt den kommerziellen "Pro-Ereignis"-Support, der
|
|
|
|
|
f<EFBFBD>r diejenigen bereitgestellt wird, die ihn ben<EFBFBD>tigen. (siehe
|
|
|
|
|
Support-Faq),
|
|
|
|
|
|
|
|
|
|
Preis
|
|
|
|
|
PostgrSQL ist frei verf<EFBFBD>gbar, sowohl f<EFBFBD>r die kommerzielle, wie
|
|
|
|
|
f<EFBFBD>r die nicht-kommerzielle Nutzung. Du kannst Deinen Code fast
|
|
|
|
|
ohne Beschr<EFBFBD>nkungen zu unserem hinzuf<EFBFBD>gen. Die einzigen
|
|
|
|
|
Beschr<EFBFBD>nkungen werden in der BSD-artigen Lizenz weiter oben
|
|
|
|
|
aufgef<EFBFBD>hrt.
|
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Fragen zu Benutzerprogrammen
|
|
|
|
|
|
|
|
|
|
2.1) Gibt es ODBC-Treiber f<EFBFBD>r PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Es sind zwei ODBC-Treiber verf<EFBFBD>gbar: PostODBC und OpenLink ODBC.
|
|
|
|
|
|
|
|
|
|
PostODBC ist in der Distribution enthalten. Mehr Informationen k<EFBFBD>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<EFBFBD>
|
|
|
|
|
PostgreSQL-ODBC auf jeder Client-Plattform zur Verf<EFBFBD>gung steht, die
|
|
|
|
|
unterst<EFBFBD>tzt wird (Win, Mac, Unix, VMS).
|
|
|
|
|
|
|
|
|
|
Sie werden dieses Produkt wahrscheinlich an Leute verkaufen, die
|
|
|
|
|
kommerziellen Qualit<EFBFBD>ts-Support brauchen, aber es wird immer eine
|
|
|
|
|
Freeware-Version verf<EFBFBD>gbar sein. Fragen dazu bitte an
|
|
|
|
|
postgres95@openlink.co.uk.
|
|
|
|
|
|
|
|
|
|
2.2) Welche Werkzeuge gibt es, um PostgreSQL-Datenbanken <EFBFBD>ber Webseiten
|
|
|
|
|
verf<EFBFBD>gbar zu machen?
|
|
|
|
|
|
|
|
|
|
Eine nette Einf<EFBFBD>hrung zu Datenbank-gest<EFBFBD>tzten Webseiten kann unter
|
|
|
|
|
http://www.webtools.com abgerufen werden.
|
|
|
|
|
|
|
|
|
|
Eine weitere gibt es bei http://www.phone.net/home/mwm/hotlist/.
|
|
|
|
|
|
|
|
|
|
F<EFBFBD>r die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP
|
|
|
|
|
gibt es bei http://www.php.net
|
|
|
|
|
|
|
|
|
|
PHP ist hervorragend f<EFBFBD>r einfache Anbindungen geeignet. F<EFBFBD>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<EFBFBD>erdem ecpg,, welches eine eingebundene
|
|
|
|
|
SQL-Query-Schnittstelle f<EFBFBD>r C zur Verf<EFBFBD>gung stellt.
|
|
|
|
|
|
|
|
|
|
2.4) Welche Sprachen sind f<EFBFBD>r die Kommunikation mit PostgreSQL verf<EFBFBD>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<EFBFBD>gt initdb fehl?
|
|
|
|
|
|
|
|
|
|
* <EFBFBD>berpr<EFBFBD>fe, da<EFBFBD> keine Binaries vorheriger Versionen in Deinem Pfad
|
|
|
|
|
(PATH-Variable) sind. (Wenn Du die Meldung siehst:
|
|
|
|
|
WARN:heap_modifytuple: repl is \ 9, ist das das Problem.)
|
|
|
|
|
* <EFBFBD>berpr<EFBFBD>fe, da<EFBFBD> der Pfad richtig gesetzt ist
|
|
|
|
|
* <EFBFBD>berpr<EFBFBD>fe, ob der User postgres der Eigent<EFBFBD>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 <EFBFBD>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. <EFBFBD>berpr<EFBFBD>fe zuerst, ob Dein Kernel
|
|
|
|
|
System V Extensions enth<EFBFBD>lt. PostgreSQL ben<EFBFBD>tigt die
|
|
|
|
|
Kernel-Unterst<EFBFBD>tzung f<EFBFBD>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<EFBFBD>r Shared Memory konfiguriert, oder
|
|
|
|
|
Du mu<EFBFBD>t den Shared Memory Bereich vergr<EFBFBD><EFBFBD>ern. Die genaue Gr<EFBFBD><EFBFBD>e h<EFBFBD>ngt
|
|
|
|
|
von Deiner Systemarchitektur ab und mit wievielen Puffern und
|
|
|
|
|
Serverprozessen Du postmaster konfiguriert hast. F<EFBFBD>r die meisten
|
|
|
|
|
Systeme, mit Standardangaben f<EFBFBD>r Puffer und Prozessen ben<EFBFBD>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<EFBFBD>tigt eine Semaphore pro m<EFBFBD>glichen
|
|
|
|
|
Backend-Prozess. Eine Zwischenl<EFBFBD>sung w<EFBFBD>re, postmaster mit einer
|
|
|
|
|
geringeren Anzahl an Backend-Prozessen zu starten. Benutze dazu die -N
|
|
|
|
|
Option mit einem Wert kleiner als die standardm<EFBFBD><EFBFBD>igen 32. Eine
|
|
|
|
|
dauerhafte L<EFBFBD>sung w<EFBFBD>re es, die Kernel-Parameter SEMMNS und SEMMNI zu
|
|
|
|
|
erh<EFBFBD>hen.
|
|
|
|
|
|
|
|
|
|
Falls die Fehlermeldung anders aussieht, hast Du m<EFBFBD>glicherweise keine
|
|
|
|
|
Semaphoren-Unterst<EFBFBD>tzung in Deinem Kernel aktiviert.
|
|
|
|
|
|
|
|
|
|
3.6) Wie verhindere ich, da<EFBFBD> andere Hosts auf meine PostgreSQL Datenbanken
|
|
|
|
|
zugreifen?
|
|
|
|
|
|
|
|
|
|
Die Standardeinstellung ist, da<EFBFBD> PostgreSQL Verbindungen von der
|
|
|
|
|
lokalen Maschine <EFBFBD>ber Unix-Domain-Sockets erlaubt. Andere Maschinen
|
|
|
|
|
werden keine Verbindung aufbauen k<EFBFBD>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<EFBFBD>glichen, stelle
|
|
|
|
|
sicher, da<EFBFBD> der postmaster mit der -i Option gestartet wurde, und f<EFBFBD>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<EFBFBD>nnen. Das ist
|
|
|
|
|
eine Sicherheitsma<EFBFBD>nahme, wegen der M<EFBFBD>glichkeit Objekt-Module
|
|
|
|
|
dynamisch in die Datenbank zu linken.
|
|
|
|
|
|
|
|
|
|
3.9) Alle meine Server st<EFBFBD>rzen bei gleichzeitigem Tabellenzugriff ab.
|
|
|
|
|
Warum?
|
|
|
|
|
|
|
|
|
|
Dieses Problem kann durch einen Kernel verursacht werden, der ohne
|
|
|
|
|
Support f<EFBFBD>r Semaphoren konfiguriert wurde.
|
|
|
|
|
|
|
|
|
|
3.10) Wie optimiere ich die Datenbankmaschine f<EFBFBD>r bessere Leistung?
|
|
|
|
|
|
|
|
|
|
Sicherlich k<EFBFBD>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, <EFBFBD>berpr<EFBFBD>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. <EFBFBD>berpr<EFBFBD>fe, ob die Statements nicht
|
|
|
|
|
in einen einzelnen Transaktions-Block zusammengefasst werden k<EFBFBD>nnen.
|
|
|
|
|
Das reduziert den Transaktions-Overhead. Du kannst auch erw<EFBFBD>gen,
|
|
|
|
|
Indizes zu l<EFBFBD>schen und neu zu erstellen, wenn Du gro<EFBFBD>e Datenmengen
|
|
|
|
|
<EFBFBD>nderst.
|
|
|
|
|
|
|
|
|
|
Es gibt verschiedene Tuning-Ma<EFBFBD>nahmen, die man ergreifen kann. Du
|
|
|
|
|
kannst fsync() abschalten, indem Du beim Starten des postmasters die
|
|
|
|
|
Optionen -o -F angibst. Das hindert fsync()<EFBFBD>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<EFBFBD>r
|
|
|
|
|
den Backend-Prozess erh<EFBFBD>hen. Falls Du diesen Wert zu hoch einstellst,
|
|
|
|
|
kann es sein, da<EFBFBD> der postmaster nicht startet, weil der Shared Memory
|
|
|
|
|
Speicherplatz Deines Kernels aufgebraucht wird. Jeder Puffer ist 8 kB
|
|
|
|
|
gro<EFBFBD> und es gibt standardm<EFBFBD><EFBFBD>ig 64 Puffer.
|
|
|
|
|
|
|
|
|
|
Du kannst ebenfalls die -S Option des Backends nutzen, um die Gr<EFBFBD><EFBFBD>e
|
|
|
|
|
des Speicherplatzes f<EFBFBD>r tempor<EFBFBD>res Sortieren zu erh<EFBFBD>hen. Der -S Wert
|
|
|
|
|
wird in Kilobyte gemessen und ist standardm<EFBFBD><EFBFBD>ig auf 512 kB festgelegt.
|
|
|
|
|
Es w<EFBFBD>re jedoch unklug, den Wert zu hoch anzugeben, da ein Query
|
|
|
|
|
m<EFBFBD>glicherweise Speicherplatzmangel verursacht, wenn es viele
|
|
|
|
|
gleichzeitige Sortierungen durchf<EFBFBD>hren mu<EFBFBD>.
|
|
|
|
|
|
|
|
|
|
Der cluster Befehl kann benutzt werden, um Daten in Basistabellen zu
|
|
|
|
|
gruppieren, so da<EFBFBD> sie auf einen Index zusammengebracht werden. Siehe
|
|
|
|
|
auch die cluster(l) Man-Page f<EFBFBD>r weitere Details.
|
|
|
|
|
|
|
|
|
|
3.11) Welche Debugging/Fehlersuch-Hilfsmittel sind f<EFBFBD>r PostgreSQL
|
|
|
|
|
verf<EFBFBD>gbar?
|
|
|
|
|
|
|
|
|
|
PostgreSQL hat einige M<EFBFBD>glichkeiten, Statusinformationen zu berichten,
|
|
|
|
|
die n<EFBFBD>tzlich f<EFBFBD>r die Fehlersuche sein k<EFBFBD>nnen.
|
|
|
|
|
|
|
|
|
|
Erstens, wenn beim configure-Lauf die Option --enable-cassert
|
|
|
|
|
angegeben wurde, verfolgen viele assert()<EFBFBD>s den Fortschritt des
|
|
|
|
|
Backends und halten das Programm an, wenn etwas Unerwartetes passiert.
|
|
|
|
|
|
|
|
|
|
Postmaster und postgres, haben mehrere Fehlersuch-Optionen zur
|
|
|
|
|
Verf<EFBFBD>gung. Stelle zuerst sicher, da<EFBFBD> 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<EFBFBD>lt n<EFBFBD>tzliche Informationen <EFBFBD>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<EFBFBD>e
|
|
|
|
|
Logdateien!
|
|
|
|
|
|
|
|
|
|
Du kannst tats<EFBFBD>chlich das Postgres-Backend auf der Kommandozeile
|
|
|
|
|
laufen lassen und SQL-Statements direkt eingeben. Diese Vorgehensweise
|
|
|
|
|
wird aber nur zur Fehlersuche empfohlen. Beachte, da<EFBFBD> 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<EFBFBD>uft es nicht in der gleichen
|
|
|
|
|
Umgebung und deshalb k<EFBFBD>nnen einige locking/backend Operationen nicht
|
|
|
|
|
reproduziert werden. Einige Betriebssysteme k<EFBFBD>nnen sich an einen
|
|
|
|
|
Backend-Prozess direkt anh<EFBFBD>ngen, um Probleme zu diagnostizieren.
|
|
|
|
|
|
|
|
|
|
Das Programm postgres hat -s, -A und -t Optionen, die bei der
|
|
|
|
|
Fehlersuche und Leistungsmessung sehr n<EFBFBD>tzlich sein k<EFBFBD>nnen. Du kannst
|
|
|
|
|
das Paket auch mit Profiling kompilieren, um zu sehen, welche
|
|
|
|
|
Funktionen wieviel Ausf<EFBFBD>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<EFBFBD>t die Grenze des postmasters, die festlegt, wieviele
|
|
|
|
|
gleichzeitige Backend-Prozesse gestartet werden k<EFBFBD>nnen, hochsetzen.
|
|
|
|
|
|
|
|
|
|
In Postgres 6.5 sind das normalerweise 32 Prozesse. Du kannst diesen
|
|
|
|
|
Wert dadurch erh<EFBFBD>hen, da<EFBFBD> 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<EFBFBD>he MAXBACKENDS in
|
|
|
|
|
include/config.h und kompiliere das Paket neu. Du kannst den
|
|
|
|
|
Standardwert von -N w<EFBFBD>hrend der Konfiguration setzen, indem Du
|
|
|
|
|
--with-maxbackends angibst. Anmerkung: Falls Du -N gr<EFBFBD><EFBFBD>er als 32
|
|
|
|
|
einstellst, solltest Du -B auf einen Wert, h<EFBFBD>her als 64 setzen. F<EFBFBD>r
|
|
|
|
|
eine hohe Anzahl an Backend-Prozessen, solltest Du m<EFBFBD>glicherweise
|
|
|
|
|
einige Unix-Kernel Parameter ebenfalls erh<EFBFBD>hen. Folgendes Parameter
|
|
|
|
|
solltest Du pr<EFBFBD>fen: die Maximalgr<EFBFBD><EFBFBD>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<EFBFBD>ffneten Dateien NFILE und NINODE.
|
|
|
|
|
Der Grund f<EFBFBD>r die Begrenzung der erlaubten Backend-Prozesse liegt
|
|
|
|
|
darin, da<EFBFBD> verhindert werden soll, da<EFBFBD> das System seine freien
|
|
|
|
|
Ressourcen aufbraucht.
|
|
|
|
|
|
|
|
|
|
In den Postgres-Versionen vor 6.5 war die maximale Anzahl von Backends
|
|
|
|
|
auf 64 festgelegt und eine <EFBFBD>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<EFBFBD>re Dateien, die durch den Query-Ausf<EFBFBD>hrer erzeugt
|
|
|
|
|
werden. Wenn zum Beispiel eine Sortierung durchgef<EFBFBD>hrt werden mu<EFBFBD>, um
|
|
|
|
|
ein ORDER BY auszuf<EFBFBD>hren, und diese Sortierung mehr Platz ben<EFBFBD>tigt,
|
|
|
|
|
als mit dem Backend-Parameter -S erlaubt wurde, dann werden diese
|
|
|
|
|
tempor<EFBFBD>ren Dateien erzeugt, um die Daten dort zu halten.
|
|
|
|
|
|
|
|
|
|
Die tempor<EFBFBD>ren Dateien sollten automatisch gel<EFBFBD>scht werden, falls das
|
|
|
|
|
Backend jedoch w<EFBFBD>hrend einer Sortierung abst<EFBFBD>rzt, bleiben sie
|
|
|
|
|
erhalten. Wenn zu diesem Zeitpunkt keine Transaktion l<EFBFBD>uft, kannst Du
|
|
|
|
|
die pg_tempNNN.NN Dateien ohne Gefahr l<EFBFBD>schen.
|
|
|
|
|
|
|
|
|
|
3.14) Wie richte ich eine Benutzergruppe (pg_group) ein?
|
|
|
|
|
|
|
|
|
|
Zur Zeit gibt es keine einfache Schnittstelle, um Benutzergruppen
|
|
|
|
|
einzurichten Du mu<EFBFBD>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<EFBFBD>r jede Gruppe sein.
|
|
|
|
|
* grolist: die Liste der pg_user IDs, die zu dieser Gruppe geh<EFBFBD>ren.
|
|
|
|
|
(int4[].)
|
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Fragen zum Betrieb
|
|
|
|
|
|
|
|
|
|
4.1) Das System scheint Kommata, Dezimalpunkte und Datumsformate
|
|
|
|
|
durcheinanderzubringen.
|
|
|
|
|
|
|
|
|
|
<EFBFBD>berpr<EFBFBD>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<EFBFBD>r eine Beschreibung.
|
|
|
|
|
|
|
|
|
|
4.3) Wie w<EFBFBD>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<EFBFBD> alle Ergebniszeilen zum Client <EFBFBD>bermittelt
|
|
|
|
|
werden. Die komplette Abfrage mu<EFBFBD> abgearbeitet werden, selbst wenn Du
|
|
|
|
|
nur die ersten paar Zeilen haben m<EFBFBD>chtest. Ziehe ein Query in
|
|
|
|
|
Erw<EFBFBD>gung, das ein ORDER BY benutzt. Es gibt keine M<EFBFBD>glichkeit Zeilen
|
|
|
|
|
zur<EFBFBD>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<EFBFBD>r psql ansehen. Sie enth<EFBFBD>lt die SQL-Befehle, die die
|
|
|
|
|
Backslash-Kommandos (\) ausf<EFBFBD>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<EFBFBD>hrung der Befehle benutzt.
|
|
|
|
|
|
|
|
|
|
4.5) Wie entferne ich eine Spalte von einer Tabelle?
|
|
|
|
|
|
|
|
|
|
Wir unterst<EFBFBD>tzen alter table drop column nicht, aber mache es so:
|
|
|
|
|
|
|
|
|
|
SELECT ... -- w<EFBFBD>hle alle Spalten au<EFBFBD>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<EFBFBD><EFBFBD>e f<EFBFBD>r eine Zeile, eine Tabelle, eine Datenbank?
|
|
|
|
|
|
|
|
|
|
Zeilen sind auf 8 kB begrenzt, aber das kann ge<EFBFBD>ndert werden, indem Du
|
|
|
|
|
in include/config.h die Konstante BLCKSZ <EFBFBD>nderst. Um Attribute mit
|
|
|
|
|
mehr als 8 kB zu nutzen, kannst Du auch das "Large Object Interface"
|
|
|
|
|
benutzen.
|
|
|
|
|
|
|
|
|
|
Zeilen <EFBFBD>berschreiten keine 8 kB-Grenzen. Eine Zeile mit 5 kB wird 8 kB
|
|
|
|
|
Speicherplatz ben<EFBFBD>tigen.
|
|
|
|
|
|
|
|
|
|
Tabellen- und Datenbankgr<EFBFBD><EFBFBD>en haben keine Grenzen. Es gibt viele
|
|
|
|
|
Datenbanken mit zig Gigabytes und wahrscheinlich einige mit hunderten
|
|
|
|
|
Gigabyte.
|
|
|
|
|
|
|
|
|
|
4.7) Wieviel Plattenplatz ben<EFBFBD>tigt eine Datenbank zur Speicherung einer
|
|
|
|
|
Datendatei mit zeilenweisen Datens<EFBFBD>tzen?
|
|
|
|
|
|
|
|
|
|
Eine Postgres Datenbank kann ungef<EFBFBD>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<EFBFBD>tigt 2,4 MB Speicherplatz. Die
|
|
|
|
|
Gr<EFBFBD><EFBFBD>e der Postgres Datenbankdatei, die diese Daten enth<EFBFBD>lt, liegt
|
|
|
|
|
ungef<EFBFBD>hr bei 14 MB.
|
|
|
|
|
36 Bytes: jeder Zeilenkopf (ungef<EFBFBD>hr)
|
|
|
|
|
+ 8 Bytes: zwei Integer-Felder @ jedes 4 Bytes
|
|
|
|
|
+ 4 Bytes: Zeiger auf den Datensatz
|
|
|
|
|
-----------------------------------------------
|
|
|
|
|
48 Bytes pro Zeile
|
|
|
|
|
|
|
|
|
|
Die Gr<EFBFBD><EFBFBD>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<EFBFBD>nnen so auch sehr gro<EFBFBD> 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<EFBFBD>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<EFBFBD>t Du ein explizites vacuum eingeben. Nach dieser
|
|
|
|
|
Aktualisierung wei<EFBFBD> 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<EFBFBD>rde.
|
|
|
|
|
|
|
|
|
|
Benutze den Befehl vacuum analyze f<EFBFBD>r die spaltenspezifische
|
|
|
|
|
Optimierung. Vacuum analyze ist f<EFBFBD>r komplexe Multi-Join-Abfragen
|
|
|
|
|
wichtig, damit der Optimierer die Anzahl der Zeilen von jeder Tabelle
|
|
|
|
|
sch<EFBFBD>tzen und dann die passende Join-Reihenfolge w<EFBFBD>hlen kann. Das
|
|
|
|
|
Backend verfolgt die Spaltenstatistik nicht selbst, so da<EFBFBD> vacuum
|
|
|
|
|
analyze regelm<EFBFBD><EFBFBD>ig aufgerufen werden sollte.
|
|
|
|
|
|
|
|
|
|
Indizes werden nicht f<EFBFBD>r ORDER BY Operationen benutzt.
|
|
|
|
|
|
|
|
|
|
Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, k<EFBFBD>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<EFBFBD>rer Ausdr<EFBFBD>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<EFBFBD>umliche Daten zu indizieren. Ein
|
|
|
|
|
Hash-Index kann nicht f<EFBFBD>r Bereichssuchen genutzt werden. Ein B-Tree
|
|
|
|
|
Index kann nur f<EFBFBD>r Bereichssuchen in eindimensionalen Daten genutzt
|
|
|
|
|
werden. R-Trees k<EFBFBD>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<EFBFBD>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<EFBFBD>nnen Polygone und Rechtecke verarbeiten.
|
|
|
|
|
Theoretisch k<EFBFBD>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<EFBFBD>ber, wie das
|
|
|
|
|
zu machen w<EFBFBD>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<EFBFBD>sen. Es erlaubt die Behandlung von gro<EFBFBD>en Join-Queries ohne
|
|
|
|
|
ersch<EFBFBD>pfende Suche.
|
|
|
|
|
|
|
|
|
|
F<EFBFBD>r weitere Informationen siehe die Dokumentation.
|
|
|
|
|
|
|
|
|
|
4.13) Wie verfahre ich bei der Suche mit regul<EFBFBD>ren Ausdr<EFBFBD>cken und bei einer
|
|
|
|
|
Suche mit Ignorierung der Gro<EFBFBD>- und Kleinschreibweisen?
|
|
|
|
|
|
|
|
|
|
~ und ~* sind wahrscheinlich das, was Du willst. Vgl. psql's \do
|
|
|
|
|
Befehl.
|
|
|
|
|
|
|
|
|
|
4.14) Wie ermittle ich in einem Query, da<EFBFBD> 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<EFBFBD>llt bis zur angegebenen L<EFBFBD>n
|
|
|
|
|
ge
|
|
|
|
|
VARCHAR(#) varchar Die Gr<EFBFBD><EFBFBD>e legt die Maximall<EFBFBD>nge fest, kein Ausf
|
|
|
|
|
<EFBFBD>llen mit Leerzeichen
|
|
|
|
|
TEXT text Die L<EFBFBD>nge wird nur durch die maximale Zeilenl<EFBFBD>n
|
|
|
|
|
ge beschr<EFBFBD>nkt
|
|
|
|
|
BYTEA bytea Bytearray mit variabler L<EFBFBD>nge
|
|
|
|
|
|
|
|
|
|
Du mu<EFBFBD>t die internen Namen benutzen, wenn Du interne Operationen
|
|
|
|
|
durchf<EFBFBD>hren willst.
|
|
|
|
|
|
|
|
|
|
Die letzten vier Typen sind "varlena"-Typen (d.h. die ersten vier
|
|
|
|
|
Bytes geben die L<EFBFBD>nge an, gefolgt von den Daten). CHAR(#) belegt die
|
|
|
|
|
maximale Anzahl von Bytes, unabh<EFBFBD>ngig davon, wieviele Daten im Feld
|
|
|
|
|
gespeichert werden. TEXT, VARCHAR(#) und BYTEA haben alle eine
|
|
|
|
|
variable L<EFBFBD>nge auf dem Datentr<EFBFBD>ger, deshalb gibt es einen leichten
|
|
|
|
|
Geschwindigkeitsnachteil bei der Nutzung dieser Typen. Genauer, der
|
|
|
|
|
Nachteil gilt f<EFBFBD>r den Zugriff auf alle Spalten nach der ersten Spalte
|
|
|
|
|
dieses Typs.
|
|
|
|
|
|
|
|
|
|
4.16) Wie erzeuge ich ein serielles Feld mit automatischer Erh<EFBFBD>hung des
|
|
|
|
|
Inhalts?
|
|
|
|
|
|
|
|
|
|
PostgreSQL unterst<EFBFBD>tzt einen SERIAL Datentyp. Er erzeugt automatisch
|
|
|
|
|
eine Sequenz und einen Index auf die Spalte. Siehe die create_sequence
|
|
|
|
|
Man-Page f<EFBFBD>r weitere Informationen <EFBFBD>ber Sequenzen. Du kannst aber auch
|
|
|
|
|
das Oid Feld jeder Zeile als eindeutigen Wert nutzen. Jedoch mu<EFBFBD>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<EFBFBD>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<EFBFBD><EFBFBD>er als dieser Wert. Standardm<EFBFBD><EFBFBD>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<EFBFBD>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 <EFBFBD>ndern, oder eine Kopie der Tabelle mit den
|
|
|
|
|
originalen Oids anlegen k<EFBFBD>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 <EFBFBD>ndern sich, wenn Zeilen ge<EFBFBD>ndert
|
|
|
|
|
oder neu geladen werden. Sie werden von Index-Eintr<EFBFBD>gen genutzt, um
|
|
|
|
|
die Zeilen physisch zu adressieren.
|
|
|
|
|
|
|
|
|
|
4.18) Was ist die Bedeutung der verschiedenen Ausdr<EFBFBD>cke, die in PostgreSQL
|
|
|
|
|
benutzt werden (z.B. attribute, class,...)?
|
|
|
|
|
|
|
|
|
|
Einige der Quelltexte und die <EFBFBD>ltere Dokumentation nutzen allgemeine
|
|
|
|
|
Begriffe. Hier sind einige aufgef<EFBFBD>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<EFBFBD>glicherweise ist der virtuelle Speicher verbraucht oder Dein Kernel
|
|
|
|
|
hat eine niedrige Grenze f<EFBFBD>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<EFBFBD>r Prozesse
|
|
|
|
|
erh<EFBFBD>hen und vielleicht l<EFBFBD>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<EFBFBD>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<EFBFBD> lo_open in
|
|
|
|
|
eine Transaktion eingebunden werden mu<EFBFBD>, 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<EFBFBD>t, was sofort nach
|
|
|
|
|
dem lo_open passiert, wenn Du nicht innerhalb einer Transaktion bist.
|
|
|
|
|
So f<EFBFBD>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<EFBFBD>
|
|
|
|
|
Du auto-commit off setzen mu<EFBFBD>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<EFBFBD>erdem sicher, da<EFBFBD> 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<EFBFBD> Du
|
|
|
|
|
nicht malloc/free und palloc/pfree durcheinanderw<EFBFBD>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<EFBFBD>ckliefert?
|
|
|
|
|
|
|
|
|
|
Das erfordert derart extreme Genialit<EFBFBD>t, da<EFBFBD> die Autoren es niemals
|
|
|
|
|
versucht haben, obwohl es im Prinzip zu machen w<EFBFBD>re.
|
|
|
|
|
|
|
|
|
|
5.5) Ich habe eine der Quellendateien ge<EFBFBD>ndert. Warum macht sich die
|
|
|
|
|
<EFBFBD>nderung beim erneuten Compilerlauf nicht bemerkbar?
|
|
|
|
|
|
|
|
|
|
Die Makefiles finden nicht die richtigen Abh<EFBFBD>ngigkeiten. Du mu<EFBFBD>t ein
|
|
|
|
|
make clean und dann ein weiteres make machen.
|