2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
H<>ufig gestellte Fragen (FAQ) zu PostgreSQL
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us).
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Deutsche <20>bersetzung von Ian Barwick (barwick@gmx.net).
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
Letzte Aktualisierung der deutschen <20>bersetzung: So., den 16.1.2005,
|
2004-10-27 10:01:14 +08:00
|
|
|
|
22:30 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:
|
2005-01-17 10:42:31 +08:00
|
|
|
|
* http://www.postgresql.org/files/documentation/faqs/FAQ.html
|
|
|
|
|
(engl.)
|
|
|
|
|
* http://www.postgresql.org/files/documentation/faqs/FAQ_german.html
|
|
|
|
|
(dt.)
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
<20>bersetzungen dieses Dokuments in andere 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?
|
|
|
|
|
1.2) Welchem Copyright unterliegt PostgreSQL?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
1.3) Auf welchen Unix-Plattformen l<>uft PostgreSQL?
|
|
|
|
|
1.4) Welche Nicht-Unix-Versionen sind verf<72>gbar?
|
|
|
|
|
1.5) Woher bekomme ich PostgreSQL?
|
|
|
|
|
1.6) Wo bekomme ich Support f<>r PostgreSQL?
|
|
|
|
|
1.7) Was ist die neueste Version von PostgreSQL?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
1.8) Welche Dokumentation ist f<>r PostgreSQL verf<72>gbar?
|
|
|
|
|
1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
1.10) Wie kann ich SQL lernen?
|
|
|
|
|
1.11) Ist PostgreSQL Y2K (Jahr 2000) f<>hig?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
1.12) Wie kann ich im Entwicklerteam mitarbeiten?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
1.13) Wie sende ich einen Fehler-Bericht?
|
|
|
|
|
1.14) Wie l<>uft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
1.15) Wie kann ich PostgreSQL finanziell unterst<73>tzen?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Fragen zu Benutzerprogrammen
|
|
|
|
|
|
|
|
|
|
2.1) Gibt es ODBC-Treiber f<>r PostgreSQL?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
2.2) Welche Werkzeuge gibt es, um Web-Seiten mit PostgreSQL zu
|
|
|
|
|
verbinden?
|
2002-12-18 12:46:17 +08:00
|
|
|
|
2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
2.4) Welche Programmiersprachen k<>nnen mit PostgreSQL kommunizieren?
|
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?
|
|
|
|
|
3.2) Wenn ich den postmaster starte, erhalte ich die Nachricht "Bad
|
|
|
|
|
System Call" bzw. "core dumped". Warum?
|
|
|
|
|
3.3) Wenn ich versuche, den postmaster zu starten, bekomme ich
|
|
|
|
|
"IpcMemoryCreate"-Fehlermeldungen. Warum?
|
|
|
|
|
3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich
|
|
|
|
|
"IpcSemaphoreCreate"-Fehlermeldungen. Warum?
|
|
|
|
|
3.5) Wie regle ich Zugriffe von anderen Rechnern?
|
|
|
|
|
3.6) Wie optimiere ich die Datenbank f<>r bessere Leistung?
|
|
|
|
|
3.7) Welche Debugging-Funktionen sind bei PostgreSQL verf<72>gbar?
|
|
|
|
|
3.8) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
|
|
|
|
|
Verbindung aufzubauen versuche. Warum?
|
|
|
|
|
3.9) Was befindet sich im Verzeichnis pgsql_tmp/?
|
|
|
|
|
3.10) Warum mu<6D> ich bei jeder neuen Hauptversion von PostgreSQL die
|
|
|
|
|
komplette Datenbank exportieren und anschlie<69>end reimportieren?
|
2004-10-27 10:01:14 +08:00
|
|
|
|
3.11) Welche Hardware eignet sich f<>r den Betrieb mit PostgreSQL?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Fragen zum Betrieb
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
4.1) Worin besteht der Unterschied zwischen Binary Cursors und Normal
|
|
|
|
|
Cursors?
|
2003-06-07 06:21:35 +08:00
|
|
|
|
4.2) Wie w<>hle ich per SELECT-Anweisung nur die ersten paar Zeilen
|
|
|
|
|
bzw. eine beliebige Zeile in einer Abfrage aus?
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.3) Wie finde ich heraus, welche Tabellen, Indizes, Datenbanken oder
|
|
|
|
|
Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql
|
|
|
|
|
verwendeten Abfragen?
|
2003-06-07 06:21:35 +08:00
|
|
|
|
4.4) Wie entferne ich eine Spalte aus einer Tabelle? Wie <20>ndere ich
|
|
|
|
|
den Datentyp einer Spalte?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
4.5) Was ist die Maximalgr<67><72>e f<>r eine Zeile, eine Tabelle, eine
|
2000-09-14 10:21:31 +08:00
|
|
|
|
Datenbank?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
4.6) Wieviel Plattenplatz wird ben<65>tigt, um die Daten aus einer
|
|
|
|
|
typischen Textdatei abzuspeichern?
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.7) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?
|
|
|
|
|
4.8) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer
|
2002-10-23 05:44:51 +08:00
|
|
|
|
("GEQO") meine Abfrage auswertet?
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.9) Was ist ein R-Tree Index?
|
|
|
|
|
4.10) Was ist der "Genetic Query Optimizer"?
|
|
|
|
|
4.11) 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?
|
|
|
|
|
Wie verwende ich bei solchen Suchabfragen einen Index?
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.12) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
|
|
|
|
|
4.13) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
|
|
|
|
|
4.14.1) Wie erzeuge ich ein serielles Feld mit automatischer Erh<72>hung
|
2002-10-23 05:44:51 +08:00
|
|
|
|
des Wertes?
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.14.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
|
|
|
|
|
4.14.3) F<>hrt currval() zu einer Race-Condition mit anderen Nutzern?
|
|
|
|
|
4.14.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?
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.15) Was ist ein OID? Was ist ein TID?
|
|
|
|
|
4.16) Welche Bedeutung haben die verschiedenen Ausdr<64>cke, die in
|
2000-09-14 10:21:31 +08:00
|
|
|
|
PostgreSQL benutzt werden (z.B. attribute, class,...)?
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.17) Wieso bekomme ich den Fehler: "FATAL: Memory exhausted in
|
2002-10-23 05:44:51 +08:00
|
|
|
|
AllocSetAlloc()"?
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.18) Wie kann ich feststellen, welche PostgreSQL-Version bei mir
|
2002-10-23 05:44:51 +08:00
|
|
|
|
l<>uft?
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.19) Bei "large-object"-Operationen kommt die Fehlermeldung: "invalid
|
2002-10-23 05:44:51 +08:00
|
|
|
|
large obj descriptor". Warum?
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.20) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die
|
2002-10-23 05:44:51 +08:00
|
|
|
|
aktuelle Uhrzeit enthalten soll?
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.21) Warum sind meine Unterabfragen (subqueries), die IN verwenden,
|
2002-10-23 05:44:51 +08:00
|
|
|
|
so langsam?
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.22) Wie f<>hre ich einen OUTER JOIN durch?
|
|
|
|
|
4.23) Wie kann ich Abfragen <20>ber mehrere Datenbanken hinweg ausf<73>hren?
|
|
|
|
|
4.24) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
|
2002-10-23 05:44:51 +08:00
|
|
|
|
zur<75>ckgeben lassen?
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.25) Warum kann ich tempor<6F>re Tabellen in PL/PgSQL-Funktionen nicht
|
2002-10-23 05:44:51 +08:00
|
|
|
|
zuverl<72>ssig erstellen bzw. l<>schen?
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.26) Welche M<>glichkeiten zur Verschl<68>sselung gibt es?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
PostgreSQL erweitern
|
|
|
|
|
|
|
|
|
|
5.1) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich
|
|
|
|
|
sie in psql aufrufe, kommt ein core dump. Warum?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
5.2) Wie kann ich praktische neue Typen und Funktionen zu PostgreSQL
|
|
|
|
|
hinzuf<75>gen?
|
|
|
|
|
5.3) Wie schreibe ich eine Funktion in C, die einen Tupel
|
|
|
|
|
zur<75>ckliefert?
|
|
|
|
|
5.4) Ich habe eine der Quellendateien ge<67>ndert. Warum macht sich die
|
|
|
|
|
<20>nderung beim erneuten Kompilieren nicht bemerkbar?
|
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?
|
|
|
|
|
|
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.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
PostgreSQL ist eine Weiterentwicklung des POSTGRES-Datenbank-Systems,
|
|
|
|
|
eines zukunftsweisenden DBMS-Forschungsprototyps. W<>hrend PostgreSQL
|
|
|
|
|
das leistungsf<73>hige Datenmodell und die reichhaltigen Datentypen von
|
|
|
|
|
POSTGRES beibeh<65>lt, ersetzt es dessen PostQuel-Abfragesprache durch
|
|
|
|
|
eine erweiterte Teilmenge von SQL. PostgreSQL und dessen kompletter
|
|
|
|
|
Quellcode sind frei und <20>ffentlich verf<72>gbar.
|
|
|
|
|
|
|
|
|
|
Die PostgreSQL-Entwicklung wird von einem Entwickler-Team
|
|
|
|
|
durchgef<65>hrt, die alle Teilnehmer der
|
|
|
|
|
PostgreSQL-Entwicklungs-Mailingliste sind. Der aktuelle Koordinator
|
2004-12-18 12:18:21 +08:00
|
|
|
|
ist Marc G. Fournier (scrappy@postgresql.org) (Anmeldem<65>glichkeit:
|
2002-10-23 05:44:51 +08:00
|
|
|
|
siehe unten). Dieses Team ist f<>r die Gesamtentwicklung von PostgreSQL
|
2004-03-09 01:38:31 +08:00
|
|
|
|
verantwortlich. Es handelt sich um ein Gemeinschaftsprojekt, das nicht
|
|
|
|
|
von einer bestimmten Firma kontrolliert wird. Lesen Sie die
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Entwickler-FAQ: http://www.postgresql.org/docs/faqs/FAQ_DEV.html wenn
|
2004-03-09 01:38:31 +08:00
|
|
|
|
Sie an einer Mitarbeit interessiert sind.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Die Autoren von PostgreSQL 1.01 waren Andrew Yu und Jolly Chen. Viele
|
2002-10-23 05:44:51 +08:00
|
|
|
|
andere haben zur Portierung, zum Testen, zur Fehlersuche und zur
|
2000-09-14 10:21:31 +08:00
|
|
|
|
Verbesserung des Codes beigetragen. Der urspr<70>ngliche Postgres-Code,
|
2002-10-23 05:44:51 +08:00
|
|
|
|
von dem PostgreSQL abstammt, ist auf die Arbeit von vielen
|
|
|
|
|
Studierenden und Diplomanden sowie Programmierern zur<75>ckzuf<75>hren, die
|
|
|
|
|
unter der Leitung des Professors Michael Stonebraker an der
|
|
|
|
|
Universit<69>t von Kalifornien, Berkeley arbeiteten.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Der urspr<70>ngliche Name der Software in Berkeley war Postgres. Als die
|
2000-09-14 10:21:31 +08:00
|
|
|
|
SQL-Funktionalit<69>t 1995 hinzugef<65>gt wurde, wurde sein Name zu
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Postgres95 erweitert. Der Name wurde Ende 1996 in PostgreSQL ge<67>ndert.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
1.2).Welchem Copyright unterliegt PostgreSQL?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
PostgreSQL unterliegt folgendem COPYRIGHT (Originaltext):
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
PostgreSQL Data Base Management System
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
Portions Copyright (c) 1996-2005, 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
|
|
|
|
Bei der obigen Lizenz handelt es sich um die BSD-Lizenz, die klassiche
|
|
|
|
|
Open-Source-Lizenz. Sie schr<68>nkt die Verwendung des Quellcodes in
|
|
|
|
|
keine Weise ein. Wir m<>gen diese Lizenz und haben nicht vor, sie zu
|
|
|
|
|
<20>ndern.
|
|
|
|
|
|
|
|
|
|
Es gilt die Copyright-Klausel im Original!
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
1.3) Auf welchen Unix-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
|
|
|
|
|
Installations- Anleitungen aufgelistet.
|
|
|
|
|
|
|
|
|
|
1.4) Welche Nicht-Unix-Portierungen sind verf<72>gbar?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2004-10-27 10:01:14 +08:00
|
|
|
|
Ab Version 8.0 l<>uft PostgreSQL auf Microsoft NT-basierten
|
|
|
|
|
Betriebssystemen wie Windows 2000, XP und Server 2003. Ein
|
|
|
|
|
vorgefertigtes Installationspaket (derzeit noch im Beta-Stadium) kann
|
|
|
|
|
von http://pgfoundry.org/projects/pginstaller heruntergeladen werden.
|
|
|
|
|
Einen <20>berblick <20>ber den aktuellen Stand bietet die Win32-FAQ:
|
|
|
|
|
http://pginstaller.projects.postgresql.org/FAQ_windows.html.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2004-10-27 10:01:14 +08:00
|
|
|
|
Unter Windows 95/98/ME ist es nur m<>glich, den Datenbankserver mit
|
|
|
|
|
Hilfe der Cygwin-Umgebung (Unix-Portierungsbibliotheken) zu betreiben.
|
|
|
|
|
Weitere Informationen hierzu gibt es in der CYGWIN-FAQ:
|
2004-12-18 12:18:21 +08:00
|
|
|
|
http://www.postgresql.org/docs/faqs/text/FAQ_CYGWIN.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2003-04-29 06:40:38 +08:00
|
|
|
|
Eine Portierung f<>r Novell Netware 6 gibt es unter
|
|
|
|
|
http://forge.novell.com.
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
F<>r OS/2 (eComStation) gibt es eine Version hier:
|
|
|
|
|
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
|
|
|
|
|
SQL&stype=all&sort=type&dir=%2F
|
|
|
|
|
|
2000-09-14 10:21:31 +08:00
|
|
|
|
1.5) Woher bekomme ich PostgreSQL?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Der zentrale FTP-Server f<>r PostgreSQL ist der ftp-Server
|
2004-12-18 12:18:21 +08:00
|
|
|
|
ftp://ftp.postgresql.org/pub/. Weitere Mirror-Sites sind auf der
|
2002-10-23 05:44:51 +08:00
|
|
|
|
PostgreSQL-Website aufgelistet.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
1.6) Wo bekomme ich Support f<>r PostgreSQL?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Die zentrale (englischsprachige) Mailing-Liste ist:
|
2004-12-18 12:18:21 +08:00
|
|
|
|
mailto:pgsql-general@postgresql.org .
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
Die Liste ist Themen vorbehalten, die PostgreSQL betreffen. Die
|
|
|
|
|
Anmeldung erfolgt mit einer Email an die Adresse
|
2004-12-18 12:18:21 +08:00
|
|
|
|
pgsql-general-request@postgresql.org mit folgenden Zeilen im Text
|
2002-10-23 05:44:51 +08:00
|
|
|
|
(nicht in der Betreffzeile):
|
|
|
|
|
subscribe
|
|
|
|
|
end
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Es gibt auch eine Digest-Liste (eine Liste, die Mails zusammengefasst
|
|
|
|
|
sendet). Um sich an dieser Digest-Liste anzumelden, senden Sie eine
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Email an pgsql-general-digest-request@postgresql.org mit folgendem
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Text:
|
|
|
|
|
subscribe
|
|
|
|
|
end
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Es gibt noch die Bug-Mailingliste. Die Anmeldung f<>r diese Liste
|
2004-12-18 12:18:21 +08:00
|
|
|
|
erfolgt durch eine Email an bugs-request@postgresql.org mit folgendem
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Text:
|
|
|
|
|
subscribe
|
|
|
|
|
end
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Die Entwickler-Mailingliste kann mit einer Email an
|
2004-12-18 12:18:21 +08:00
|
|
|
|
pgsql-hackers-request@postgresql.org abonniert werden. Die Email mu<6D>
|
2002-10-23 05:44:51 +08:00
|
|
|
|
ebenfalls folgenden Text enthalten:
|
|
|
|
|
subscribe
|
|
|
|
|
end
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Eine deutschsprachige Mailing-Liste gibt es ebenfalls:
|
|
|
|
|
http://archives.postgresql.org/pgsql-de-allgemein/; die Liste kann
|
|
|
|
|
hier abonniert werden.
|
2003-03-11 00:06:41 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Weitere Mailinglisten und Informationen zu PostgreSQL befinden sich
|
|
|
|
|
auf der PostgreSQL-Homepage:
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
http://www.postgresql.org
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2004-01-09 09:51:31 +08:00
|
|
|
|
Es gibt au<61>erdem einen IRC-Channel bei EFNet und bei Freenode, Channel
|
|
|
|
|
#PostgreSQL. Unter UNIX/Linux k<>nnen Sie mit z.B. irc -c '#PostgreSQL'
|
2004-12-18 12:18:21 +08:00
|
|
|
|
"$USER" irc.freenode.net. bzw. irc -c '#PostgreSQL' "$USER"
|
|
|
|
|
irc.phoenix.net daran teilnehmen.
|
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
|
2003-07-24 01:08:04 +08:00
|
|
|
|
http://techdocs.postgresql.org/companies.php eingesehen werden.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
1.7) Was ist die neueste Version von PostgreSQL?
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
Die neueste Version von PostgreSQL ist 8.0.0 .
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2004-10-27 10:01:14 +08:00
|
|
|
|
Die Freigabe einer neuen Version erfolgt im Schnitt alle 6 bis 8
|
2004-07-12 07:07:18 +08:00
|
|
|
|
Monaten.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
1.8) Welche Dokumentation ist f<>r PostgreSQL verf<72>gbar?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Einige Handb<64>cher, Man-Pages und einige kleine Testprogramme sind in
|
2002-10-23 05:44:51 +08:00
|
|
|
|
der Distribution enthalten. Siehe das /doc-Verzeichnis. Ausserdem sind
|
2004-12-18 12:18:21 +08:00
|
|
|
|
alle Handb<64>cher online unter http://www.postgresql.org/docs/
|
2003-03-11 00:06:41 +08:00
|
|
|
|
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
|
2004-12-18 12:18:21 +08:00
|
|
|
|
http://www.postgresql.org/docs/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
|
2004-12-18 12:18:21 +08:00
|
|
|
|
http://techdocs.postgresql.org/techdocs/bookreviews.php Diverse
|
|
|
|
|
technische Artikel befinden sich unter http://techdocs.postgresql.org/
|
2003-06-07 06:21:35 +08:00
|
|
|
|
.
|
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
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
PostgreSQL unterst<73>tzt eine erweiterte Teilmenge von SQL-92. Siehe
|
2005-05-12 00:13:20 +08:00
|
|
|
|
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
|
|
|
|
|
|
|
|
|
1.10) Wie kann ich SQL lernen?
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Das PostgreSQL Book auf http://www.postgresql.org/docs/awbook.html
|
2002-10-23 05:44:51 +08:00
|
|
|
|
bietet eine Einf<6E>hrung in SQL. Ein weiteres PostgreSQL-Buch befindet
|
|
|
|
|
sich unter http://www.commandprompt.com/ppbook . Es gibt zudem nette
|
|
|
|
|
Tutorials unter http://www.intermedia.net/support/sql/sqltut.shtm ,
|
|
|
|
|
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
|
|
|
|
|
und http://sqlcourse.com .
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Eine weitere Empfehlung ist "Teach Yourself SQL in 21 Days, Second
|
|
|
|
|
Edition", es ist unter http://members.tripod.com/er4ebus/sql/index.htm
|
|
|
|
|
erh<72>ltlich.
|
|
|
|
|
|
|
|
|
|
Viele PostgreSQL-Anwender m<>gen "The Practical SQL Handbook" (Bowman
|
|
|
|
|
et al., Addison Wesley). Andere dagegen m<>gen "The Complete Reference
|
|
|
|
|
SQL" (Groff et al., McGraw-Hill).
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
1.11) Ist PostgreSQL Y2K (Jahr 2000) f<>hig?
|
|
|
|
|
|
|
|
|
|
Ja, wir k<>nnen Datumsangaben nach dem Jahr 2000 n.Chr. und vor 2000
|
|
|
|
|
v.Chr. leicht verarbeiten.
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
1.12) Wie kann ich im Entwicklerteam mitarbeiten?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Zuerst laden Sie die neuesten Quellen herunter und lesen Sie die
|
2000-09-14 10:21:31 +08:00
|
|
|
|
PostgreSQL-Entwicklerunterlagen auf unserer Website oder in der
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Distribution. Dann melden Sie sich zu den Entwickler-Mailinglisten
|
|
|
|
|
pgsql-hackers und pgsql-patches an. Anschlie<69>end senden Sie qualitativ
|
|
|
|
|
hochwertige Patches an die pgsql-patches Mailingliste.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Es gibt ungef<65>hr ein Dutzend Leute, die das commit-Recht im PostgreSQL
|
|
|
|
|
CVS-Archiv haben. Alle haben derart viele hochwertige Patches
|
|
|
|
|
eingebracht, dass es f<>r die CVS-Verwalter schwer war, mitzuhalten.
|
|
|
|
|
Und wir hatten Vertrauen, dass die von ihnen festgelegten <20>nderungen
|
|
|
|
|
aller Wahrscheinlichkeit nach von hoher Qualit<69>t sind.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
1.13) Wie sende ich einen Fehlerbericht?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Bitte besuchen Sie die PostgreSQL-BugTool-Seite
|
2004-12-18 12:18:21 +08:00
|
|
|
|
http://www.postgresql.org/bugform.html, die Hinweise und Anleitungen
|
|
|
|
|
zur Einreichung von Fehlerberichten enth<74>lt.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
<20>berpr<70>fe auch den ftp-Server ftp://ftp.postgresql.org/pub/, um
|
2000-09-14 10:21:31 +08:00
|
|
|
|
nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches
|
|
|
|
|
gibt.
|
|
|
|
|
|
|
|
|
|
1.14) Wie l<>uft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
|
|
|
|
|
|
|
|
|
|
Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Performanz, Zuverl<72>ssigkeit, Support und Preis.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Eigenschaften
|
2002-10-23 05:44:51 +08:00
|
|
|
|
PostgreSQL besitt die meisten Eigenschaften - wie
|
|
|
|
|
Transaktionen, Unterabfragen (Subqueries), Trigger, Views und
|
|
|
|
|
verfeinertes Locking - die bei gro<72>en kommerziellen DBMS
|
|
|
|
|
vorhanden sind. Es bietet au<61>erdem einige anderen
|
2004-12-18 12:18:21 +08:00
|
|
|
|
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
|
|
|
|
|
PostgreSQL weist eine Performanz auf, die mit der von
|
|
|
|
|
kommerziellen und anderen Open-Source-Datenbanken vergleichbar
|
|
|
|
|
ist. In manchen Bereichen ist es schneller, in anderen
|
2004-01-09 09:51:31 +08:00
|
|
|
|
langsamer.
|
|
|
|
|
|
|
|
|
|
Im Vergleich zu MySQL oder abgespeckten Datenbank-Systemen ist
|
|
|
|
|
PostgreSQL in Lastsituationen - z.B. bei zeitgleichen Zugriffen
|
2004-12-18 12:18:21 +08:00
|
|
|
|
durch mehrere Nutzer, bei komplexen Abfragen oder
|
|
|
|
|
gleichzeitigen Lese- und Schreibzugriffen schneller. MySQL ist
|
|
|
|
|
nur bei einfacheren SELECT-Abfragen mit wenigen Nutzern im
|
|
|
|
|
Vorteil. MySQL besitzt allerdings nur wenige der im Punkt
|
|
|
|
|
"Eigenschaften" genannten Features. PostgreSQL setzt auf
|
|
|
|
|
Zuverl<72>ssigkeit und Funktionsumfang, dabei wird selbstredend
|
|
|
|
|
st<73>ndig an Performanz-Verbesserungen gearbeitet.
|
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
|
|
|
|
|
(siehe FAQ-Punkt 1.6).
|
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.
|
|
|
|
|
|
|
|
|
|
1.15) Wie kann ich PostgreSQL finanziell unterst<73>tzen?
|
|
|
|
|
|
|
|
|
|
PostgreSQL hat seit dem Anfang in 1996 eine exzellente Infrastruktur.
|
|
|
|
|
Dies ist Marc Fournier zu verdanken, der sie <20>ber die Jahre hinweg
|
|
|
|
|
geschaffen und gepflegt hat.
|
|
|
|
|
|
|
|
|
|
Eine hochwertige Infrastruktur ist f<>r ein Open-Source-Projekt wie
|
|
|
|
|
dieses sehr wichtig. Sie verhindert Probleme und Verz<72>gerungen beim
|
|
|
|
|
Fortschritt des Projekts.
|
|
|
|
|
|
|
|
|
|
Selbstverst<73>ndlich ist diese Infrastruktur nicht billig. Es gibt eine
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Reihe von einmaligen und monatlich anfallenden Kosten, die f<>r den
|
|
|
|
|
Betrieb beglichen werden m<>ssen. Falls Sie oder Ihre Firma dazu
|
2002-10-23 05:44:51 +08:00
|
|
|
|
finanziell beitragen k<>nnen, besuchen Sie bitte die URL
|
|
|
|
|
http://store.pgsql.com/shopping/ wo Sie eine Spende abgeben k<>nnen.
|
|
|
|
|
|
|
|
|
|
Obwohl diese Web-Seite das Unternehmen "PostgreSQL, Inc." erw<72>hnt, ist
|
|
|
|
|
der Bereich "contributions" (Beitr<74>ge) ausschliesslich f<>r die
|
|
|
|
|
Unterst<73>tzung des PostgreSQL-Projekts da und nicht f<>r die
|
|
|
|
|
Finanzierung einer bestimmten Firma. Sie k<>nnen auch gerne einen
|
|
|
|
|
finanziellen Beitrag an die Kontaktadresse verschicken.
|
2003-06-07 06:21:35 +08:00
|
|
|
|
|
|
|
|
|
Eine M<>glichkeit der nicht-finanziellen Untetst<73>tzung besteht <20>brigens
|
|
|
|
|
darin, f<>r http://advocacy.postgresql.org (en.) bzw.
|
|
|
|
|
http://advocacy.postgresql.org/?lang=de (dt.) einen Bericht <20>ber den
|
2004-12-18 12:18:21 +08:00
|
|
|
|
erfolgreichen Einsatz von PostgreSQL in Ihrem Unternehmen oder in
|
|
|
|
|
Ihrer Organisation bereitzustellen.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Fragen zu Benutzerprogrammen
|
|
|
|
|
|
|
|
|
|
2.1) Gibt es ODBC-Treiber f<>r PostgreSQL?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Es sind zwei ODBC-Treiber verf<72>gbar: PsqlODBC und OpenLink ODBC.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-12-18 12:46:17 +08:00
|
|
|
|
PsqlODBC kann von
|
|
|
|
|
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
|
|
|
|
|
heruntergeladen werden.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
OpenLink ODBC kann unter http://www.openlinksw.com bezogen werden. Die
|
2002-12-18 12:46:17 +08:00
|
|
|
|
Software arbeitet mit dem Standard-ODBC-Client dieser Firma, so dass
|
2000-09-14 10:21:31 +08:00
|
|
|
|
PostgreSQL-ODBC auf jeder Client-Plattform zur Verf<72>gung steht, die
|
|
|
|
|
unterst<73>tzt wird (Win, Mac, Unix, VMS).
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
OpenLink wird dieses Produkt wahrscheinlich an Leute verkaufen, die
|
|
|
|
|
kommerziellen Support ben<65>tigen, dennoch wird immer eine
|
2000-09-14 10:21:31 +08:00
|
|
|
|
Freeware-Version verf<72>gbar sein. Fragen dazu bitte an
|
|
|
|
|
postgres95@openlink.co.uk.
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
2.2) Welche Werkzeuge gibt es, um Web-Seiten mit PostgreSQL zu verbinden?
|
|
|
|
|
|
|
|
|
|
Eine nette Einf<6E>hrung zu datenbank-gest<73>tzten Webseiten kann unter
|
|
|
|
|
http://www.webreview.com (engl.) abgerufen 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
|
|
|
|
|
2002-12-18 12:46:17 +08:00
|
|
|
|
2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-12-18 12:46:17 +08:00
|
|
|
|
Es gibt mehrere grafische Schnittstellen f<>r PostgreSQL, darunter
|
2004-12-18 12:18:21 +08:00
|
|
|
|
PgAccess ( http://www.pgaccess.org), pgAdmin III
|
2004-01-09 09:51:31 +08:00
|
|
|
|
(http://www.pgadmin.org, RHDB Admin (http://sources.redhat.com/rhdb/ )
|
2004-12-18 12:18:21 +08:00
|
|
|
|
und Rekall ( http://www.thekompany.com/products/rekall/,
|
|
|
|
|
GPL/propriet<65>r). Es gibt au<61>erdem phpPgAdmin (
|
|
|
|
|
http://phppgadmin.sourceforge.net/ ), eine web-basierte Schnittstelle.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
2.4) Welche Programmiersprachen und Schnittstellen gibt es?
|
|
|
|
|
|
2002-12-18 12:46:17 +08:00
|
|
|
|
Die meisten g<>ngigen Programmiersprachen bieten Schnittstellen f<>r
|
|
|
|
|
PostgreSQL.
|
|
|
|
|
|
|
|
|
|
Die folgenden Schnittstellen werden mit der PostgreSQL-Distribution
|
|
|
|
|
ausgeliefert:
|
2002-10-23 05:44:51 +08:00
|
|
|
|
* C (libpq)
|
|
|
|
|
* Embedded C (ecpg)
|
|
|
|
|
* Java (jdbc)
|
|
|
|
|
* Python (PyGreSQL)
|
|
|
|
|
* TCL (libpgtcl)
|
2002-12-18 12:46:17 +08:00
|
|
|
|
|
|
|
|
|
Weitere Schnittstellen f<>r andere Sprachen k<>nnen <20>ber
|
|
|
|
|
http://gborg.postgresql.org (Bereich Drivers/Interfaces) bezogen
|
|
|
|
|
werden.
|
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?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
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
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
3.2) Wenn ich den postmaster starte, erhalte ich einen Nachricht "Bad
|
|
|
|
|
System Call" bzw. "core dumped". Wieso?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Das kann verschiedene Ursachen haben. <20>berpr<70>fen Sie zuerst, ob Ihr
|
|
|
|
|
Kernel System V Extensions unterst<73>tzt. PostgreSQL ben<65>tigt
|
2000-09-14 10:21:31 +08:00
|
|
|
|
Kernel-Unterst<73>tzung f<>r Shared Memory und Semaphoren.
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
3.3) Wenn ich versuche, den postmaster zu starten, bekomme ich
|
|
|
|
|
"IpcMemoryCreate"-Fehlermeldungen. Warum?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Entweder ist Shared Memory in Ihrem Kernel nicht korrekt konfiguriert,
|
|
|
|
|
oder Sie m<>ssen den Shared Memory Bereich vergr<67><72>ern. Die genaue Gr<47><72>e
|
|
|
|
|
h<>ngt von Ihrer Systemarchitektur und von der Anzahl der Puffer und
|
|
|
|
|
Serverprozesse ab, die Sie f<>r postmaster konfiguriert haben. Bei den
|
|
|
|
|
voreingestellten Werten f<>r Puffer und Prozesse ben<65>tigen Sie bei den
|
|
|
|
|
meisten Systemen ein Minimum von ca. 1 MB. Der "PostgreSQL
|
2005-01-17 10:42:31 +08:00
|
|
|
|
Administrator's Guide"
|
|
|
|
|
(http://www.postgresql.org/docs/current/static/kernel-resources.html)
|
|
|
|
|
enth<74>lt weitere Informationen zu Shared Memory und Semaphores.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich
|
|
|
|
|
"IpcSemaphoreCreate"-Fehlermeldungen. Warum?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Falls die Fehlermeldung "IpcSemaphoreCreate: semget failed (No space
|
|
|
|
|
left on device)" lautet, ist Ihr Kernel mit zu wenig Semaphoren
|
|
|
|
|
konfiguriert. PostgreSQL ben<65>tigt eine Semaphore pro m<>glichem
|
2000-09-14 10:21:31 +08:00
|
|
|
|
Backend-Prozess. Eine Zwischenl<6E>sung w<>re, postmaster mit einer
|
2002-10-23 05:44:51 +08:00
|
|
|
|
geringeren Anzahl an Backend-Prozessen zu starten. Benutzen Sie dazu
|
|
|
|
|
die -N Option mit einem kleineren Wert als die standardm<64><6D>igen 32.
|
|
|
|
|
Eine dauerhafte L<>sung w<>re es, die Parameter SEMMNS und SEMMNI Ihres
|
|
|
|
|
Kernels zu erh<72>hen.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Nichtfunktionierende Semaphores k<>nnen au<61>erdem bei hoher
|
|
|
|
|
Datenbanklast zu Abst<73>rzen f<>hren.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Falls die Fehlermeldung anders aussieht, ist m<>glicherweise keine
|
|
|
|
|
Semaphoren-Unterst<73>tzung in Ihrem Kernel aktiviert. Der "PostgreSQL
|
|
|
|
|
Administrator's Guide" enth<74>lt weitere Informationen zu Shared Memory
|
|
|
|
|
und Semaphores.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
3.5) Wie regle ich Zugriffe von anderen Rechnern?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
PostgreSQL ist standardm<64><6D>ig so eingestellt, dass Verbindungen nur vom
|
|
|
|
|
lokalen Rechner <20>ber Unix Domain Sockets m<>glich sind. Verbindungen
|
|
|
|
|
von anderen Rechnern <20>ber TCP/IP sind nur m<>glich, wenn der postmaster
|
2004-10-27 10:01:14 +08:00
|
|
|
|
mit der -i Option gestartet wird und / oder die Option
|
|
|
|
|
listen_addresses (in 7.x-Versionen: tcpip_sockets) in postgresql.conf
|
|
|
|
|
eingeschaltet wird, und die host-basierte Authentifizierung in der
|
|
|
|
|
Datei $PGDATA/pg_hba.conf entsprechend angepasst ist.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
3.6) Wie optimiere ich die Datenbank f<>r bessere Leistung?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Der Einsatz von Indizes sollte auf jeden Fall Abfragen beschleunigen.
|
2004-07-12 07:07:18 +08:00
|
|
|
|
Die Anweisung EXPLAIN ANALYZE zeigt, wie PostgreSQL Abfragen
|
|
|
|
|
interpretiert und welche Indizes benutzt werden.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Wenn Sie eine gro<72>e Anzahl von INSERT-Anweisungen durchf<68>hren, sollten
|
|
|
|
|
Sie <20>berlegen, ob die Durchf<68>hrung mit der COPY-Anweisung in Frage
|
|
|
|
|
kommt. Dies funktioniert wesentlich schneller als einzelne
|
|
|
|
|
INSERT-Befehle. SQL-Anweisungen, die sich nicht in einem BEGIN
|
|
|
|
|
WORK/COMMIT Transaktions- Block befinden, werden als eigene
|
|
|
|
|
Transaktionen behandelt. <20>berlegen Sie, ob die Anweisungen nicht in
|
|
|
|
|
einen einzelnen Transaktionsblock zusammen- gefasst werden k<>nnen. Das
|
|
|
|
|
reduziert den Transaktionsaufwand. <20>berlegen Sie auch, bei gr<67><72>eren
|
|
|
|
|
Daten<65>nderungen Indizes zu l<>schen und danach wiederherzustellen.
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Es gibt verschiedene Tuning-Optionen, die im Handbuch dokumentiert
|
|
|
|
|
sind (Administration Guide/Server Run-time Environment/Run-time
|
|
|
|
|
Configuration). Sie k<>nnen fsync() ausschalten, indem Sie beim Starten
|
|
|
|
|
des postmaster die Optionen -o -F angeben. Das hindert
|
|
|
|
|
fsync()-Operationen daran, nach jeder Transaktion die Daten direkt auf
|
|
|
|
|
die Festplatte zu schreiben.
|
|
|
|
|
|
|
|
|
|
Sie k<>nnen auch mit der shared_buffers Option des postmaster die
|
|
|
|
|
Anzahl der Shared Memory Puffer f<>r die Backend-Prozesse erh<72>hen.
|
|
|
|
|
Falls Sie diesen Wert jedoch zu hoch setzen, kann es vorkommen, dass
|
|
|
|
|
der postmaster nicht startet, weil die Obergrenze der
|
|
|
|
|
Speicherzuweisung f<>r Shared Memory <20>berschritten wird. Jeder Puffer
|
|
|
|
|
ist 8 kB gro<72>, voreingestellt sind 1000 Puffer.
|
|
|
|
|
|
|
|
|
|
Die sort_mem (ab PostgreSQL 8.0: work_mem)-Optionen des Backends
|
|
|
|
|
k<>nnen benutzt werden, um die Gr<47><72>e des Speicherplatzes f<>r tempor<6F>res
|
|
|
|
|
Sortieren zu erh<72>hen. Die Werte werden in Kilobyte gemessen und sind
|
|
|
|
|
standardm<64><6D>ig auf 1024 (d.h. 1MB) festgelegt.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
Die CLUSTER-Anweisung kann benutzt werden, um Daten in Basistabellen
|
2004-12-18 12:18:21 +08:00
|
|
|
|
zu gruppieren, so dass - um einen schnelleren Zugriff zu erreichen -
|
|
|
|
|
die physikalische Speicherung der Reihenfolge eines der Indexe
|
|
|
|
|
entspricht. Siehe auch die CLUSTER(l) Man-Page f<>r weitere Details.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
3.7) Welche Debugging-Funktionen sind f<>r PostgreSQL verf<72>gbar?
|
|
|
|
|
|
|
|
|
|
PostgreSQL hat einige M<>glichkeiten, Statusinformationen anzuzeigen,
|
|
|
|
|
die bei der Fehlersuche n<>tzlich sein k<>nnen.
|
|
|
|
|
|
|
|
|
|
Wenn Sie PostgreSQL mit dem --enable-cassert Option kompiliert haben,
|
|
|
|
|
verfolgen zahlreiche assert()-Anweisungen den Ablauf des Backends und
|
|
|
|
|
halten das Programm an, wenn etwas Unerwartetes passiert.
|
|
|
|
|
|
|
|
|
|
Sowohl der postmaster als auch postgres stellen mehrere Debug-Optionen
|
2004-12-18 12:18:21 +08:00
|
|
|
|
zur Verf<72>gung. Zuerst sollten Sie sichergehen, dass Sie die Ausgaben
|
|
|
|
|
<20>ber den Standard-Output und den Standard-Error in eine Datei
|
|
|
|
|
umleiten, wenn Sie den postmaster starten:
|
2002-10-23 05:44:51 +08:00
|
|
|
|
cd /usr/local/pgsql
|
|
|
|
|
./bin/postmaster >server.log 2>&1 &
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Dadurch wird die Datei server.log im PostgreSQL-Verzeichnis erzeugt.
|
|
|
|
|
Diese Datei enth<74>lt n<>tzliche Informationen <20>ber Probleme oder Fehler,
|
|
|
|
|
die im Server aufgetreten sind. postmaster hat eine -d Option, die
|
|
|
|
|
noch detailliertere Informationen liefert. Zur -d Option wird eine
|
|
|
|
|
Nummer angegeben, die den Debug-Level - also die Menge der berichteten
|
|
|
|
|
Information - angibt. Achtung, hohe Debug-Levels erzeugen schnell
|
|
|
|
|
gro<72>e Logdateien!
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Wenn der postmaster nicht l<>uft, k<>nnen Sie das postgres-Backend sogar
|
2002-10-23 05:44:51 +08:00
|
|
|
|
von der Befehlszeile ausf<73>hren und eine SQL-Anweisung direkt eingeben.
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Dies ist allerdings nur f<>r Debugging-Zwecke zu empfehlen. Beachten
|
|
|
|
|
Sie, dass hierbei ein Zeilenumbruch, und nicht - wie sonst <20>blich -
|
|
|
|
|
das Semikolon die SQL-Anweisung beendet. Falls Sie PostgreSQL mit
|
|
|
|
|
Debugging-Symbolen kompiliert haben, k<>nnen Sie mit einem Debugger
|
|
|
|
|
sehen, was passiert. Da das Backend jedoch nicht vom postmaster
|
|
|
|
|
gestartet wurde, l<>uft es nicht in der gleichen Umgebung und deshalb
|
|
|
|
|
k<>nnen einige locking-Vorg<72>nge sowie die Kommunikation zwischen den
|
|
|
|
|
Backends nicht reproduziert werden.
|
|
|
|
|
|
|
|
|
|
Wenn der postmaster hingegen l<>uft, f<>hren Sie psql in einem Fenster
|
|
|
|
|
aus, ermitteln Sie die Prozessnummer (PID) des postgres-Prozesses, der
|
2005-03-12 05:46:54 +08:00
|
|
|
|
von psql verwendet wird (mit SELECT pg_backend_pid()). Binden Sie
|
|
|
|
|
einen Debugger an diese PID und f<>hren Sie Abfragen von psql aus. Wenn
|
|
|
|
|
Sie den postgres-Serverstart analysieren wollen, setzen Sie die
|
|
|
|
|
Umgebungsvariable PGOPTIONS="-W n", und starten Sie dann psql. Dies
|
|
|
|
|
verz<72>gert den Start um n Sekunden, damit Sie einen Debugger an den
|
|
|
|
|
Prozess binden und ggf. Breakpoints setzen k<>nnen, bevor die
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Startsequenz begonnen wird.
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Es gibt verschiedene Einstellungen (die log_*-Gruppe), die diverse
|
|
|
|
|
Server-Statistik ausgeben und daher bei der Fehlersuche und
|
|
|
|
|
Performanzmessung sehr n<>tzlich sein k<>nnen.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
Sie k<>nnen die Anwendung auch mit Profiling kompilieren, um zu sehen,
|
|
|
|
|
welche Funktionen wieviel Ausf<73>hrungszeit beanspruchen. Das Backend
|
|
|
|
|
Profil wird im Verzeichnis pgsql/data/base/dbname abgelegt. Das
|
|
|
|
|
Client-Profil wird in das aktuelle Verzeichnis abgelegt. Bitte
|
|
|
|
|
beachtern Sie, dass unter Linux PostgreSQL mit der Option
|
|
|
|
|
-DLINUX_PROFILE kompiliert werden mu<6D>, um Profiling nutzen zu k<>nnen.
|
|
|
|
|
|
|
|
|
|
3.8) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Verbindung aufzubauen versuche. Warum?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Sie m<>ssen die maximale Anzahl der gleichzeitig ausf<73>hrbaren Backend-
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Prozesse hochsetzen.
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Die Voreinstellung erlaubt 32 Prozesse. Sie k<>nnen diese erh<72>hen,
|
|
|
|
|
indem Sie den postmaster mit einem entsprechenden -N Parameter starten
|
|
|
|
|
bzw. die Konfigurationsdatei postgresql.conf anpassen.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
Bitte beachten Sie, dass Sie auch -B auf ein Wert gr<67><72>er als die
|
|
|
|
|
Voreinstellung von 64 setzen m<>ssen, wenn Sie -N auf einen Wert h<>her
|
|
|
|
|
als 32 setzen; -B muss mindestens das Doppelte von -N betragen, und
|
|
|
|
|
einer besseren Performanz wegen sollte der Wert noch h<>her sein. Bei
|
|
|
|
|
einer hohen Anzahl von Backend-Prozessen kann es vorkommen, dass Sie
|
|
|
|
|
einige Unix-Kernel- Parameter ebenfalls erh<72>hen m<>ssen. Folgende
|
|
|
|
|
Parameter sind zu <20>berpr<70>fen: die Maximalgr<67><72>e der Shared Memory
|
|
|
|
|
Blocks SHMMAX; die Maximalanzahl der Semaphoren SEMMNS und SEMMNI; die
|
|
|
|
|
maximale Anzahl von Prozessen NPROC; die maximale Anzahl von Prozessen
|
|
|
|
|
pro User MAXUPRC; und die Maximalzahl der ge<67>ffneten Dateien NFILE und
|
|
|
|
|
NINODE. Durch die Begrenzung der Anzahl erlaubter Backend-Prozesse
|
|
|
|
|
wird verhindert, dass System-Ressourcen durch PostgreSQL aufgebraucht
|
|
|
|
|
werden.
|
|
|
|
|
|
|
|
|
|
3.9) Was befindet sich im Verzeichnis pgsql_tmp/?
|
|
|
|
|
|
|
|
|
|
Dieses Verzeichnis enth<74>lt tempor<6F>re Dateien, die durch den query
|
|
|
|
|
executor erzeugt werden. Wenn zum Beispiel eine Sortierung
|
|
|
|
|
durchgef<65>hrt werden mu<6D>, um ein ORDER BY auszuf<75>hren, und diese
|
|
|
|
|
Sortierung mehr Hauptspeicher ben<65>tigt, als mit dem Backend-Parameter
|
|
|
|
|
-S erlaubt wurde, dann werden diese Dateien erzeugt, um die Daten dort
|
|
|
|
|
zu auszulagern.
|
|
|
|
|
|
|
|
|
|
Die tempor<6F>ren Dateien sollten automatisch gel<65>scht werden. Falls das
|
|
|
|
|
Backend jedoch w<>hrend einer Sortierung abst<73>rzen sollte, bleiben sie
|
2004-12-18 12:18:21 +08:00
|
|
|
|
erhalten. Nach einem Neustart des postmaster werden sie dann aber
|
|
|
|
|
wieder automatisch gel<65>scht.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
3.10) Warum mu<6D> ich bei jeder neuen Hauptversion von PostgreSQL die
|
|
|
|
|
komplette Datenbank exportieren und anschlie<69>end reimportieren?
|
|
|
|
|
|
|
|
|
|
Zwischen "kleinen" PostgreSQL-Versions<6E>nderungen (z.B. zwischen 7.2
|
|
|
|
|
und 7.2.1) werden keine strukturellen <20>nderungen durchgef<65>hrt, wodurch
|
2004-12-18 12:18:21 +08:00
|
|
|
|
ein erneutes Aus- und Einlesen der Daten nicht erforderlich ist.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Allerdings wird bei "gro<72>en" Versions<6E>nderungen (z.B. zwischen 7.2 und
|
|
|
|
|
7.3) oft das interne Format der Systemtabellen und Datendateien
|
|
|
|
|
angepasst. Diese <20>nderungen sind oft sehr komplex, wodurch die
|
|
|
|
|
R<>ckw<6B>rtskompatibilit<69>t der Datendateien nicht gew<65>hrleistet werden
|
|
|
|
|
kann. Durch das Exportieren werden die Daten in einem generischen
|
|
|
|
|
Format ausgegeben, wodurch die Importierung in das neue interne Format
|
|
|
|
|
erm<72>glicht wird.
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Bei Upgrades, bei denen keine Format<61>nderungen stattgefunden haben,
|
2002-10-23 05:44:51 +08:00
|
|
|
|
kann das pg_upgrade-Skript benutzt werden, um die Daten ohne Aus- und
|
|
|
|
|
Einlesen zu <20>bertragen. Die jeweilige Dokumentation gibt an, ob f<>r
|
|
|
|
|
die betreffende Version pg_upgrade verf<72>gbar ist.
|
2004-10-27 10:01:14 +08:00
|
|
|
|
|
|
|
|
|
3.11) Welche Hardware eignet sich f<>r den Betrieb mit PostgreSQL?
|
|
|
|
|
|
|
|
|
|
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,
|
|
|
|
|
Hauptplatinen und Netzteile von namhaften Herstellern).
|
2000-09-14 10:21:31 +08:00
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Fragen zum Betrieb
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
4.1) Worin besteht der Unterschied zwischen Binary Cursors und Normal
|
2000-09-14 10:21:31 +08:00
|
|
|
|
Cursors?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Vgl. die DECLARE Man-Page f<>r eine Beschreibung.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2003-06-07 06:21:35 +08:00
|
|
|
|
4.2) Wie w<>hle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw.
|
|
|
|
|
eine beliebige Zeile in einer Abfrage aus?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Vgl. die FETCH Man-Page, oder benutzen Sie SELECT ... LIMIT... .
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Selbst wenn Sie nur die ersten paar Zeilen einer Tabelle abfragen
|
|
|
|
|
m<>chten, mu<6D> unter Umst<73>nden die komplette Abfrage abgearbeitet
|
|
|
|
|
werden. Ziehen Sie also m<>glichst eine Abfrage in Erw<72>gung, die eine
|
2004-12-18 12:18:21 +08:00
|
|
|
|
ORDER BY-Anweisung benutzt, welche wiederum auf indizierte Spalten
|
2002-10-23 05:44:51 +08:00
|
|
|
|
verweist. In diesem Fall kann PostgreSQL direkt nach den gew<65>nschten
|
|
|
|
|
Zeilen suchen und braucht nicht jede m<>gliche Ergebniszeile
|
|
|
|
|
abzuarbeiten.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Bitte beachten Sie, dass mit PostgreSQL 7.3 die Syntax LIMIT n, m
|
|
|
|
|
durch LIMIT n OFFSET m ersetzt wurde.
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.3) Wie finde ich heraus, welche Tabellen, Indizes, Datenbanken oder
|
|
|
|
|
Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql
|
|
|
|
|
verwendeten Abfragen?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
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
|
|
|
|
|
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.
|
|
|
|
|
|
2003-06-07 06:21:35 +08:00
|
|
|
|
4.4) Wie entferne ich eine Spalte aus einer Tabelle? Wie <20>ndere ich den
|
|
|
|
|
Datentyp einer Spalte?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2003-06-07 06:21:35 +08:00
|
|
|
|
Der Syntax ALTER TABLE DROP COLUMN wird ab PostgreSQL 7.3 unterst<73>tzt.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
Bei fr<66>heren Versionen bietet das folgende Verfahren Ersatz:
|
|
|
|
|
BEGIN;
|
|
|
|
|
LOCK TABLE old_table;
|
|
|
|
|
SELECT ... -- alle au<61>er der zu entfernenden Spalte hier ausw<73>hlen
|
2000-09-14 10:21:31 +08:00
|
|
|
|
INTO TABLE new_table
|
|
|
|
|
FROM old_table;
|
2002-10-23 05:44:51 +08:00
|
|
|
|
DROP TABLE old_table;
|
|
|
|
|
ALTER TABLE new_table RENAME TO old_table;
|
|
|
|
|
COMMIT;
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2003-06-07 06:21:35 +08:00
|
|
|
|
Um den Datentyp einer Spalte zu <20>ndern, gehen Sie wie folgt vor:
|
|
|
|
|
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
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
4.5) Was ist die Maximalgr<67><72>e f<>r eine Zeile, eine Tabelle, eine Datenbank?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
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
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Maximale Gr<47><72>e einer Zeile? 1,6 TB
|
|
|
|
|
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
|
|
|
|
|
Maximale Anzahl von Indizies f<>r eine Tabelle?
|
|
|
|
|
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
|
|
|
|
|
heraufsetzt.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
4.6) Wieviel Plattenplatz wird ben<65>tigt, um die Daten aus einer typischen
|
|
|
|
|
Textdatei abzuspeichern?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
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
|
|
|
|
|
6,4 MB:
|
2004-10-27 10:01:14 +08:00
|
|
|
|
32 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
|
|
|
|
-----------------------------------------------
|
2004-10-27 10:01:14 +08:00
|
|
|
|
60 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
|
2004-10-27 10:01:14 +08:00
|
|
|
|
--------------------- = 136 Zeilen pro Seite (abgerundet)
|
2002-10-23 05:44:51 +08:00
|
|
|
|
64 Bytes pro Zeile
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
100.000 Datenzeilen
|
2004-12-18 12:18:21 +08:00
|
|
|
|
------------------------ = 735 Datenbankseiten (aufgerundet)
|
2002-10-23 05:44:51 +08:00
|
|
|
|
128 Zeilen pro Seite
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2004-10-27 10:01:14 +08:00
|
|
|
|
735 Datenbankseiten * 8192 Bytes pro Seite = 6.021.120 Byte (6 MB)
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Indizes beanspruchen nicht so viel Platz. Da sie jedoch die Daten
|
|
|
|
|
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
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.7) Meine Abfragen sind langsam oder benutzen die Indizes nicht. Warum?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Indizes werden nicht automatisch bei jeder Abfrage verwendet. Indizes
|
|
|
|
|
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
|
|
|
|
|
Tabellenzeilen und kann besser entscheiden, ob Indizes verwendet
|
2004-12-18 12:18:21 +08:00
|
|
|
|
werden sollen. Statistiken sind auch bei der Ermittlung der optimalen
|
|
|
|
|
JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese
|
|
|
|
|
regelm<6C>ssig durchgef<65>hrt werden, da sich der Inhalt einer Tabelle ja
|
|
|
|
|
auch ver<65>ndert
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2004-10-27 10:01:14 +08:00
|
|
|
|
In Versionen vor 8.0 werden Indizes oft nicht benutzt, wenn die
|
|
|
|
|
jeweiligen Datentypen nicht genau <20>bereinstimmen. Dies gilt besonders
|
|
|
|
|
f<>r Spalten mit numerischen und Integer-Werten.
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Indizes werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs
|
|
|
|
|
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
|
|
|
|
|
kleiner Abschnitt der Tabelle zur<75>ckgeliefert wird. Dadurch wird es
|
|
|
|
|
auch m<>glich, die Minimal- und Maximalwerte einer Abfrage unter
|
|
|
|
|
Verwendung von Indizes zu ermitteln:
|
|
|
|
|
SELECT spalte
|
|
|
|
|
FROM tabelle
|
|
|
|
|
ORDER BY spalte [ DESC ]
|
|
|
|
|
LIMIT 1
|
|
|
|
|
|
|
|
|
|
(Die Aggregatfunktionen MIN() und MAX() verwenden keine Indizes).
|
|
|
|
|
|
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.
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, k<>nnen
|
|
|
|
|
Indizes 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.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
Suchmuster, die Gross- und Kleinschreibung nicht ber<65>cksichtigen (z.B.
|
|
|
|
|
ILIKE bzw. ~*), verwenden keine Indizes. Stattdessen k<>nnen
|
|
|
|
|
funktionale Indizes verwendet werden, die im Punkt 4.12 beschrieben
|
|
|
|
|
werden.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
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.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.8) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine
|
2000-09-14 10:21:31 +08:00
|
|
|
|
Abfrage auswertet?
|
|
|
|
|
|
|
|
|
|
Vgl. die EXPLAIN Man-Page.
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.9) Was ist ein R-Tree Index?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Ein R-Tree Index wird benutzt, um r<>umliche Daten zu indizieren. Ein
|
|
|
|
|
Hash-Index kann nicht f<>r Bereichssuchen genutzt werden. Ein B-Tree
|
|
|
|
|
Index kann nur f<>r Bereichssuchen in eindimensionalen Daten genutzt
|
2004-12-18 12:18:21 +08:00
|
|
|
|
werden. R-Trees k<>nnen hingegen auch mit multi-dimensionalen Daten
|
|
|
|
|
umgehen. 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.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Die kanonische Ver<65>ffentlichung, die das originale R-Tree Design
|
|
|
|
|
beschreibt, ist:
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Sie k<>nnen dieses Werk auch in Stonebrakers "Readings in Database
|
2000-09-14 10:21:31 +08:00
|
|
|
|
Systems" finden.
|
|
|
|
|
|
|
|
|
|
Die eingebauten R-Trees k<>nnen Polygone und Rechtecke verarbeiten.
|
|
|
|
|
Theoretisch k<>nnen R-Trees auf eine hohe Anzahl von Dimensionen
|
2004-12-18 12:18:21 +08:00
|
|
|
|
erweitert werden. F<>r die Praxis bedeutet eine solche Erweiterung
|
|
|
|
|
allerdings eine Menge Arbeit und wir haben derzeit keinerlei
|
|
|
|
|
Dokumentation dar<61>ber, wie das zu machen w<>re.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.10) Was ist der "Genetic Query Optimizer"?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
|
|
|
|
Das GEQO-Modul in PostgreSQL soll dazu dienen, das Optimierungsproblem
|
2002-10-23 05:44:51 +08:00
|
|
|
|
beim JOIN von vielen Tabellen auf der Basis genetischer Algorithmen
|
|
|
|
|
(GA) zu l<>sen. Es erm<72>glicht die Behandlung von gro<72>en JOIN-Queries
|
|
|
|
|
durch eine nicht-ersch<63>pfende Suche.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.11) Wie verfahre ich bei der Suche mit regul<75>ren Ausdr<64>cken und bei einer
|
2002-10-23 05:44:51 +08:00
|
|
|
|
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'
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Hier kann kein normaler Index benutzt werden. Legt man hingegen einen
|
|
|
|
|
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))
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.12) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.13) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
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
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.14.1) Wie erzeuge ich ein serielles Feld mit automatischer Erh<72>hung des
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Werts (serial/auto-increment)?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
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
|
|
|
|
|
Sequenzen. Es ist auch m<>glich, den OID-Wert jeder Spalte als
|
|
|
|
|
einmaligen Wert einzusetzen. Sollten Sie allerdings die Datenbank
|
|
|
|
|
exportieren und reimportieren wollen, m<>ssen Sie die Option -o von
|
|
|
|
|
pg_dump bzw. COPY WITH OIDS verwenden, um die OIDs beizubehalten.
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.14.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
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
|
2005-01-17 10:42:31 +08:00
|
|
|
|
INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.14.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:
|
|
|
|
|
<table>_<serialcolumn>_seq wobei 'table' und 'serialcolumn' die Namen
|
|
|
|
|
der jeweils betreffenden Tabelle / Spalte darstellen.
|
|
|
|
|
|
|
|
|
|
Als weitere M<>glichkeit k<>nnen Sie nach einer INSERT-Anweisung den
|
|
|
|
|
automatisch eingef<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
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Schlie<69>lich besteht noch die M<>glichkeit, den von einer
|
|
|
|
|
INSERT-Anweisung zur<75>ckgelieferten OID-Wert als einmaligen Wert zu
|
2003-09-04 04:28:14 +08:00
|
|
|
|
verwenden. Dieser Ansatz ist allerdings PostgreSQL-spezifisch;
|
|
|
|
|
au<61>erdem wird nach ca. 4 Milliarden Eintr<74>gen der OID-Wert wieder auf
|
2004-12-18 12:18:21 +08:00
|
|
|
|
eine kleine Zahl gesetzt, ist also nicht garantiert immer einmalig
|
|
|
|
|
oder aufsteigend.
|
2003-09-04 04:28:14 +08:00
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Mit zum Beispiel dem DBD::Pg-Modul von Perl wird der OID-Wert nach
|
|
|
|
|
einem $sth->excute() <20>ber $sth->{pg_oid_status} zur<75>ckgeliefert.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.14.3) F<>hren currval() und nextval() zu einer Race-Condition mit anderen
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Nutzern?
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Nein. currval() liefert einen Wert zur<75>ck, der von Ihrem Backend
|
2002-10-23 05:44:51 +08:00
|
|
|
|
bestimmt wird, und der anderen Benutzern nicht zur Verf<72>gung steht.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.14.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht
|
2002-10-23 05:44:51 +08:00
|
|
|
|
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
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.15) Was ist ein OID? Was ist ein TID?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
OIDs sind PostgreSQLs Antwort auf eindeutige Zeilen-IDs. Jede Zeile,
|
|
|
|
|
die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID. Alle
|
|
|
|
|
OIDs, die durch initdb erzeugt werden, sind kleiner als 16384 (siehe
|
|
|
|
|
include/access/transam.h). Alle OIDs, die durch den Benutzer erzeugt
|
2004-12-18 12:18:21 +08:00
|
|
|
|
werden, sind gr<67><72>er oder gleich diesem Wert. Standardm<64><6D>ig sind all
|
|
|
|
|
OIDs nicht nur innerhalb einer Tabelle oder Datenbank, sondern in der
|
|
|
|
|
gesamten PostgreSQL-Installation einmalig.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
PostgreSQL benutzt OIDs in seinen internen Systemtabellen, um Zeilen
|
|
|
|
|
in JOINs zwischen Tabellen zu verkn<6B>pfen. Es ist m<>glich, einen Index
|
|
|
|
|
f<>r die OID-Spalte zu erstellen, wodurch schnellere Zugriffszeiten
|
|
|
|
|
erreicht werden k<>nnen. Es wird empfohlen, OID-Werte in Spalten vom
|
|
|
|
|
Typ OID zu speichern.
|
|
|
|
|
|
|
|
|
|
OIDs werden allen neuen Zeilen von einem zentralen Bereich, der von
|
|
|
|
|
allen Datenbanken genutzt wird, zugewiesen. Nichts hindert Sie daran,
|
2004-12-18 12:18:21 +08:00
|
|
|
|
die OID zu <20>ndern, oder eine Kopie der Tabelle mit den originalen OIDs
|
2002-10-23 05:44:51 +08:00
|
|
|
|
anzulegen:
|
2004-07-12 07:07:18 +08:00
|
|
|
|
CREATE TABLE new_table(mycol int);
|
|
|
|
|
SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table;
|
|
|
|
|
COPY tmp_table TO '/tmp/pgtable';
|
|
|
|
|
COPY new_table WITH OIDS FROM '/tmp/pgtable';
|
|
|
|
|
DROP TABLE tmp_table;
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
OIDs werden als 4-Byte Integer gespeichert und laufen bei einem Wert
|
|
|
|
|
von ungef<65>hr 4 Milliarden <20>ber. Niemand hat jemals davon berichtet,
|
|
|
|
|
dass dies passiert w<>re aber wir haben geplant, diese Beschr<68>nkung
|
|
|
|
|
aufzuheben, bevor das jemand ausprobieren kann.
|
|
|
|
|
|
|
|
|
|
TIDs werden benutzt, um bestimmte physikalische Zeilen durch Block und
|
|
|
|
|
Offset Werte zu identifizieren. TIDs 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.
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.16) Welche Bedeutung haben die verschiedenen Ausdr<64>cke, die in PostgreSQL
|
2000-09-14 10:21:31 +08:00
|
|
|
|
benutzt werden (z.B. attribute, class,...)?
|
|
|
|
|
|
|
|
|
|
Einige der Quelltexte und die <20>ltere Dokumentation nutzen allgemeine
|
|
|
|
|
Begriffe. Hier sind einige aufgef<65>hrt:
|
|
|
|
|
* row, record, tuple
|
|
|
|
|
* attribute, field, column
|
|
|
|
|
* table, class
|
|
|
|
|
* retrieve, SELECT
|
|
|
|
|
* replace, UPDATE
|
|
|
|
|
* append, INSERT
|
2004-12-18 12:18:21 +08:00
|
|
|
|
* OID, serial value
|
2000-09-14 10:21:31 +08:00
|
|
|
|
* portal, cursor
|
|
|
|
|
* range variable, table name, table alias
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Eine allgemeine Liste der Datenbank-Terminologie erhalten Sie hier:
|
|
|
|
|
http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
|
|
|
|
|
/glossary.html (engl.).
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.17) Wieso bekomme ich einen Fehler: "ERROR: Memory exhausted in
|
2002-10-23 05:44:51 +08:00
|
|
|
|
AllocSetAlloc()"?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
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.
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.18) 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.
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.19) Bei "large-object"-Operationen kommt die Fehlermeldung: "invalid
|
2002-10-23 05:44:51 +08:00
|
|
|
|
large obj descriptor". Warum?
|
|
|
|
|
|
|
|
|
|
Sie sollten die Anweisungen BEGIN WORK und COMMIT bei jeden Gebrauch
|
|
|
|
|
von Large Objects benutzen. Also um lo_open ... lo_close.
|
|
|
|
|
|
|
|
|
|
Derzeit erzwingt PostgreSQL diese Regel, indem es die Handles der
|
|
|
|
|
Large Objects beim COMMIT der Transaktion schlie<69>t. So f<>hrt der erste
|
|
|
|
|
Versuch, etwas mit dem Large Object zu machen, zu einer Meldung
|
|
|
|
|
"invalid large obj descriptor". Solange Sie keine Transaktionen
|
|
|
|
|
benutzen, wird der Code, der in <20>lteren PostgreSQL-Versionen
|
|
|
|
|
funktionierte, nun diese Fehlermeldung erzeugen.
|
|
|
|
|
|
|
|
|
|
Falls Sie eine Client-Schnittstelle wie ODBC benutzen, kann es sein,
|
|
|
|
|
dass die auto-commit-Option ausgeschaltet werden muss.
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.20) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die
|
2002-10-23 05:44:51 +08:00
|
|
|
|
aktuelle Uhrzeit enthalten soll?
|
|
|
|
|
|
|
|
|
|
Dazu verwenden Sie CURRENT_TIMESTAMP:
|
|
|
|
|
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.21) Warum sind meine Unterabfragen (subqueries), die IN verwenden, so
|
2002-10-23 05:44:51 +08:00
|
|
|
|
langsam?
|
|
|
|
|
|
2004-01-09 09:51:31 +08:00
|
|
|
|
In Versionen vor 7.4 werden Unterabfragen mit der <20>usseren Abfrage
|
|
|
|
|
verbunden, in dem f<>r jede Reihe der <20>usseren Query die Ergebnisse der
|
|
|
|
|
Unterabfrage sequentiell gepr<70>ft werden. Um dies zu vermeiden, kann
|
|
|
|
|
man IN durch EXISTS ersetzen, z.B.:
|
2002-10-23 05:44:51 +08:00
|
|
|
|
SELECT *
|
|
|
|
|
FROM tabelle_1
|
|
|
|
|
WHERE spalte1 IN (SELECT spalte2 FROM tabelle_2)
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
ersetzen durch:
|
2002-10-23 05:44:51 +08:00
|
|
|
|
SELECT *
|
|
|
|
|
FROM tabelle_1
|
|
|
|
|
WHERE EXISTS (SELECT spalte2 FROM tabelle_2 WHERE spalte1 = spalte2)
|
|
|
|
|
|
|
|
|
|
Damit diese Abfrage effizient durchgef<65>hrt wird, sollte f<>r 'spalte2'
|
2004-12-18 12:18:21 +08:00
|
|
|
|
ein Index angelegt worden sein. Ab PostgreSQL 7.4 verwendet IN die
|
2004-01-09 09:51:31 +08:00
|
|
|
|
gleichen Methoden wie die normale Tabellenverkn<6B>pfung und ist daher
|
|
|
|
|
soger EXISTS vorzuziehen.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.22) Wie f<>hre ich einen OUTER JOIN durch?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
PostgreSQL ab der Version 7.1 unterst<73>tzt OUTER JOINs nach dem SQL-
|
|
|
|
|
Standardsyntax. Hier zwei Beispiele:
|
|
|
|
|
SELECT *
|
|
|
|
|
FROM tabelle_1 t1
|
|
|
|
|
LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)
|
|
|
|
|
|
|
|
|
|
bzw.:
|
|
|
|
|
SELECT *
|
|
|
|
|
FROM tabelle_1 t1
|
|
|
|
|
LEFT OUTER JOIN tabelle_2 t2 USING (spalte)
|
|
|
|
|
|
|
|
|
|
Diese identischen Abfragen verkn<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.
|
|
|
|
|
|
|
|
|
|
In fr<66>heren Versionen von PostgreSQL konnten OUTER JOINs mittels UNION
|
2002-10-23 05:44:51 +08:00
|
|
|
|
und NOT IN simuliert werden. Zum Beispiel 'tabelle_1' und 'tabelle_2'
|
|
|
|
|
k<>nnen als LEFT OUTER JOIN auch so verkn<6B>pft werden:
|
|
|
|
|
SELECT t1.spalte1, t2.spalte2
|
|
|
|
|
FROM tabelle_1 t1, tabelle_2 t2
|
|
|
|
|
WHERE t1.spalte1 = t2.spalte1
|
|
|
|
|
UNION ALL
|
|
|
|
|
SELECT t1.spalte1, NULL
|
|
|
|
|
FROM tabelle_1 t1
|
|
|
|
|
WHERE t1.spalte1 NOT IN (SELECT t2.spalte1 FROM tabelle_2 t2)
|
|
|
|
|
ORDER BY spalte1
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.23) 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
|
|
|
|
|
|
|
|
|
Es ist nat<61>rlich m<>glich, dass eine Client-Anwendung gleichzeitige
|
|
|
|
|
Verbindungen zu verschiedenen Datenbanken aufbaut und selber
|
|
|
|
|
Datens<6E>tze zusammenf<6E>gt.
|
|
|
|
|
|
2003-04-29 06:40:38 +08:00
|
|
|
|
Ab 7.3 unterst<73>tzt PostgreSQL schemas, die die Aufteilung einer
|
|
|
|
|
Datenbank in mehrere logische Bereiche erm<72>glichen. Bei vielen
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Anwendungen k<>nnten diese einen geeigneten Ersatz f<>r den Zugriff auf
|
2003-04-29 06:40:38 +08:00
|
|
|
|
eine andere Datenbank bieten.
|
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.24) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
|
2002-10-23 05:44:51 +08:00
|
|
|
|
zur<75>ckgeben lassen?
|
|
|
|
|
|
2003-04-29 06:40:38 +08:00
|
|
|
|
Ab 7.3 k<>nnen Funktionen mehrere Zeilen und Spalten zur<75>ckgeben, vgl.:
|
|
|
|
|
http://techdocs.postgresql.org/guides/SetReturningFunctions.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.25) Warum kann ich tempor<6F>re Tabellen in PL/PgSQL-Funktionen nicht
|
2002-10-23 05:44:51 +08:00
|
|
|
|
zuverl<72>ssig erstellen bzw. l<>schen?
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
PL/PgSQL verarbeitet die Inhalte einer Funktion in eine Cache. Dies
|
2002-10-23 05:44:51 +08:00
|
|
|
|
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
|
2002-10-23 05:44:51 +08:00
|
|
|
|
tempor<6F>re Tabelle zeigen.
|
|
|
|
|
|
2004-12-18 12:18:21 +08:00
|
|
|
|
Die L<>sung f<>r diese Probleme besteht darin, in der PL/PgSQL Funktion
|
|
|
|
|
mittels EXECUTE auf tempor<6F>re Tabellen zuzugreifen. Diese bewirkt,
|
|
|
|
|
dass bei jedem Funktionsruf die betreffende Abfrage neu geparst wird.
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
2005-01-17 10:42:31 +08:00
|
|
|
|
4.26) Welche M<>glichkeiten zur Verschl<68>sselung gibt es?
|
2002-10-23 05:44:51 +08:00
|
|
|
|
|
|
|
|
|
* contrib/pgcrypto enth<74>lt diverse Funktionen f<>r die Ben<65>tzung mit
|
2003-09-04 04:28:14 +08:00
|
|
|
|
SQL-Abfragen.
|
|
|
|
|
* Um Verbindungen zwischen dem Server und Client-Anwendungen zu
|
|
|
|
|
verschl<68>sseln, muss in der Server-Konfigurationsdatei
|
|
|
|
|
postgresql.conf die ssl-Option auf true (Voreinstellung: false)
|
|
|
|
|
gesetzt werden und ein passender host- bzw. hostssl-Eintrag muss
|
|
|
|
|
in pg_hba.conf vorhanden sein. Zudem muss die sslmode-Einstellung
|
|
|
|
|
beim Client nicht auf disable gesetzt werden. (Bitte beachten Sie
|
|
|
|
|
auch, da<64> neben der eingebauten SSL-Unterst<73>tzung verschl<68>sselte
|
|
|
|
|
Verbindungen auch <20>ber externe Anwendungen wie stunnel oder ssh
|
|
|
|
|
aufgebaut werden k<>nnen).
|
2002-10-23 05:44:51 +08:00
|
|
|
|
* Die Passw<73>rter der Datenbanknutzer werden ab Version 7.3
|
|
|
|
|
automatisch verschl<68>sselt (in fr<66>heren Versionen mu<6D> der Parameter
|
|
|
|
|
PASSWORD_ENCRYPTION in postgresql.conf explizit eingeschaltet
|
2003-09-04 04:28:14 +08:00
|
|
|
|
werden).
|
|
|
|
|
* Betrieb des Servers auf einem verschl<68>sselten Dateisystem.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
PostgreSQL erweitern
|
|
|
|
|
|
|
|
|
|
5.1) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich sie in
|
|
|
|
|
psql aufrufe, kommt ein core dump. Warum?
|
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Dieses Problem kann viele Ursachen haben. Testen Sie Ihre Funktion
|
|
|
|
|
zuerst in einem eigenen Testprogramm.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
5.2) Wie kann ich praktische neue Typen und Funktionen zu PostgreSQL
|
|
|
|
|
hinzuf<75>gen?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Senden Sie Ihre Beitr<74>ge an die Mailing Liste pgsql-hackers, und sie
|
|
|
|
|
werden nach Pr<50>fung eventuell ins contrib/ Verzeichnis des Quellcodes
|
|
|
|
|
aufgenommen werden.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
5.3) Wie schreibe ich eine Funktion in C, die einen Tupel zur<75>ckliefert?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Ab PostgreSQL 7.3 werden Funktionen, die Tupel zur<75>ckliefern, in C,
|
|
|
|
|
PL/PgSQL und SQL unterst<73>tzt. Der Programmer's Guide enth<74>lt weitere
|
|
|
|
|
Informationen dazu. Ein Bespiel einer solchen Funktion befindet sich
|
|
|
|
|
in contrib/tablefunc.
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
5.4) Ich habe eine der Quellendateien ge<67>ndert. Warum macht sich die
|
|
|
|
|
<20>nderung beim erneuten Kompilieren nicht bemerkbar?
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Die Makefiles enthalten nicht die richtigen Abh<62>ngigkeiten f<>r
|
|
|
|
|
include- Dateien. Sie m<>ssen ein "make clean" und dann ein weiteres
|
|
|
|
|
"make" ausf<73>hren. Wenn Sie gcc benutzen, k<>nnen Sie die
|
|
|
|
|
"--enable-depend"-Option des configure- Skripts benutzen, damit der
|
|
|
|
|
Compiler die Abh<62>ngigkeiten automatisch ermittelt.
|
|
|
|
|
_________________________________________________________________
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
2002-10-23 05:44:51 +08:00
|
|
|
|
Anmerkungen des <20>bersetzers
|
2000-09-14 10:21:31 +08:00
|
|
|
|
|
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.
|