2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
H<>ufig gestellte Fragen (FAQ) zu PostgreSQL
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Current maintainer: Bruce Momjian (bruce@momjian.us).
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Deutsche <20>bersetzung von Ian Barwick (barwick@gmail.com).
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Letzte Aktualisierung der deutschen <20>bersetzung: Fr., den 19.10.2007,
|
|
|
|
|
17:00 MEZ
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Die aktuellste Version dieses Dokuments liegt auf der
|
|
|
|
|
PostgreSQL-Website:
|
2007-10-20 23:49:09 +08:00
|
|
|
|
* http://www.postgresql.org/docs/faqs.FAQ.html (engl.)
|
|
|
|
|
* http://www.postgresql.org/docs/faqs.FAQ_german.html (dt.)
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
<20>bersetzungen dieses Dokuments in anderen Sprachen sowie plattform-
|
2005-01-17 10:42:31 +08:00
|
|
|
|
spezifische FAQs k<>nnen unter http://www.postgresql.org/docs/faq/
|
|
|
|
|
eingesehen werden.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Allgemeine Fragen
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
1.1) Was ist PostgreSQL? Wie wird es ausgesprochen?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
1.2) Wer kontrolliert PostgreSQL?
|
|
|
|
|
1.3) Welchem Copyright unterliegt PostgreSQL?
|
|
|
|
|
1.4) Auf welchen Plattformen l<>uft PostgreSQL?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
1.5) Woher bekomme ich PostgreSQL?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
1.6) Was ist die neueste Version von PostgreSQL?
|
|
|
|
|
1.7) Wo bekomme ich Support f<>r PostgreSQL?
|
|
|
|
|
1.8) Wie kann ich einen Fehlerbericht abgeben?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
1.10) Welche Dokumentation ist f<>r PostgreSQL verf<72>gbar?
|
|
|
|
|
1.11) Wie kann ich SQL lernen?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
1.12) Wie kann ich im Entwicklerteam mitarbeiten?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
1.13) Wie l<>uft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
|
|
|
|
|
1.14) Kommt PostgreSQL mit den Anpassungen der Sommerzeit in
|
|
|
|
|
verschiedenen L<>ndern klar?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Fragen zu Benutzerprogrammen
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
2.1) Welche Schnittstellen gibt es f<>r PostgreSQL?
|
|
|
|
|
2.2) Wie kann man PostgreSQL mit einer Website nutzen?
|
2002-12-18 12:46:17 +08:00
|
|
|
|
2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Administrative Fragen
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
3.2) Wie regle ich Zugriffe von anderen Rechnern?
|
|
|
|
|
3.3) Wie kann ich eine bessere Performanz erreichen?
|
|
|
|
|
3.4) Welche Debugging-Funktionen sind f<>r PostgreSQL verf<72>gbar?
|
|
|
|
|
3.5) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Verbindung aufzubauen versuche. Warum?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
3.6) Wie wird PostgreSQL aktualisiert?
|
|
|
|
|
3.7) Welche Hardware eignet sich f<>r den Betrieb mit PostgreSQL?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Fragen zum Betrieb
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.1) Wie w<>hle ich per SELECT-Anweisung nur die ersten paar Zeilen
|
2003-06-07 06:21:35 +08:00
|
|
|
|
bzw. eine beliebige Zeile in einer Abfrage aus?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.2) Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder
|
2005-01-17 10:42:31 +08:00
|
|
|
|
Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql
|
|
|
|
|
verwendeten Abfragen?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.3) Wie <20>ndere ich den Datentyp einer Spalte?
|
|
|
|
|
4.4) Was ist die Maximalgr<67><72>e f<>r eine Zeile, eine Tabelle, eine
|
2000-09-14 10:21:31 +08:00
|
|
|
|
Datenbank?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.5) Wieviel Plattenplatz wird ben<65>tigt, um die Daten aus einer
|
2002-10-23 05:44:51 +08:00
|
|
|
|
typischen Textdatei abzuspeichern?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.6) Meine Abfragen sind langsam oder benutzen die Indexe nicht.
|
|
|
|
|
Warum?
|
|
|
|
|
4.7) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine
|
|
|
|
|
Abfrage auswertet?
|
|
|
|
|
4.8) Wie verfahre ich bei der Suche mit regul<75>ren Ausdr<64>cken und bei
|
2002-10-23 05:44:51 +08:00
|
|
|
|
einer Suche, bei der Gro<72>- und Kleinschreibweisen ignoriert werden?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Wie verwende ich einen Index bei solchen Suchabfragen?
|
|
|
|
|
4.9) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
|
|
|
|
|
4.10) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
|
|
|
|
|
4.11.1) Wie erzeuge ich ein serielles Feld mit automatischer Erh<72>hung
|
2002-10-23 05:44:51 +08:00
|
|
|
|
des Wertes?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.11.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
|
|
|
|
|
4.11.3) F<>hrt currval() zu einer Race-Condition mit anderen Nutzern?
|
|
|
|
|
4.11.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch
|
2002-10-23 05:44:51 +08:00
|
|
|
|
nicht zur<75>ckgesetzt? Warum gibt es L<>cken in der Nummerierung meiner
|
|
|
|
|
Sequenz-/SERIAL-Spalte?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.12) Was ist ein OID? Was ist ein CTID?
|
|
|
|
|
4.13) Wieso bekomme ich den Fehler: "FATAL: Memory exhausted in
|
2002-10-23 05:44:51 +08:00
|
|
|
|
AllocSetAlloc()"?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.14) Wie kann ich feststellen, welche PostgreSQL-Version bei mir
|
2002-10-23 05:44:51 +08:00
|
|
|
|
l<>uft?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.15) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die
|
2002-10-23 05:44:51 +08:00
|
|
|
|
aktuelle Uhrzeit enthalten soll?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.16) Wie f<>hre ich eine OUTER JOIN durch?
|
|
|
|
|
4.17) Wie kann ich Abfragen <20>ber mehrere Datenbanken hinweg ausf<73>hren?
|
|
|
|
|
4.18) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
|
2002-10-23 05:44:51 +08:00
|
|
|
|
zur<75>ckgeben lassen?
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.19) Warum bekomme ich eine Fehlermeldung wie
|
|
|
|
|
"relation with OID ##### does not exist" wenn ich tempor<6F>re Tabellen
|
|
|
|
|
in
|
|
|
|
|
PL/PgSQL-Funktionen benutze?
|
|
|
|
|
4.20) Welche Replikationsl<73>sungen gibt es?
|
|
|
|
|
4.21) Warum werden die Tabellen- und Spaltennamen in meiner Abfrage
|
|
|
|
|
nicht erkannt? Warum werden Gro<72>buchstaben umgewandelt?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Allgemeine Fragen
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
1.1) Was ist PostgreSQL? Wie wird es ausgesprochen?
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
Die (englische) Aussprache ist "Post-Gres-Q-L". Im allgemeinen
|
|
|
|
|
Sprachgebrauch hat sich die Kurzform "Postgres" auch durchgesetzt.
|
2007-10-20 23:49:09 +08:00
|
|
|
|
(F<>r diejenigen, die es interessiert: eine MP3-Datei mit der
|
|
|
|
|
amerikanischen Aussprache befindet sich hier:
|
|
|
|
|
http://www.postgresql.org/files/postgresql.mp3
|
|
|
|
|
|
|
|
|
|
PostgreSQL ist ein objektrelationales Datenbanksystem, das die Vorz<72>ge
|
|
|
|
|
von kommerziellen Datenbanksystemen mit zukunftsweisenden Innovationen
|
|
|
|
|
kombiniert. PostgreSQL ist freie Software und dessen kompletter
|
|
|
|
|
Quellcode ist <20>ffentlich verf<72>gbar.
|
|
|
|
|
|
|
|
|
|
Die PostgreSQL-Entwicklung wird von einem Team von meist freiwilligen
|
|
|
|
|
Entwicklern durchgef<65>hrt. Dieses Team ist f<>r die Gesamtentwicklung
|
|
|
|
|
von PostgreSQL verantwortlich. Es handelt sich um ein
|
|
|
|
|
Gemeinschaftsprojekt, das nicht von einer bestimmten Firma
|
|
|
|
|
kontrolliert wird. Lesen Sie die Entwickler-FAQ:
|
|
|
|
|
http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn Sie an einer
|
|
|
|
|
Mitarbeit interessiert sind.
|
|
|
|
|
|
|
|
|
|
1.2) Wer kontrolliert PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Falls Sie nach dem Namen eines etwaigen Inhabers bzw. nach einem
|
|
|
|
|
allm<6C>chtigen Zentralkommittee suchen - sparen Sie sich die M<>he, sowas
|
|
|
|
|
existiert gar nicht. Es gibt zwar das "Core Committee" sowie
|
|
|
|
|
Entwickler, die CVS-Schreibberechtigung haben, jedoch haben diese
|
|
|
|
|
Gruppen eher nur eine administrative Rolle. Das Projekt wird durch die
|
|
|
|
|
Community gesteuert, die aus den Entwicklern sowie nat<61>rlich auch den
|
|
|
|
|
Nutzern besteht - jeder kann daran teilnehmen. (Lesen Sie die
|
|
|
|
|
Entwickler-FAQ: http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn
|
|
|
|
|
Sie an der PostgreSQL-Entwicklung teilnehmen m<>chten).
|
|
|
|
|
|
|
|
|
|
1.3) Welchem Copyright unterliegt PostgreSQL?
|
|
|
|
|
|
|
|
|
|
PostgreSQL wird unter der klassischen BSD-Lizenz herausgegeben. Im
|
|
|
|
|
Grunde genommen erlaubt diese den Nutzern, beliebig mit dem Code
|
|
|
|
|
umzugehen, auch der Weiterverkauf von Bin<69>rversionen ohne Quellcode
|
|
|
|
|
ist erlaubt. Die einzige Einschr<68>nkung besteht darin, dass PostgreSQL
|
|
|
|
|
auf keinen Fall f<>r etwaige Probleme mit der Software haftet. Au<41>erdem
|
|
|
|
|
mu<6D> der Copyright- Text in allen Kopien der Software enthalten sein.
|
|
|
|
|
Dies ist der Originaltext der BSD-Lizenz:
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
PostgreSQL Data Base Management System
|
|
|
|
|
|
2009-01-02 01:24:05 +08:00
|
|
|
|
Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Portions Copyright (c) 1994-6 Regents of the University of California
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Es gilt die Copyright-Klausel im Original!
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
1.4) Auf welchen Plattformen l<>uft PostgreSQL?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen
|
|
|
|
|
Plattform eingesetzt werden. Diejenigen Plattformen, die bei der
|
|
|
|
|
jeweiligen Versionsfreigabe getestet wurden, sind in den
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Installationsanleitungen aufgelistet.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
PostgreSQL l<>uft auch auf Microsoft NT-basierten Betriebssystemen wie
|
|
|
|
|
Windows 2000 SP4, XP und Server 2003. Ein vorgefertigtes
|
|
|
|
|
Installationspaket kann von http://pgfoundry.org/projects/pginstaller
|
|
|
|
|
heruntergeladen werden. DOS-basierte Windows-Versionen (Win95, Win98,
|
|
|
|
|
WinMe) k<>nnen PostgreSQL nur mit Hilfe der Cygwin-Umgebung ausf<73>hren.
|
2003-04-29 06:40:38 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Eine Portierung f<>r Novell Netware 6 gibt es unter
|
|
|
|
|
http://forge.novell.com sowie eine OS/2 (eComStation) version unter
|
2005-01-17 10:42:31 +08:00
|
|
|
|
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
|
2007-10-20 23:49:09 +08:00
|
|
|
|
SQL&stype=all&sort=type&dir=%2F.
|
2003-03-11 00:06:41 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
1.5) Woher bekomme ich PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Per Web-Browser hier: http://www.postgresql.org/ftp/ und per FTP hier:
|
|
|
|
|
ftp://ftp.postgresql.org/pub/.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
1.6) Was ist die neueste Version von PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Die neueste Version von PostgreSQL ist 8.2.5.
|
|
|
|
|
|
|
|
|
|
Die Freigabe einer neuen Hauptversion erfolgt in der Regel j<>hrlich,
|
|
|
|
|
kleinere Korrekturversionen alle paar Monaten.
|
|
|
|
|
|
|
|
|
|
1.7) Wo bekomme ich Support f<>r PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Die PostgreSQL-Community bietet Unterst<73>tzung per Mailing-Liste. Die
|
|
|
|
|
Web-Seite http://www.postgresql.org/community/lists/ bietet einen
|
|
|
|
|
<20>berblick. Die Listen general und bugs bieten einen guten Einstieg.
|
|
|
|
|
|
|
|
|
|
Eine deutschsprachige Mailing-Liste gibt es hier:
|
|
|
|
|
http://archives.postgresql.org/pgsql-de-allgemein/.
|
|
|
|
|
|
|
|
|
|
Der wichtigsten IRC-Channel ist #postgresql auf Freenode
|
|
|
|
|
(irc.freenode.net). Unter UNIX/Linux k<>nnen Sie mit z.B. irc -c
|
|
|
|
|
'#postgresql' "$USER" irc.freenode.net. daran teilnehmen. Auf Freenode
|
|
|
|
|
gibt es einen spanischsprachigen Channel #postgresql-es, einen
|
|
|
|
|
franz<6E>sischen, #postgresqlfr sowie einen brasilianischen,
|
|
|
|
|
#postgresql-br . Es gibt au<61>erdem einen PostgreSQL-Channel bei EFNet.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Eine Liste von Unternehmen, die Support f<>r PostgreSQL auf
|
|
|
|
|
kommerzieller Basis leisten, kann unter
|
2007-10-20 23:49:09 +08:00
|
|
|
|
http://www.postgresql.org/support/professional_support eingesehen
|
|
|
|
|
werden.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
1.8) Wie kann ich einen Fehlerbericht abgeben?
|
|
|
|
|
|
|
|
|
|
Nutzen Sie das Formular unter
|
|
|
|
|
http://www.postgresql.org/support/submitbug. Schauen Sie aber vorher
|
|
|
|
|
unter ftp://ftp.postgresql.org/pub/ nach, ob es mittlerweile eine
|
|
|
|
|
neuere PostgreSQL-Version gibt, in der der Fehler behoben wurde.
|
|
|
|
|
|
|
|
|
|
Bugs, die <20>ber das Formular bzw. eine der Mailing-Listen
|
|
|
|
|
bekanntgegeben wurden, erhalten typischerweise einer der folgenden
|
|
|
|
|
Reaktionen:
|
|
|
|
|
* es ist kein Bug, der Grund wird benannt
|
|
|
|
|
* es ist ein bereits bekannter Bug, der bereits auf der TODO-Liste
|
|
|
|
|
aufgenommen wurde
|
|
|
|
|
* der Bug wurde in der aktuellen Version behoben
|
|
|
|
|
* der Bug wurde bereits behoben, befindet sich aber noch nicht in
|
|
|
|
|
einer offiziell ver<65>ffentlichten Version
|
|
|
|
|
* es wird um eingehendere Informationen gebeten, z.B.:
|
|
|
|
|
+ Betriebssystem
|
|
|
|
|
+ PostgreSQL-Version
|
|
|
|
|
+ reproduzierbarer Fallbeispiel
|
|
|
|
|
+ Debugging-Information
|
|
|
|
|
+ Debugger-Backtrace-Ausgabe
|
|
|
|
|
* der Bug ist neu. Folgendes k<>nnte passieren:
|
|
|
|
|
+ ein Patch wird erstellt und in der n<>chsten Version
|
|
|
|
|
eingebaut;
|
|
|
|
|
+ oder der Bug kann nicht sofort behoben werden und wird auf
|
|
|
|
|
die TODO-Liste gesetzt
|
|
|
|
|
|
|
|
|
|
1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
|
|
|
|
|
|
|
|
|
|
PostgreSQL unterst<73>tzt eine erweiterte Teilmenge von SQL:2003. Siehe
|
|
|
|
|
unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html
|
|
|
|
|
f<>r eine Auflistung der bekannten Bugs, fehlenden Features und
|
|
|
|
|
zuk<75>nftigen Pl<50>ne.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Eine Anfrage nach einem neuen Feature f<>hrt normalerweise zu einer der
|
|
|
|
|
folgenden Antworten:
|
|
|
|
|
* das Feature ist bereits auf der TODO-Liste
|
|
|
|
|
* das Feature ist nicht w<>nschenswert, weil:
|
|
|
|
|
+ es vorhandene Funktionalit<69>t dupliziert, welche bereits dem
|
|
|
|
|
SQL-Standard folgt
|
|
|
|
|
+ es w<>rde die Komplexit<69>t der Code-Basis erh<72>hen, ohne
|
|
|
|
|
nennenswerte Vorteile zu bringen
|
|
|
|
|
+ es w<>re unsicher bzw. unzuverl<72>ssig
|
|
|
|
|
* das neue Feature wird der TODO-Liste hinzugef<65>gt
|
|
|
|
|
|
|
|
|
|
PostgreSQL verwendet kein Bugtracking-System, da es sich als
|
|
|
|
|
effizienter erwiesen hat, E-Mails direkt zu beantworten und die
|
|
|
|
|
TODO-Liste aktuell zu halten. In der Praxis werden Bugs sehr schnell
|
|
|
|
|
beseitigt, und diejenigen Bugs, die Auswirkungen auf eine gro<72>e Anzahl
|
|
|
|
|
von Nutzern haben, werden meist kurzfristig korrigiert. Der einzige
|
|
|
|
|
<20>berblick <20>ber alle <20>nderungen, Verbesserungen und Korrekturen in
|
|
|
|
|
einer PostgreSQL-Version befindet sich in den CVS-Log-Meldungen. Auch
|
|
|
|
|
die Release-Notes listen nicht jede <20>nderung in der Software auf.
|
|
|
|
|
|
|
|
|
|
1.10) Welche Dokumentation ist f<>r PostgreSQL verf<72>gbar?
|
|
|
|
|
|
|
|
|
|
PostgreSQL bietet umfangreiche Dokumentation, darunter ein gro<72>es
|
|
|
|
|
Handbuch, man-Pages und einige kleine Testprogramme. Siehe das /doc-
|
|
|
|
|
Verzeichnis. Ausserdem sind alle Handb<64>cher online unter
|
|
|
|
|
http://www.postgresql.org/docs/ verf<72>gbar.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Zwei B<>cher zu PostgreSQL sind online verf<72>gbar unter
|
2007-10-20 23:49:09 +08:00
|
|
|
|
http://www.postgresql.org/docs/books/awbook.html und
|
2002-10-23 05:44:51 +08:00
|
|
|
|
http://www.commandprompt.com/ppbook/ .
|
|
|
|
|
|
|
|
|
|
Eine Liste lieferbarer PostgreSQL-B<>cher befindet sich unter
|
2007-10-20 23:49:09 +08:00
|
|
|
|
http://www.postgresql.org/docs/books Diverse technische Artikel
|
|
|
|
|
befinden sich unter http://www.postgresql.org/docs/techdocs .
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
psql hat einige n<>tzliche \d-Befehle, um Informationen <20>ber Typen,
|
|
|
|
|
Operatoren, Funktionen, Aggregate, usw. zu zeigen.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Die PostgreSQL-Website enth<74>lt noch mehr Dokumentation.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
1.11) Wie kann ich SQL lernen?
|
|
|
|
|
|
|
|
|
|
Die oben erw<72>hnten PostgreSQL-spezifische B<>cher bieten einen guten
|
|
|
|
|
Einstieg. Viele PostgreSQL-Anwender m<>gen "The Practical SQL Handbook"
|
|
|
|
|
(Bowman et al., Addison Wesley). Andere dagegen m<>gen "The Complete
|
|
|
|
|
Reference SQL" (Groff et al., McGraw-Hill).
|
|
|
|
|
|
|
|
|
|
Es gibt ausserdem einige n<>tzliche Online-Tutorials:
|
|
|
|
|
* http://www.intermedia.net/support/sql/sqltut.shtm
|
|
|
|
|
* http://sqlcourse.com
|
|
|
|
|
* http://www.w3schools.com/sql/default.asp
|
|
|
|
|
* http://mysite.verizon.net/Graeme_Birchall/id1.html
|
|
|
|
|
|
|
|
|
|
1.12) Wie kann ich im Entwicklerteam mitarbeiten?
|
|
|
|
|
|
|
|
|
|
Lesen Sie in der Entwickler-FAQ unter
|
|
|
|
|
http://www.postgresql.org/docs/faqs.FAQ_DEV.html nach.
|
|
|
|
|
|
|
|
|
|
1.13) Wie l<>uft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
|
|
|
|
|
|
2000-09-14 10:21:31 +08:00
|
|
|
|
Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Performanz, Zuverl<72>ssigkeit, Support und Preis.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Eigenschaften
|
2007-10-20 23:49:09 +08:00
|
|
|
|
PostgreSQL besitzt die meisten Eigenschaften - wie
|
|
|
|
|
Transaktionen, Unterabfragen (Subqueries), Trigger, Views,
|
|
|
|
|
referenzielle Integrit<69>t bei Fremdschl<68>sseln und verfeinertes
|
|
|
|
|
Locking - die bei gro<72>en kommerziellen DBMS vorhanden sind. Es
|
|
|
|
|
bietet au<61>erdem einige anderen Eigenschaften, die diese nicht
|
|
|
|
|
immer haben, wie benutzerbestimmte Typen, Vererbung, Regeln,
|
|
|
|
|
und die Multi-Versionen-Steuerung zum Verringern
|
|
|
|
|
konkurrierender Locks.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Performanz
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Die Performanz von PostgreSQL ist mit der von kommerziellen und
|
|
|
|
|
anderen Open-Source-Datenbanken vergleichbar. In manchen
|
|
|
|
|
Bereichen ist es schneller, in anderen langsamer. In der Regel
|
|
|
|
|
betr<74>gt der Unterschied +/-10%.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Zuverl<72>ssigkeit
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht
|
|
|
|
|
zuverl<72>ssig arbeitet. Daher bem<65>hen wir uns, nur streng
|
|
|
|
|
gepr<70>ften und best<73>ndigen Code freizugeben, der nur ein Minimum
|
|
|
|
|
an Programmfehlern aufweist. Jede Freigabe hat mindestens einen
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Monat Betatest-Phase hinter sich, und unsere Freigabehistorie
|
2004-12-18 12:18:21 +08:00
|
|
|
|
beweist, dass wir stabile und solide Versionen freigeben, die
|
|
|
|
|
im Produktionsbetrieb genutzt werden k<>nnen. Wir glauben, dass
|
|
|
|
|
wir im Vergleich mit anderer Datenbanksoftware vorteilhaft
|
2002-10-23 05:44:51 +08:00
|
|
|
|
dastehen.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Support
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Unsere Mailinglisten bieten die M<>glichkeit, gemeinsam mit
|
|
|
|
|
einer gro<72>en Gruppe von Entwicklern und Benutzern m<>gliche
|
|
|
|
|
Probleme zu l<>sen. Wir k<>nnen nicht immer eine Fehlerbehebung
|
|
|
|
|
garantieren, kommerzielle DBMS tun dies aber auch nicht. Der
|
2004-12-18 12:18:21 +08:00
|
|
|
|
direkte Kontakt zur Entwickler- und Benutzergemeinschaft und
|
|
|
|
|
der Zugriff auf die Handb<64>cher und den Quellcode erm<72>glicht
|
|
|
|
|
einen im Vergleich zu anderen DBMS h<>herwertigeren Support. Es
|
2002-10-23 05:44:51 +08:00
|
|
|
|
gibt jedoch auch Anbieter von kommerziellen Support-Leistungen
|
2007-10-20 23:49:09 +08:00
|
|
|
|
(siehe FAQ-Punkt 1.7).
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Preis
|
2002-10-23 05:44:51 +08:00
|
|
|
|
PostgreSQL ist frei verf<72>gbar, sowohl f<>r die kommerzielle wie
|
2004-12-18 12:18:21 +08:00
|
|
|
|
auch f<>r die nicht-kommerzielle Nutzung. Sie k<>nnen den
|
2002-10-23 05:44:51 +08:00
|
|
|
|
PostgreSQL-Code ohne Einschr<68>nkungen (au<61>er denjenigen, die in
|
|
|
|
|
der oben angegebene BSD-artigen Lizenz erw<72>hnt werden) in Ihr
|
|
|
|
|
Produkt integrieren.
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
1.14) Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen
|
|
|
|
|
L<>ndern klar?
|
|
|
|
|
|
|
|
|
|
<20>nderungen bei der US-Sommerzeit sind ab PostgreSQL Version 8.0.4
|
|
|
|
|
ber<65>cksichtigt. <20>nderungen in Canada und Western Australia sind ab
|
|
|
|
|
8.0.10 bzw. 8.1.6 ber<65>cksichtigt. PostgreSQL-Versionen vor 8.0 nutzen
|
|
|
|
|
die Zeitzonendatenbank des Betriebssystems, um die Sommerzeit zu
|
|
|
|
|
berechnen.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Fragen zu Benutzerprogrammen
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
2.1) Welche Schnittstellen gibt es f<>r PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Die PostgreSQL-Installation stellt nur Schnittstellen f<>r C und
|
|
|
|
|
Embedded C bereit. Alle weitere Schnittstellen sind unabh<62>ngige
|
|
|
|
|
Projekte, die einzeln heruntergeladen werden werden m<>ssen. Diese
|
|
|
|
|
Trennung erm<72>glicht individuelle Entwickler-Teams und
|
|
|
|
|
Entwicklungszyklen f<>r die jeweiligen Projekte.
|
|
|
|
|
|
|
|
|
|
Einige Programmiersprachen wie PHP haben eine PostgreSQL-
|
|
|
|
|
Schnittstelle bereits eingebaut. Schnittstellen f<>r Sprachen wie Perl,
|
|
|
|
|
TCL, Python und viele anderen sind unter http://gborg.postgresql.org
|
|
|
|
|
im Bereich Drivers/Interfaces verf<72>gbar sowie per Internet-Suche.
|
|
|
|
|
|
|
|
|
|
2.2) Wie kann man PostgreSQL in einer Website nutzen?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Eine nette Einf<6E>hrung zu datenbank-gest<73>tzten Webseiten kann unter
|
2007-10-20 23:49:09 +08:00
|
|
|
|
http://www.webreview.com (engl.) eingesehen werden.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
F<>r die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP
|
|
|
|
|
gibt es bei http://www.php.net
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
F<>r komplexere Aufgaben bietet sich die Perl-Schnittstelle mit CGI.pm
|
|
|
|
|
oder mod_perl.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
|
|
|
|
|
|
|
|
|
|
Es gibt eine gro<72>e Anzahl von GUI-Programmen f<>r PostgreSQL - sowohl
|
|
|
|
|
kommerziell als auch Open-Source. Eine ausf<73>hrliche Liste befindet
|
|
|
|
|
sich unter http://www.postgresql.org/docs/techdocs.54 .
|
2000-09-14 10:21:31 +08:00
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Administrative Fragen
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Bei der Ausf<73>hrung von configure die Option --prefix mit dem
|
|
|
|
|
Zielverzeichnis angeben.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
3.2) Wie regle ich Zugriffe von anderen Rechnern?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
PostgreSQL ist standardm<64><6D>ig so eingestellt, dass Verbindungen nur vom
|
2007-10-20 23:49:09 +08:00
|
|
|
|
lokalen Rechner <20>ber Unix Domain Sockets bzw. TCP/IP m<>glich sind.
|
|
|
|
|
Verbindungen von anderen Rechnern werden erst dann erm<72>glicht, wenn
|
|
|
|
|
Sie in der Datei postgresql.conf die Einstellung listen_addresses
|
|
|
|
|
anpassen, in der Datei $PGDATA/pg_hba.conf host-basierte
|
|
|
|
|
Authentifizierung einschalten und den Server neu starten.
|
|
|
|
|
|
|
|
|
|
3.3) Wie kann ich eine bessere Performanz erreichen?
|
|
|
|
|
|
|
|
|
|
Es gibt drei gro<72>e Bereiche, in denen Performanzverbesserungen erzielt
|
|
|
|
|
werden k<>nnen:
|
|
|
|
|
|
|
|
|
|
Abfrageoptimierung
|
|
|
|
|
Die Modifizierung von Abfragen kann eine bessere Performanz
|
|
|
|
|
erzielen:
|
|
|
|
|
|
|
|
|
|
+ Erstellung von Indexen, einschliesslich partieller Indexe
|
|
|
|
|
sowie Expressionsindexe
|
|
|
|
|
+ Einsatz von COPY anstelle multipler INSERT-Anweisungen
|
|
|
|
|
+ Gruppierung von mehreren Abfragen innerhalb einer
|
|
|
|
|
Transaktion, um Aufwand beim Abschluss von Transaktionen
|
|
|
|
|
einzusparen
|
|
|
|
|
+ Einsatz von CLUSTER beim Holen von einer gro<72>en Anzahl von
|
|
|
|
|
Datenreihen aus einem Index
|
|
|
|
|
+ Einsatz von LIMIT, um eine Untermenge der Abfragen-
|
|
|
|
|
ergebnisse zur<75>ckzuliefern
|
|
|
|
|
+ Einsatz von vorbereiteten Befehlen (prepared queries)
|
|
|
|
|
+ Einsatz von ANALYZE, um die Datenbankstatistik f<>r den
|
|
|
|
|
Abfragenplaner aktuell zu halten
|
|
|
|
|
+ Regelm<6C><6D>iger Einsatz von VACUUM bzw. pg_autovacuum
|
|
|
|
|
+ Bei gro<72>en Datenver<65>nderungen die L<>schung von Indexen
|
|
|
|
|
|
|
|
|
|
Server-Konfiguration
|
|
|
|
|
Einige Einstellungen in der Datei postgresql.conf wirken auf
|
|
|
|
|
die Performanz aus. Das Handbuch enth<74>lt unter
|
|
|
|
|
http://www.postgresql.org/docs/current/static/runtime-config.ht
|
|
|
|
|
ml eine komplette Auflistung. Kommentare zu den jeweiligen
|
|
|
|
|
Einstellungen gibt es unter
|
|
|
|
|
http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co
|
|
|
|
|
nf_e.html und
|
|
|
|
|
http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
|
|
|
|
|
|
|
|
|
|
Hardware-Auswahl
|
|
|
|
|
Die Auswirkung von Hardware auf Performanz wird unter
|
|
|
|
|
http://momjian.us/main/writings/pgsql/hw_performance/index.html
|
|
|
|
|
und http://www.powerpostgresql.com/PerfList/ erl<72>utert.
|
|
|
|
|
|
|
|
|
|
3.4) Welche Debugging-Funktionen sind f<>r PostgreSQL verf<72>gbar?
|
|
|
|
|
|
|
|
|
|
Unter den Optionen f<>r die Server-Konfigurierung gibt es zahlreiche
|
|
|
|
|
log_*-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken
|
|
|
|
|
erm<72>glichen. Diese k<>nnen f<>r Debugging-Zwecke sowie Performanz-Tests
|
|
|
|
|
sehr n<>tzlich sein.
|
|
|
|
|
|
|
|
|
|
3.5) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
|
|
|
|
|
Verbindung aufzubauen versuche. Warum?
|
|
|
|
|
|
|
|
|
|
Ihr System hat die maximal zul<75>ssige Anzahl von Datenbankverbindungen
|
|
|
|
|
erreicht (Voreinstellung 100). Sie m<>ssen die maximale Anzahl der
|
|
|
|
|
gleichzeitig ausf<73>hrbaren Backend-Prozesse hochsetzen, indem Sie in
|
|
|
|
|
postgresql.conf den Wert max_connections <20>ndern und den Server
|
|
|
|
|
neustarten.
|
|
|
|
|
|
|
|
|
|
3.6) Wie wird PostgreSQL aktualisiert?
|
|
|
|
|
|
|
|
|
|
Allgemeine Informationen zur Aktualisierung von PostgreSQL gibt es auf
|
|
|
|
|
der Seite http://www.postgresql.org/support/versioning. Detaillierte
|
|
|
|
|
technische Informationen gibt es auf der Seite
|
|
|
|
|
http://www.postgresql.org/docs/current/static/install-upgrading.html
|
|
|
|
|
|
|
|
|
|
3.7) Welche Hardware eignet sich f<>r den Betrieb mit PostgreSQL?
|
|
|
|
|
|
2004-10-27 10:01:14 +08:00
|
|
|
|
PostgreSQL l<>uft auf fast jeder Hardware-Kombination. Im PC-Bereich
|
|
|
|
|
gibt es allerdings sehr gro<72>e Abweichungen in der Qualit<69>t. F<>r einen
|
|
|
|
|
Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend
|
|
|
|
|
sein, im Server-Betrieb jedoch lohnt sich auf jeden Fall die
|
|
|
|
|
Investition in teurere Bestandteile (Stichw<68>rter ECC-Speicher, SCSI,
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Hauptplatinen und Netzteile von namhaften Herstellern). Nutzen Sie
|
|
|
|
|
unsere Mailing-Listen, um Hardware-Optionen zu diskutieren.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Fragen zum Betrieb
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.1) Wie w<>hle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw. eine
|
|
|
|
|
beliebige Zeile in einer Abfrage aus?
|
|
|
|
|
|
|
|
|
|
Wenn Sie bei der Ausf<73>hrung der Abfrage die Anzahl der anzufordenden
|
|
|
|
|
Reihen bereits kennen, nutzen Sie LIMIT. Wenn die ORDER BY- Anweisung
|
|
|
|
|
mit einem Index verwendet wird, ist es m<>glich, dass die gesamte
|
|
|
|
|
Abfrage nicht ausgef<65>hrt werden muss. Wenn Sie die Anzahl der der
|
|
|
|
|
anzufordenden Reihen nicht kennen, verwenden Sie einen Cursor und
|
|
|
|
|
FETCH.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2003-06-07 06:21:35 +08:00
|
|
|
|
Um eine beliebige Zeile auszuw<75>hlen, nutzen Sie ORDER BY random():
|
|
|
|
|
SELECT spalte
|
|
|
|
|
FROM tabelle
|
|
|
|
|
ORDER BY random()
|
2004-12-18 12:18:21 +08:00
|
|
|
|
LIMIT 1
|
2003-06-07 06:21:35 +08:00
|
|
|
|
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.2) Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder Benutzer
|
|
|
|
|
in der Datenbank definiert sind? Wie bekomme ich die von psql verwendeten
|
|
|
|
|
Abfragen?
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere
|
2004-07-12 07:07:18 +08:00
|
|
|
|
psql-Befehle lassen sich mit \? anzeigen. Sie k<>nnen sich die Datei
|
|
|
|
|
pgsql/src/bin/psql/describe.c mit dem Quellcode f<>r psql ansehen. Sie
|
|
|
|
|
enth<74>lt die SQL-Abfragen, die die Backslash-Kommandos (\) ausf<73>hren.
|
|
|
|
|
Sie k<>nnen psql auch mit der -E Option starten. Danach gibt psql die
|
|
|
|
|
Abfragen aus, die es bei der Ausf<73>hrung der Befehle benutzt. Au<41>erdem
|
2005-01-17 10:42:31 +08:00
|
|
|
|
biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, das
|
2004-07-12 07:07:18 +08:00
|
|
|
|
Metainformation <20>ber die Datenbank zur Verf<72>gung stellt.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Mit psql -l k<>nnen Sie alle Datenbanken anzeigen lassen.
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
Die Datei pgsql/src/tutorial/syscat.source enth<74>lt au<61>erdem viele
|
|
|
|
|
SELECT- Abfragen, mit deren Hilfe man Information <20>ber die
|
|
|
|
|
Systemtabellen erhalten kann.
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.3) Wie <20>ndere ich den Datentyp einer Spalte?
|
|
|
|
|
|
|
|
|
|
Ab Version 8.0 kann der Datentyp einer Spalte mit ALTER TABLE ALTER
|
|
|
|
|
COLUMN TYPE ge<67>ndert werden, sofern der neue Datentyp die Werte des
|
|
|
|
|
alten Datentype aufnehmen kann.
|
|
|
|
|
|
|
|
|
|
Bei fr<66>heren Versionen gehen Sie wie folgt vor:
|
2003-06-07 06:21:35 +08:00
|
|
|
|
BEGIN;
|
|
|
|
|
ALTER TABLE tabelle ADD COLUMN neue_spalte neuer_datentyp;
|
|
|
|
|
UPDATE tabelle SET neue_spalte = CAST(alte_spalte AS neuer_datentyp);
|
|
|
|
|
ALTER TABLE tabelle DROP COLUMN alte_spalte;
|
|
|
|
|
COMMIT;
|
|
|
|
|
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Um den Speicherplatz freizugeben, der von der gel<65>schten Spalte
|
|
|
|
|
verwendet wurde, f<>hren Sie VACUUM FULL aus.
|
2003-06-07 06:21:35 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.4) Was ist die Maximalgr<67><72>e f<>r eine Zeile, eine Tabelle, eine Datenbank?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Es bestehen folgende Obergrenzen:
|
|
|
|
|
Maximale Gr<47><72>e eine Datenbank? unbeschr<68>nkt (es existieren
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Datenbanken mit 32 TB)
|
2004-01-09 09:51:31 +08:00
|
|
|
|
Maximale Gr<47><72>e einer Tabelle? 32 TB
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Maximale Gr<47><72>e einer Zeile? 400 GB
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Maximale Gr<47><72>e einer Spalte? 1 GB
|
|
|
|
|
Maximale Anzahl von Zeilen in einer Tabelle?
|
|
|
|
|
unbeschr<68>nkt
|
|
|
|
|
Maximale Anzahl von Spalten in einer Tabelle?
|
|
|
|
|
250-1600 je nach Spaltentyp
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Maximale Anzahl von Indexen f<>r eine Tabelle?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
unbeschr<68>nkt
|
|
|
|
|
|
|
|
|
|
Selbstverst<73>ndlich sind dies theoretische Werte, die oft durch die
|
2004-12-18 12:18:21 +08:00
|
|
|
|
verf<72>gbaren Platten- und Speicherressourcen beschr<68>nkt werden. Extreme
|
|
|
|
|
Gr<47><72>en k<>nnen zu Leistungseinbu<62>en f<>hren.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2004-01-09 09:51:31 +08:00
|
|
|
|
Die maximale Tabellengr<67><72>e von 32 TB ben<65>tigt keine
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Large-File-Unterst<73>tzung im Betriebssystem. Gro<72>e Tabellen werden in
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Dateien mit einer Gr<47><72>e von je 1 GB aufgeteilt, wodurch etwaige
|
2002-10-23 05:44:51 +08:00
|
|
|
|
dateisystem-bedingte Beschr<68>nkungen nicht relevant sind.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Die maximale Tabellengr<67><72>e und die maximale Anzahl von Spalten k<>nnen
|
2004-12-18 12:18:21 +08:00
|
|
|
|
vervierfacht werden, indem man die Default-Blockgr<67><72>e auf 32 KB
|
2007-10-20 23:49:09 +08:00
|
|
|
|
heraufsetzt. Die Tabellengr<67><72>e kann auch durch Tabellenpartitionierung
|
|
|
|
|
vergr<67><72>ert werden.
|
|
|
|
|
|
|
|
|
|
Eine Einschr<68>nkung ist, dass Indexe nur auf Spalten erstellt werden
|
|
|
|
|
k<>nnen, die bis etwa 2.000 Zeichen gro<72> sind. Um auf gr<67><72>ere Spalten
|
|
|
|
|
eine UNIQUE-Constraint setzen zu k<>nnen, nutzen Sie einen funktionalen
|
|
|
|
|
Index mit dem MD5-Hash-Wert der Spalte. Um innerhalb einer gro<72>en, mit
|
|
|
|
|
Text belegten Spalte suchen zu k<>nnen, verwenden Sie einen
|
|
|
|
|
Volltext-Index.
|
|
|
|
|
|
|
|
|
|
4.5) Wieviel Plattenplatz wird ben<65>tigt, um die Daten aus einer typischen
|
|
|
|
|
Textdatei abzuspeichern?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen
|
|
|
|
|
Textdatei bis zu f<>nfmal mehr Platz gegen<65>ber der eigentlichen Gr<47><72>e
|
|
|
|
|
der Datei beanspruchen.
|
|
|
|
|
|
|
|
|
|
Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und
|
|
|
|
|
einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die
|
|
|
|
|
durchschnittliche L<>nge der Textbeschreibung 20 Byte betr<74>gt. Die
|
|
|
|
|
einfache Datei w<>rde 2,8 MB gro<72> sein. Die Gr<47><72>e der
|
|
|
|
|
PostgreSQL-Datenbankdatei, die diese Daten enth<74>lt, liegt ungef<65>hr bei
|
2007-10-20 23:49:09 +08:00
|
|
|
|
5,2 MB:
|
|
|
|
|
24 Bytes: jeder Zeilenkopf (ungef<65>hr)
|
2002-10-23 05:44:51 +08:00
|
|
|
|
+24 Bytes: ein Integer-Feld und ein Textfeld
|
|
|
|
|
+ 4 Bytes: Zeiger auf der Datenseite auf den Tupel
|
2000-09-14 10:21:31 +08:00
|
|
|
|
-----------------------------------------------
|
2007-10-20 23:49:09 +08:00
|
|
|
|
52 Bytes pro Zeile
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Die Gr<47><72>e einer Datenseite in PostgreSQL betr<74>gt 8192 Bytes (8 KB),
|
|
|
|
|
also:
|
2000-09-14 10:21:31 +08:00
|
|
|
|
8192 Bytes pro Seite
|
2007-10-20 23:49:09 +08:00
|
|
|
|
--------------------- = 146 Zeilen pro Seite (abgerundet)
|
|
|
|
|
52 Bytes pro Zeile
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
100.000 Datenzeilen
|
2007-10-20 23:49:09 +08:00
|
|
|
|
------------------------ = 685 Datenbankseiten (aufgerundet)
|
|
|
|
|
158 Zeilen pro Seite
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
633 Datenbankseiten * 8192 Bytes pro Seite = 5,185,536 bytes (5,2 MB)
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Indexe beanspruchen nicht so viel Platz. Da sie jedoch die Daten
|
2002-10-23 05:44:51 +08:00
|
|
|
|
beinhalten, die sie indizieren, k<>nnen auch sie sehr gro<72> werden.
|
|
|
|
|
|
2004-03-09 01:38:31 +08:00
|
|
|
|
NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig
|
|
|
|
|
Platz in Anspruch nehmen.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.6) Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum?
|
|
|
|
|
|
|
|
|
|
Indexe werden nicht automatisch bei jeder Abfrage verwendet. Indexe
|
2002-10-23 05:44:51 +08:00
|
|
|
|
werden nur dann verwendet, wenn die abzufragende Tabelle eine
|
|
|
|
|
bestimmte Gr<47><72>e <20>bersteigt, und die Abfrage nur eine kleine
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Prozentzahl der Tabellenzeilen abfragt. Der Grund hierf<72>r ist der,
|
|
|
|
|
dass die durch einen Index verursachten Festplattenzugriffe manchmal
|
|
|
|
|
l<>nger dauern w<>rden als ein einfaches Auslesen aller Tabellenzeilen
|
|
|
|
|
(sequentieller Scan).
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
Um festzustellen, ob ein Index verwendet werden soll, braucht
|
|
|
|
|
PostgreSQL Statistiken <20>ber die Tabelle. Diese Statistiken werden
|
|
|
|
|
durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand
|
|
|
|
|
der Statistiken kennt der Abfragenoptimierer die Anzahl der
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Tabellenzeilen und kann besser entscheiden, ob Indexe verwendet werden
|
|
|
|
|
sollen. Statistiken sind auch bei der Ermittlung der optimalen
|
2004-12-18 12:18:21 +08:00
|
|
|
|
JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese
|
|
|
|
|
regelm<6C>ssig durchgef<65>hrt werden, da sich der Inhalt einer Tabelle ja
|
2007-10-20 23:49:09 +08:00
|
|
|
|
auch ver<65>ndert.
|
2004-10-27 10:01:14 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Indexe werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs
|
2002-10-23 05:44:51 +08:00
|
|
|
|
verwendet. Ein sequentieller Scan mit anschlie<69>endem explizitem
|
|
|
|
|
Sortiervorgang ist normalerweise schneller als ein Index-Scan einer
|
|
|
|
|
gro<72>en Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen
|
|
|
|
|
mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein
|
2007-10-20 23:49:09 +08:00
|
|
|
|
kleiner Abschnitt der Tabelle zur<75>ckgeliefert wird.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2003-02-18 13:08:12 +08:00
|
|
|
|
Sollte es danach aussehen, also ob der Optimierer irrt<72>mlich einen
|
|
|
|
|
sequentiellen Scan ausf<73>hrt, f<>hren Sie SET enable_seqscan TO 'off'
|
|
|
|
|
aus und pr<70>fen Sie, ob die Indexabfrage dadurch scheller geworden ist.
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, k<>nnen Indexe
|
|
|
|
|
nur unter bestimmten Umst<73>nden verwendet werden:
|
2004-12-18 12:18:21 +08:00
|
|
|
|
* Das Suchmuster muss sich an Anfang des Strings befinden, d.h.:
|
2002-10-23 05:44:51 +08:00
|
|
|
|
+ LIKE-Suchmuster d<>rfen nicht mit % anfangen;
|
|
|
|
|
+ ~ (regul<75>re Ausdr<64>cke) m<>ssen mit ^ anfangen.
|
|
|
|
|
* Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e])
|
2004-12-18 12:18:21 +08:00
|
|
|
|
beginnen.
|
2007-10-20 23:49:09 +08:00
|
|
|
|
* Suchmuster, die Gross- und Kleinschreibung nicht ber<65>cksichtigen
|
|
|
|
|
(z.B. ILIKE bzw. ~*), verwenden keine Indexe. Stattdessen k<>nnen
|
|
|
|
|
funktionale Indexe verwendet werden, die im Punkt 4.8 beschrieben
|
|
|
|
|
werden.
|
|
|
|
|
* Die Standard-Locale "C" muss w<>hrend der Datenbank-Initialisierung
|
|
|
|
|
mit initdb verwendet worden sein, da andere locales den
|
|
|
|
|
n<>chstgr<67><72>ten Wert nicht ermitteln k<>nnen. Es ist allerdings
|
|
|
|
|
m<>glich, einen besonderen text_pattern_ops-Index f<>r solche F<>lle
|
|
|
|
|
zu erstellen.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
In Versionen vor 8.0 werden Indexe oft nicht benutzt, wenn die
|
|
|
|
|
jeweiligen Datentypen nicht genau <20>bereinstimmen. Dies gilt besonders
|
|
|
|
|
f<>r Indexe auf Spalten mit den Datentypen INT2, INT8 und NUMERIC
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.7) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine
|
|
|
|
|
Abfrage auswertet?
|
|
|
|
|
|
2000-09-14 10:21:31 +08:00
|
|
|
|
Vgl. die EXPLAIN Man-Page.
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.8) Wie verfahre ich bei der Suche mit regul<75>ren Ausdr<64>cken und bei einer
|
|
|
|
|
Suche, bei der Gro<72>- und Kleinschreibweisen ignoriert werden? Wie verwende
|
|
|
|
|
ich einen Index bei solchen Suchabfragen?
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Der Operator ~ wendet einen regul<75>ren Ausdruck an und ~* wendet ihn
|
|
|
|
|
an, ohne die Gro<72>- und Kleinschreibung zu beachten. Ebenso beachtet
|
|
|
|
|
LIKE die Gro<72>- und Kleinschreibung, und ILIKE nicht.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
Gleichheitsvergleiche, die Gro<72>- und Kleinschreibung ignorieren,
|
|
|
|
|
werden in der Regel so ausgedruckt:
|
|
|
|
|
SELECT *
|
|
|
|
|
FROM tabelle
|
|
|
|
|
WHERE LOWER(spalte) = 'abc'
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Hier wird kein normaler Index benutzt. Legt man hingegen einen
|
2004-12-18 12:18:21 +08:00
|
|
|
|
funktionalen Index an, so wird er auf jeden Fall verwendet:
|
2002-10-23 05:44:51 +08:00
|
|
|
|
CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Falls der obige Index als einen UNIQUE-Index angelegt wird, k<>nnen
|
|
|
|
|
keine Werte in die Spalte eingef<65>gt werden, die sich nur durch ihre
|
|
|
|
|
Gro<72>- und Kleinschreibung unterscheiden. Um Fehler zu vermeiden mu<6D>
|
|
|
|
|
ein CHECK-Constraint oder ein Trigger eingesetzt werden.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.9) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? Kann nach der
|
|
|
|
|
NULL-Belegung sortiert werden?
|
|
|
|
|
|
|
|
|
|
Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.
|
|
|
|
|
SELECT *
|
|
|
|
|
FROM tabelle
|
|
|
|
|
WHERE spalte IS NULL
|
|
|
|
|
|
|
|
|
|
Um die Spalte danach zu sortieren, ob sie mit NULL belegt ist oder
|
|
|
|
|
nicht, verwenden Sie die Bedingungen IS NULL bzw. IS NOT NULL in der
|
|
|
|
|
ORDER BY-Klausel. Da Bedingungen, die wahr sind, h<>her als das
|
|
|
|
|
Gegenteil sortiert werden, bewirkt die folgende Abfrage, dass die
|
|
|
|
|
NULL-Spalten zuerst gelistet werden:
|
|
|
|
|
SELECT *
|
|
|
|
|
FROM tabelle
|
|
|
|
|
ORDER BY (spalte IS NOT NULL)
|
|
|
|
|
|
|
|
|
|
4.10) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Typ interner Name Bemerkungen
|
|
|
|
|
-------------------------------------------------
|
|
|
|
|
VARCHAR(n) varchar die Gr<47><72>e legt die Maximall<6C>nge fest; kein
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Auff<66>llen mit Leerzeichen
|
2003-02-18 13:08:12 +08:00
|
|
|
|
CHAR(n) bpchar mit Leerzeichen gef<65>llt bis zur angegebenen L<>nge
|
2004-12-18 12:18:21 +08:00
|
|
|
|
TEXT text keine obere Schranke f<>r die L<>nge
|
|
|
|
|
BYTEA bytea Bytearray mit variabler L<>nge (auch f<>r
|
|
|
|
|
'\0'-Bytes geeignet)
|
2003-02-18 13:08:12 +08:00
|
|
|
|
"char" char 1 Zeichen
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
Der interne Name kommt vor allem in den Systemkatalogen und in manchen
|
|
|
|
|
Fehlermeldungen vor.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2003-02-18 13:08:12 +08:00
|
|
|
|
Die ersten vier Typen sind "varlena"-Typen (d.h. die ersten vier Bytes
|
|
|
|
|
geben die L<>nge an, gefolgt von den Daten). Daher ist der tats<74>chlich
|
|
|
|
|
belegte Platz immer etwas mehr als die deklarierte Feldgr<67><72>e.
|
|
|
|
|
Allerdings wird unter Umst<73>nden auf diese Datentypen Datenkompression
|
|
|
|
|
durch das TOAST- Verfahren angewendet, womit der tats<74>chlich belegte
|
|
|
|
|
Platz auch geringer als erwartet ausfallen kann.
|
|
|
|
|
|
|
|
|
|
F<>r die Speicherung von Zeichenketten variabler L<>nge empfiehlt sich
|
|
|
|
|
VARCHAR(n). Die maximale L<>nge eines VARCHAR(n)-Felds wird bei der
|
|
|
|
|
Tabellendefinition festgelegt. TEXT setzt keine L<>ngengrenze,
|
|
|
|
|
allerdings gibt es eine systembedingte Obergrenze von 1 GB.
|
|
|
|
|
|
|
|
|
|
CHAR(n) ist geeignet f<>r die Speicherung von Zeichenketten, die alle
|
|
|
|
|
die gleiche L<>nge haben. Bitte beachten Sie, dass CHAR(n) automatisch
|
|
|
|
|
Zeichenketten bis zur definierten Feldl<64>nge mit Leerzeichen ausf<73>llt,
|
|
|
|
|
w<>hrend bei VARCHAR(n) nur die tats<74>chlich eingegebene Zeichenkette
|
|
|
|
|
gespeichert wird.
|
|
|
|
|
|
|
|
|
|
BYTEA ist f<>r bin<69>re Daten, besonders f<>r Werte, die NULL-Bytes haben.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Alle der hier erw<72>hnten Typen weisen <20>hnliche Performanzeigenschaften
|
|
|
|
|
auf.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.11.1) Wie erzeuge ich ein serielles Feld mit automatischer Erh<72>hung des
|
|
|
|
|
Wert?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
PostgreSQL bietet einen SERIAL-Datentyp. Dieser erzeugt automatisch
|
2004-01-09 09:51:31 +08:00
|
|
|
|
eine Sequenz auf die angegebene Spalte. Zum Beispiel:
|
2002-10-23 05:44:51 +08:00
|
|
|
|
CREATE TABLE person (
|
|
|
|
|
id SERIAL,
|
|
|
|
|
name TEXT
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
wird automatisch in:
|
|
|
|
|
CREATE SEQUENCE person_id_seq;
|
|
|
|
|
CREATE TABLE person (
|
|
|
|
|
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
|
|
|
|
|
name TEXT
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
umgewandelt.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Die create_sequence Man-Page liefert weitere Informationen <20>ber
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Sequenzen.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.11.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Eine M<>glichkeit w<>re, mit der nextval()-Funktion den n<>chsten
|
|
|
|
|
SERIAL-Wert von dem Sequenzobjekt vor der Auszuf<75>hrung einer
|
|
|
|
|
INSERT-Anweisung anzufordern und ihn dann explizit in die
|
2007-10-20 23:49:09 +08:00
|
|
|
|
INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.11.1
|
2002-10-23 05:44:51 +08:00
|
|
|
|
k<>nnte dieser Vorgang in einer Pseudosprache so aussehen:
|
|
|
|
|
new_id = output of execute("SELECT nextval('person_id_seq')");
|
|
|
|
|
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
|
|
|
|
|
|
|
|
|
|
Danach st<73>nde der neue Wert in der Variablen new_id f<>r die Verwendung
|
|
|
|
|
in weiteren Abfragen zur Verf<72>gung, zum Beispiel als Fremdschl<68>ssel
|
|
|
|
|
zur Tabelle 'person'). Bitte beachten Sie, dass der Name des
|
|
|
|
|
automatisch erstellten SEQUENCE-Objektes folgenden Name hat:
|
2007-10-20 23:49:09 +08:00
|
|
|
|
<20>table<6C>_<EFBFBD>serialcolumn<6D>_seq wobei 'table' und 'serialcolumn' die Namen
|
2002-10-23 05:44:51 +08:00
|
|
|
|
der jeweils betreffenden Tabelle / Spalte darstellen.
|
|
|
|
|
|
|
|
|
|
Als weitere M<>glichkeit k<>nnen Sie nach einer INSERT-Anweisung den
|
|
|
|
|
automatisch eingef<65>gten SERIAL-Wert mit der currval()-Funktion
|
|
|
|
|
zur<75>ckgeben lassen:
|
|
|
|
|
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
|
|
|
|
|
new_id = output of execute("SELECT currval('person_id_seq')");
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.11.3) F<>hrt currval() zu einer Race-Condition mit anderen Nutzern?
|
|
|
|
|
|
|
|
|
|
Nein. currval() liefert einen Wert zur<75>ck, der von Ihrer
|
|
|
|
|
Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur
|
|
|
|
|
Verf<72>gung steht.
|
|
|
|
|
|
|
|
|
|
4.11.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht
|
|
|
|
|
zur<75>ckgesetzt? Warum gibt es L<>cken in der Nummerierung meiner
|
|
|
|
|
Sequenz-/SERIAL-Spalte?
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern,
|
|
|
|
|
werden Sequenzen gerade nicht f<>r andere Transaktionen gesperrt,
|
|
|
|
|
sondern die Sequenznummern werden den laufenden Transaktionen sofort
|
|
|
|
|
zugeteilt. L<>cken in der Sequenznummerierung werden durch abgebrochene
|
|
|
|
|
Transaktionen verursacht.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.12) Was ist ein OID? Was ist ein CTID?
|
|
|
|
|
|
|
|
|
|
Jede Zeile, die in PostgreSQL erzeugt wird, bekommt eine eindeutige
|
|
|
|
|
OID, sofern die Tabelle nicht mit der Option WITHOUT OIDS angelegt
|
|
|
|
|
wurde. OIDs sind automatisch zugewiesene 4-Byte-Integer, die innerhalb
|
|
|
|
|
der gesamten Datenbank einmalig sind. Allerdings laufen sie bei einem
|
|
|
|
|
Wert von ungef<65>hr 4 Milliarden <20>ber. PostgreSQL verwendet OIDs, um
|
|
|
|
|
seine interne Systemtabellen zu verbinden.
|
|
|
|
|
|
|
|
|
|
Um einmalige Idenfikatoren in Datentabellen zu erstellen, wird
|
|
|
|
|
allerdings empfohlen, statt OIDs Werte zu verwenden, die vonSERIAL-
|
|
|
|
|
Sequenzen erzeugt werden. SERIAL-Sequenzen sind innerhalb einer
|
|
|
|
|
Tabelle einmalig und daher weniger anf<6E>llig f<>r <20>berl<72>ufe. Au<41>erdem
|
|
|
|
|
k<>nnen 8-Byte-Sequenzwerte mit SERIAL8 erzeugt werden.
|
|
|
|
|
|
|
|
|
|
CTIDs werden benutzt, um bestimmte physikalische Zeilen durch Block
|
|
|
|
|
und Offset Werte zu identifizieren. CTIDs ver<65>ndern sich, sobald
|
|
|
|
|
Zeilen ver<65>ndert oder zur<75>ckgeladen werden. Sie werden in
|
|
|
|
|
Indexeintr<74>gen benutzt um auf die physikalischen Zeilen zu zeigen.
|
|
|
|
|
|
|
|
|
|
4.13) Wieso bekomme ich einen Fehler: "ERROR: Memory exhausted in
|
|
|
|
|
AllocSetAlloc()"?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System
|
|
|
|
|
oder Ihr Kernel hat niedrige H<>chstgrenzen f<>r bestimmte Ressourcen.
|
|
|
|
|
Probieren Sie vor dem Start von postmaster folgendes:
|
|
|
|
|
ulimit -d 262144
|
|
|
|
|
limit datasize 256m
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich
|
|
|
|
|
ausgef<65>hrt werden. Auf jedem Fall wird die Grenze des Datensegments
|
|
|
|
|
f<>r Prozesse erh<72>ht werden und eventuell die erfolgreiche Ausf<73>hrung
|
|
|
|
|
der Abfrage erm<72>glichen. Falls Sie ein Problem mit dem SQL-CLient
|
|
|
|
|
haben, weil das Backend zu viele Daten zur<75>ckliefert, versuchen Sie
|
|
|
|
|
dies vor dem Start des SQL-Clients.
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.14) Wie kann ich feststellen, welche PostgreSQL-Version bei mir l<>uft?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Geben Sie in psql SELECT VERSION(); ein.
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.15) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die
|
|
|
|
|
aktuelle Uhrzeit enthalten soll?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Dazu verwenden Sie CURRENT_TIMESTAMP:
|
2007-10-20 23:49:09 +08:00
|
|
|
|
CREATE TABLE test (x INT, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.16) Wie f<>hre ich eine OUTER JOIN durch?
|
|
|
|
|
|
|
|
|
|
PostgreSQL unterst<73>tzt OUTER JOINs nach dem SQL- Standardsyntax. Hier
|
|
|
|
|
zwei Beispiele:
|
2002-10-23 05:44:51 +08:00
|
|
|
|
SELECT *
|
|
|
|
|
FROM tabelle_1 t1
|
|
|
|
|
LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)
|
|
|
|
|
|
|
|
|
|
bzw.:
|
|
|
|
|
SELECT *
|
|
|
|
|
FROM tabelle_1 t1
|
|
|
|
|
LEFT OUTER JOIN tabelle_2 t2 USING (spalte)
|
|
|
|
|
|
|
|
|
|
Diese identischen Abfragen verkn<6B>pfen tabelle_1 mit tabelle_2 <20>ber die
|
|
|
|
|
Spalte 'spalte' und geben au<61>erdem alle unverkn<6B>pften Zeilen in
|
|
|
|
|
tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)
|
2004-12-18 12:18:21 +08:00
|
|
|
|
zur<75>ck. Ein RIGHT JOIN w<>rde hingegen alle unverkn<6B>pften Zeilen in
|
|
|
|
|
tabelle_2 hinzuf<75>gen und ein FULL JOIN w<>rde alle verkn<6B>pften Zeilen
|
|
|
|
|
sowie jeweils alle unverkn<6B>pften Zeilen aus den beiden Tabellen
|
|
|
|
|
zur<75>ckliefern. Die Angabe von OUTER ist nicht zwingend und kann in
|
|
|
|
|
LEFT, RIGHT und FULL-Verkn<6B>pfungen weggelassen werden. Normale
|
|
|
|
|
Verkn<6B>pfungen sind INNER JOINs.
|
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.17) Wie kann ich Abfragen <20>ber mehrere Datenbanken hinweg ausf<73>hren?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine
|
|
|
|
|
Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische
|
|
|
|
|
Systemkataloge l<>dt, ist eine datenbank<6E>bergreifende Abfrage nicht
|
|
|
|
|
m<>glich.
|
|
|
|
|
|
2003-04-29 06:40:38 +08:00
|
|
|
|
contrib/dblink ist eine Erweiterung, die datenbank<6E>bergreifende
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Abfragen <20>ber Funktionsaufrufe erm<72>glicht.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
4.18) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion zur<75>ckgeben
|
|
|
|
|
lassen?
|
|
|
|
|
|
|
|
|
|
Funktionen k<>nnen mehrere Zeilen und Spalten zur<75>ckgeben, vgl.:
|
|
|
|
|
http://www.postgresql.org/docs/techdocs.17.
|
|
|
|
|
|
|
|
|
|
4.19) Warum bekomme ich eine Fehlermeldung wie "relation with OID ##### does
|
|
|
|
|
not exist" wenn ich tempor<6F>re Tabellen in PL/PgSQL-Funktionen benutze?
|
|
|
|
|
|
|
|
|
|
In PostgreSQL-Versionen vor 8.3 verarbeitet PL/PgSQL Funktionen in
|
|
|
|
|
einer Cache. Dies hat eine unangenehme Nebenwirkung, n<>mlich dass wenn
|
|
|
|
|
eine PL/PgSQL-Funktion auf eine tempor<6F>re Tabelle zugreift, und diese
|
|
|
|
|
Tabelle anschlie<69>end gel<65>scht bzw. neu erstellt wird, die Funktion
|
2004-12-18 12:18:21 +08:00
|
|
|
|
fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte
|
2007-10-20 23:49:09 +08:00
|
|
|
|
tempor<6F>re Tabelle zeigen. Die L<>sung f<>r diese Probleme besteht darin,
|
|
|
|
|
in der PL/PgSQL- Funktion mittels EXECUTE auf tempor<6F>re Tabellen
|
|
|
|
|
zuzugreifen. Dies bewirkt, dass bei jedem Funktionsruf die betreffende
|
|
|
|
|
Abfrage neu geparst wird.
|
|
|
|
|
|
|
|
|
|
Dieses Problem taucht in PostgreSQL 8.3 und sp<73>teren Versionen nicht
|
|
|
|
|
mehr auf.
|
|
|
|
|
|
|
|
|
|
4.20) Welche Replikationsl<73>sungen gibt es?
|
|
|
|
|
|
|
|
|
|
Der Begriff "replikation" umfasst mehrere verschiedene Technologien,
|
|
|
|
|
jede mit eigenen Vor- und Nachteilen.
|
|
|
|
|
|
|
|
|
|
Mit "Master/slave"-Replikation werden <20>nderungen in einer
|
|
|
|
|
Hauptdatenbank durchgef<65>hrt und an "Sklaven" verteilt, die im
|
|
|
|
|
Nur-Lese-Modus arbeiten. Die popul<75>rste L<>sung f<>r PostgreSQL ist
|
|
|
|
|
Slony-I.
|
|
|
|
|
|
|
|
|
|
"Multi-master replication" erm<72>glicht sowohl lesende als auch
|
|
|
|
|
schreibende Zugriffe <20>ber mehrere Datenbank-Server hinweg. Allerdings
|
|
|
|
|
hat diese Art von Replikation eine negative Auswirkung auf die
|
|
|
|
|
Performanz durch die Notwendigkeit, <20>nderungen zwischen Servern zu
|
|
|
|
|
synchronisieren. Pgcluster ist die popul<75>rste freie L<>sung f<>r
|
|
|
|
|
PostgreSQL.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Es gibt auch einige kommerzielle und hardware-basierte
|
|
|
|
|
Replikationsl<73>sungen f<>r verschiedene Arten der Replikation.
|
|
|
|
|
|
|
|
|
|
4.21) Warum werden die Tabellen- und Spaltennamen in meiner Abfrage nicht
|
|
|
|
|
erkannt? Warum werden Gro<72>buchstaben umgewandelt?
|
|
|
|
|
|
|
|
|
|
Die h<>ufigste Ursache ist die Verwendung von G<>nsef<65><66>chen bei der
|
|
|
|
|
Anlegung von Tabellen, z.B.:
|
|
|
|
|
CREATE TABLE "Tabelle"
|
|
|
|
|
("SPALTE1" INT)
|
|
|
|
|
|
|
|
|
|
Dadurch werden Tabellen- und Spaltennamen (sog. Identifikatoren) in
|
|
|
|
|
genau der Schreibweise gespeichert (vgl. Dokumentation), was dazu
|
|
|
|
|
f<>hrt, dass man sie danach immer in G<>nsef<65><66>chen angeben muss. Im
|
|
|
|
|
obigen Beispiel muss man also immer etwa SELECT * FROM "Tabelle"
|
|
|
|
|
verwenden. Um dieses Problem zu vermeiden, m<>ssen Sie immer eines der
|
|
|
|
|
folgenden Punkte beachten:
|
|
|
|
|
* bei der Tabellenanlegung keine G<>nsef<65><66>chen verwenden;
|
|
|
|
|
* in Identifikatoren nur Kleinschreibung verwenden;
|
|
|
|
|
* immer Identifikatoren mit G<>nsef<65><66>chen versehen
|
2002-10-23 05:44:51 +08:00
|
|
|
|
_________________________________________________________________
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2007-10-20 23:49:09 +08:00
|
|
|
|
Anmerkungen des <20>bersetzers
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Die englische Vorlage dieser FAQ wird st<73>ndig <20>berarbeitet. Daher
|
|
|
|
|
liegt die <20>bersetzung nicht immer auf dem aktuellsten Stand.
|
|
|
|
|
|
2003-09-04 04:28:14 +08:00
|
|
|
|
Die aktuellste Version der deutschen <20>bersetzung befindet sich immer
|
2004-12-18 12:18:21 +08:00
|
|
|
|
unter http://sql-info.de/de/postgresql/FAQ_german.html. Diese
|
2003-09-04 04:28:14 +08:00
|
|
|
|
"Arbeitsversion" enth<74>lt eventuell <20>nderungen, die noch nicht auf der
|
|
|
|
|
PostgreSQL-Website eingebunden worden sind.
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
<20>ber Verbesserungshinweise und Korrekturvorschl<68>ge sowie
|
|
|
|
|
Verst<73>ndnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch
|
2003-09-04 04:28:14 +08:00
|
|
|
|
allgemeine Fragen zu PostgreSQL gerne entgegen, verweise jedoch auf
|
|
|
|
|
die Mailing-Listen als schnelle und zuverl<72>ssige Anlaufstellen.
|