Many thanks to Joachim Wieland for a big list of corrections / updates.
Ian Barwick
This commit is contained in:
parent
2f7faa5473
commit
50b1651df7
414
doc/FAQ_german
414
doc/FAQ_german
|
@ -5,17 +5,17 @@
|
||||||
|
|
||||||
Deutsche Übersetzung von Ian Barwick (barwick@gmx.net).
|
Deutsche Übersetzung von Ian Barwick (barwick@gmx.net).
|
||||||
|
|
||||||
Letzte Aktualisierung der deutschen Übersetzung: Di., den 26.10.2004,
|
Letzte Aktualisierung der deutschen Übersetzung: Fr., den 17.12.2004,
|
||||||
22:30 MEZ
|
22:30 MEZ
|
||||||
|
|
||||||
Die aktuellste Version dieses Dokuments liegt auf der PostgreSQL
|
Die aktuellste Version dieses Dokuments liegt auf der
|
||||||
Website:
|
PostgreSQL-Website:
|
||||||
* http://www.PostgreSQL.org/docs/faqs/FAQ.html (engl.)
|
* http://www.postgresql.org/docs/faqs/FAQ.html (engl.)
|
||||||
* http://www.PostgreSQL.org/docs/faqs/FAQ_german.html (dt.)
|
* http://www.postgresql.org/docs/faqs/FAQ_german.html (dt.)
|
||||||
|
|
||||||
Übersetzungen dieses Dokuments in andere Sprachen sowie plattform-
|
Übersetzungen dieses Dokuments in andere Sprachen sowie plattform-
|
||||||
spezifische FAQs können unter
|
spezifische FAQs können unter
|
||||||
http://www.PostgreSQL.org/docs/index.html#faqs eingesehen werden.
|
http://www.postgresql.org/docs/index.html#faqs eingesehen werden.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
Allgemeine Fragen
|
Allgemeine Fragen
|
||||||
|
@ -77,8 +77,9 @@
|
||||||
Datenbank?
|
Datenbank?
|
||||||
4.6) Wieviel Plattenplatz wird benötigt, um die Daten aus einer
|
4.6) Wieviel Plattenplatz wird benötigt, um die Daten aus einer
|
||||||
typischen Textdatei abzuspeichern?
|
typischen Textdatei abzuspeichern?
|
||||||
4.7) Wie finde ich heraus, welche Indizes oder Operationen in der
|
4.7) Wie finde ich heraus, welche Tabellen, Indizes, Datenbanken oder
|
||||||
Datenbank definiert sind?
|
Benutzer in der Datenbank definiert sind?Wie finde ich heraus, welche
|
||||||
|
Indizes oder Operationen in der Datenbank definiert sind?
|
||||||
4.8) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?
|
4.8) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?
|
||||||
4.9) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer
|
4.9) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer
|
||||||
("GEQO") meine Abfrage auswertet?
|
("GEQO") meine Abfrage auswertet?
|
||||||
|
@ -92,8 +93,7 @@
|
||||||
4.15.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung
|
4.15.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung
|
||||||
des Wertes?
|
des Wertes?
|
||||||
4.15.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
|
4.15.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
|
||||||
4.15.3) Führen currval() und nextval() zu einer Race-Condition mit
|
4.15.3) Führt currval() zu einer Race-Condition mit anderen Nutzern?
|
||||||
anderen Nutzern?
|
|
||||||
4.15.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch
|
4.15.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch
|
||||||
nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
|
nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
|
||||||
Sequenz-/SERIAL-Spalte?
|
Sequenz-/SERIAL-Spalte?
|
||||||
|
@ -150,11 +150,11 @@
|
||||||
Die PostgreSQL-Entwicklung wird von einem Entwickler-Team
|
Die PostgreSQL-Entwicklung wird von einem Entwickler-Team
|
||||||
durchgeführt, die alle Teilnehmer der
|
durchgeführt, die alle Teilnehmer der
|
||||||
PostgreSQL-Entwicklungs-Mailingliste sind. Der aktuelle Koordinator
|
PostgreSQL-Entwicklungs-Mailingliste sind. Der aktuelle Koordinator
|
||||||
ist Marc G. Fournier (scrappy@PostgreSQL.org) (Anmeldemöglichkeit:
|
ist Marc G. Fournier (scrappy@postgresql.org) (Anmeldemöglichkeit:
|
||||||
siehe unten). Dieses Team ist für die Gesamtentwicklung von PostgreSQL
|
siehe unten). Dieses Team ist für die Gesamtentwicklung von PostgreSQL
|
||||||
verantwortlich. Es handelt sich um ein Gemeinschaftsprojekt, das nicht
|
verantwortlich. Es handelt sich um ein Gemeinschaftsprojekt, das nicht
|
||||||
von einer bestimmten Firma kontrolliert wird. Lesen Sie die
|
von einer bestimmten Firma kontrolliert wird. Lesen Sie die
|
||||||
Entwickler-FAQ: http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html wenn
|
Entwickler-FAQ: http://www.postgresql.org/docs/faqs/FAQ_DEV.html wenn
|
||||||
Sie an einer Mitarbeit interessiert sind.
|
Sie an einer Mitarbeit interessiert sind.
|
||||||
|
|
||||||
Die Autoren von PostgreSQL 1.01 waren Andrew Yu und Jolly Chen. Viele
|
Die Autoren von PostgreSQL 1.01 waren Andrew Yu und Jolly Chen. Viele
|
||||||
|
@ -167,7 +167,7 @@
|
||||||
|
|
||||||
Der ursprüngliche Name der Software in Berkeley war Postgres. Als die
|
Der ursprüngliche Name der Software in Berkeley war Postgres. Als die
|
||||||
SQL-Funktionalität 1995 hinzugefügt wurde, wurde sein Name zu
|
SQL-Funktionalität 1995 hinzugefügt wurde, wurde sein Name zu
|
||||||
Postgres95 geändert. Der Name wurde Ende 1996 in PostgreSQL geändert.
|
Postgres95 erweitert. Der Name wurde Ende 1996 in PostgreSQL geändert.
|
||||||
|
|
||||||
1.2).Welchem Copyright unterliegt PostgreSQL?
|
1.2).Welchem Copyright unterliegt PostgreSQL?
|
||||||
|
|
||||||
|
@ -223,7 +223,7 @@
|
||||||
Unter Windows 95/98/ME ist es nur möglich, den Datenbankserver mit
|
Unter Windows 95/98/ME ist es nur möglich, den Datenbankserver mit
|
||||||
Hilfe der Cygwin-Umgebung (Unix-Portierungsbibliotheken) zu betreiben.
|
Hilfe der Cygwin-Umgebung (Unix-Portierungsbibliotheken) zu betreiben.
|
||||||
Weitere Informationen hierzu gibt es in der CYGWIN-FAQ:
|
Weitere Informationen hierzu gibt es in der CYGWIN-FAQ:
|
||||||
http://www.PostgreSQL.org/docs/faqs/text/FAQ_CYGWIN.
|
http://www.postgresql.org/docs/faqs/text/FAQ_CYGWIN.
|
||||||
|
|
||||||
Eine Portierung für Novell Netware 6 gibt es unter
|
Eine Portierung für Novell Netware 6 gibt es unter
|
||||||
http://forge.novell.com.
|
http://forge.novell.com.
|
||||||
|
@ -231,53 +231,53 @@
|
||||||
1.5) Woher bekomme ich PostgreSQL?
|
1.5) Woher bekomme ich PostgreSQL?
|
||||||
|
|
||||||
Der zentrale FTP-Server für PostgreSQL ist der ftp-Server
|
Der zentrale FTP-Server für PostgreSQL ist der ftp-Server
|
||||||
ftp://ftp.postgreSQL.org/pub. Weitere Mirror-Sites sind auf der
|
ftp://ftp.postgresql.org/pub/. Weitere Mirror-Sites sind auf der
|
||||||
PostgreSQL-Website aufgelistet.
|
PostgreSQL-Website aufgelistet.
|
||||||
|
|
||||||
1.6) Wo bekomme ich Support für PostgreSQL?
|
1.6) Wo bekomme ich Support für PostgreSQL?
|
||||||
|
|
||||||
Die zentrale (englischsprachige) Mailing-Liste ist:
|
Die zentrale (englischsprachige) Mailing-Liste ist:
|
||||||
mailto:pgsql-general@PostgreSQL.org .
|
mailto:pgsql-general@postgresql.org .
|
||||||
|
|
||||||
Die Liste ist Themen vorbehalten, die PostgreSQL betreffen. Die
|
Die Liste ist Themen vorbehalten, die PostgreSQL betreffen. Die
|
||||||
Anmeldung erfolgt mit einer Email an die Adresse
|
Anmeldung erfolgt mit einer Email an die Adresse
|
||||||
pgsql-general-request@PostgreSQL.org mit folgenden Zeilen im Text
|
pgsql-general-request@postgresql.org mit folgenden Zeilen im Text
|
||||||
(nicht in der Betreffzeile):
|
(nicht in der Betreffzeile):
|
||||||
subscribe
|
subscribe
|
||||||
end
|
end
|
||||||
|
|
||||||
Es gibt auch eine Digest-Liste (eine Liste, die Mails zusammengefasst
|
Es gibt auch eine Digest-Liste (eine Liste, die Mails zusammengefasst
|
||||||
sendet). Um sich an dieser Digest-Liste anzumelden, senden Sie eine
|
sendet). Um sich an dieser Digest-Liste anzumelden, senden Sie eine
|
||||||
Email an pgsql-general-digest-request@PostgreSQL.org mit folgendem
|
Email an pgsql-general-digest-request@postgresql.org mit folgendem
|
||||||
Text:
|
Text:
|
||||||
subscribe
|
subscribe
|
||||||
end
|
end
|
||||||
|
|
||||||
Es gibt noch die Bug-Mailingliste. Die Anmeldung für diese Liste
|
Es gibt noch die Bug-Mailingliste. Die Anmeldung für diese Liste
|
||||||
erfolgt durch eine Email an bugs-request@PostgreSQL.org mit folgendem
|
erfolgt durch eine Email an bugs-request@postgresql.org mit folgendem
|
||||||
Text:
|
Text:
|
||||||
subscribe
|
subscribe
|
||||||
end
|
end
|
||||||
|
|
||||||
Die Entwickler-Mailingliste kann mit einer Email an
|
Die Entwickler-Mailingliste kann mit einer Email an
|
||||||
pgsql-hackers-request@PostgreSQL.org abonniert werden. Die Email muß
|
pgsql-hackers-request@postgresql.org abonniert werden. Die Email muß
|
||||||
ebenfalls folgenden Text enthalten:
|
ebenfalls folgenden Text enthalten:
|
||||||
subscribe
|
subscribe
|
||||||
end
|
end
|
||||||
|
|
||||||
Eine deutschsprachige Mailing-Liste gibt es bei Yahoo Groups:
|
Eine deutschsprachige Mailing-Liste gibt es ebenfalls:
|
||||||
http://de.groups.yahoo.com/group/postgres/; die Liste kann mit einer
|
http://archives.postgresql.org/pgsql-de-allgemein/; die Liste kann
|
||||||
leeren E-Mail an postgres-subscribe@yahoogroups.de abonniert werden.
|
hier abonniert werden.
|
||||||
|
|
||||||
Weitere Mailinglisten und Informationen zu PostgreSQL befinden sich
|
Weitere Mailinglisten und Informationen zu PostgreSQL befinden sich
|
||||||
auf der PostgreSQL-Homepage:
|
auf der PostgreSQL-Homepage:
|
||||||
|
|
||||||
http://www.PostgreSQL.org
|
http://www.postgresql.org
|
||||||
|
|
||||||
Es gibt außerdem einen IRC-Channel bei EFNet und bei Freenode, Channel
|
Es gibt außerdem einen IRC-Channel bei EFNet und bei Freenode, Channel
|
||||||
#PostgreSQL. Unter UNIX/Linux können Sie mit z.B. irc -c '#PostgreSQL'
|
#PostgreSQL. Unter UNIX/Linux können Sie mit z.B. irc -c '#PostgreSQL'
|
||||||
"$USER" irc.phoenix.net bzw. irc -c '#PostgreSQL' "$USER"
|
"$USER" irc.freenode.net. bzw. irc -c '#PostgreSQL' "$USER"
|
||||||
irc.freenode.net. daran teilnehmen.
|
irc.phoenix.net daran teilnehmen.
|
||||||
|
|
||||||
Eine Liste von Unternehmen, die Support für PostgreSQL auf
|
Eine Liste von Unternehmen, die Support für PostgreSQL auf
|
||||||
kommerzieller Basis leisten, kann unter
|
kommerzieller Basis leisten, kann unter
|
||||||
|
@ -294,16 +294,16 @@
|
||||||
|
|
||||||
Einige Handbücher, Man-Pages und einige kleine Testprogramme sind in
|
Einige Handbücher, Man-Pages und einige kleine Testprogramme sind in
|
||||||
der Distribution enthalten. Siehe das /doc-Verzeichnis. Ausserdem sind
|
der Distribution enthalten. Siehe das /doc-Verzeichnis. Ausserdem sind
|
||||||
alle Handbücher online unter http://www.PostgreSQL.org/docs/
|
alle Handbücher online unter http://www.postgresql.org/docs/
|
||||||
verfügbar.
|
verfügbar.
|
||||||
|
|
||||||
Zwei Bücher zu PostgreSQL sind online verfügbar unter
|
Zwei Bücher zu PostgreSQL sind online verfügbar unter
|
||||||
http://www.PostgreSQL.org/docs/awbook.html und
|
http://www.postgresql.org/docs/awbook.html und
|
||||||
http://www.commandprompt.com/ppbook/ .
|
http://www.commandprompt.com/ppbook/ .
|
||||||
|
|
||||||
Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter
|
Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter
|
||||||
http://techdocs.PostgreSQL.org/techdocs/bookreviews.php Diverse
|
http://techdocs.postgresql.org/techdocs/bookreviews.php Diverse
|
||||||
technische Artikel befinden sich unter http://techdocs.PostgreSQL.org/
|
technische Artikel befinden sich unter http://techdocs.postgresql.org/
|
||||||
.
|
.
|
||||||
|
|
||||||
psql hat einige nützliche \d-Befehle, um Informationen über Typen,
|
psql hat einige nützliche \d-Befehle, um Informationen über Typen,
|
||||||
|
@ -312,13 +312,13 @@
|
||||||
1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
|
1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
|
||||||
|
|
||||||
PostgreSQL unterstützt eine erweiterte Teilmenge von SQL-92. Siehe
|
PostgreSQL unterstützt eine erweiterte Teilmenge von SQL-92. Siehe
|
||||||
unsere TODO-Liste unter http://developer.PostgreSQL.org/todo.php für
|
unsere TODO-Liste unter http://developer.postgresql.org/todo.php für
|
||||||
eine Auflistung der bekannten Bugs, fehlenden Features und zukünftigen
|
eine Auflistung der bekannten Bugs, fehlenden Features und zukünftigen
|
||||||
Pläne.
|
Pläne.
|
||||||
|
|
||||||
1.10) Wie kann ich SQL lernen?
|
1.10) Wie kann ich SQL lernen?
|
||||||
|
|
||||||
Das PostgreSQL Book auf http://www.PostgreSQL.org/docs/awbook.html
|
Das PostgreSQL Book auf http://www.postgresql.org/docs/awbook.html
|
||||||
bietet eine Einführung in SQL. Ein weiteres PostgreSQL-Buch befindet
|
bietet eine Einführung in SQL. Ein weiteres PostgreSQL-Buch befindet
|
||||||
sich unter http://www.commandprompt.com/ppbook . Es gibt zudem nette
|
sich unter http://www.commandprompt.com/ppbook . Es gibt zudem nette
|
||||||
Tutorials unter http://www.intermedia.net/support/sql/sqltut.shtm ,
|
Tutorials unter http://www.intermedia.net/support/sql/sqltut.shtm ,
|
||||||
|
@ -355,26 +355,26 @@
|
||||||
1.13) Wie sende ich einen Fehlerbericht?
|
1.13) Wie sende ich einen Fehlerbericht?
|
||||||
|
|
||||||
Bitte besuchen Sie die PostgreSQL-BugTool-Seite
|
Bitte besuchen Sie die PostgreSQL-BugTool-Seite
|
||||||
http://www.PostgreSQL.org/bugs/, die Hinweise und Anleitungen zur
|
http://www.postgresql.org/bugform.html, die Hinweise und Anleitungen
|
||||||
Einreichung von Fehlerberichten enthält.
|
zur Einreichung von Fehlerberichten enthält.
|
||||||
|
|
||||||
Überprüfe auch den ftp-Server ftp://ftp.PostgreSQL.org/pub, um
|
Überprüfe auch den ftp-Server ftp://ftp.postgresql.org/pub/, um
|
||||||
nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches
|
nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches
|
||||||
gibt.
|
gibt.
|
||||||
|
|
||||||
1.14) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
|
1.14) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
|
||||||
|
|
||||||
Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,
|
Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,
|
||||||
Leistung, Zuverlässigkeit, Support und Preis.
|
Performanz, Zuverlässigkeit, Support und Preis.
|
||||||
|
|
||||||
Eigenschaften
|
Eigenschaften
|
||||||
PostgreSQL besitt die meisten Eigenschaften - wie
|
PostgreSQL besitt die meisten Eigenschaften - wie
|
||||||
Transaktionen, Unterabfragen (Subqueries), Trigger, Views und
|
Transaktionen, Unterabfragen (Subqueries), Trigger, Views und
|
||||||
verfeinertes Locking - die bei großen kommerziellen DBMS
|
verfeinertes Locking - die bei großen kommerziellen DBMS
|
||||||
vorhanden sind. Es bietet außerdem einige anderen
|
vorhanden sind. Es bietet außerdem einige anderen
|
||||||
Eigenschaften, die diese nicht haben, wie benutzerbestimmte
|
Eigenschaften, die diese nicht immer haben, wie
|
||||||
Typen, Vererbung, Regeln, und die Multi-Versionen-Steuerung zum
|
benutzerbestimmte Typen, Vererbung, Regeln, und die
|
||||||
Verringern konkurrierender Locks.
|
Multi-Versionen-Steuerung zum Verringern konkurrierender Locks.
|
||||||
|
|
||||||
Performanz
|
Performanz
|
||||||
PostgreSQL weist eine Performanz auf, die mit der von
|
PostgreSQL weist eine Performanz auf, die mit der von
|
||||||
|
@ -384,29 +384,23 @@
|
||||||
|
|
||||||
Im Vergleich zu MySQL oder abgespeckten Datenbank-Systemen ist
|
Im Vergleich zu MySQL oder abgespeckten Datenbank-Systemen ist
|
||||||
PostgreSQL in Lastsituationen - z.B. bei zeitgleichen Zugriffen
|
PostgreSQL in Lastsituationen - z.B. bei zeitgleichen Zugriffen
|
||||||
durch mehrere Nutzer, komplexen Abfragen oder gleichzeitigen
|
durch mehrere Nutzer, bei komplexen Abfragen oder
|
||||||
Lese- und Schreibzugriffen schneller. MySQL ist nur bei
|
gleichzeitigen Lese- und Schreibzugriffen schneller. MySQL ist
|
||||||
einfacheren SELECT-Abfragen mit wenigen Nutzern schneller.
|
nur bei einfacheren SELECT-Abfragen mit wenigen Nutzern im
|
||||||
MySQL hat allerdings wenige der oben erwähnten Eigenschaften.
|
Vorteil. MySQL besitzt allerdings nur wenige der im Punkt
|
||||||
PostgreSQL setzt auf Zuverlässigkeit und Funktionsumfang, dabei
|
"Eigenschaften" genannten Features. PostgreSQL setzt auf
|
||||||
wird selbstredend ständig an Performanz-Verbesserungen
|
Zuverlässigkeit und Funktionsumfang, dabei wird selbstredend
|
||||||
gearbeitet. Ein interessanter Vergleich zwischen PostgreSQL und
|
ständig an Performanz-Verbesserungen gearbeitet.
|
||||||
MySQL befindet sich unter dieser URL:
|
|
||||||
http://openacs.org/philosophy/why-not-mysql.html Zu beachten
|
|
||||||
ist außerdem, daß die MySQL-Hersteller zwar ihre Produkte als
|
|
||||||
Open-Source vertreiben, beim kommerziellen Einsatz müssen
|
|
||||||
jedoch gemäß den Nutzungsbedingungen Lizenzgebühren entrichtet
|
|
||||||
werden.
|
|
||||||
|
|
||||||
Zuverlässigkeit
|
Zuverlässigkeit
|
||||||
Wir stellen fest, dass ein DBMS wertlos ist, wenn es nicht
|
Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht
|
||||||
zuverlässig arbeitet. Wir bemühen uns, nur streng geprüften,
|
zuverlässig arbeitet. Daher bemühen wir uns, nur streng
|
||||||
beständigen Code freizugeben, der nur ein Minimum an
|
geprüften und beständigen Code freizugeben, der nur ein Minimum
|
||||||
Programmfehler aufweist. Jede Freigabe hat mindestens einen
|
an Programmfehlern aufweist. Jede Freigabe hat mindestens einen
|
||||||
Monat Betatest-Phase hinter sich, und unsere Freigabehistorie
|
Monat Betatest-Phase hinter sich, und unsere Freigabehistorie
|
||||||
beweist, dass wir stabile, solide Versionen freigeben, die im
|
beweist, dass wir stabile und solide Versionen freigeben, die
|
||||||
Produktionsbetrieb genutzt werden können. Wir glauben, dass wir
|
im Produktionsbetrieb genutzt werden können. Wir glauben, dass
|
||||||
im Vergleich mit anderer Datenbanksoftware vorteilhaft
|
wir im Vergleich mit anderer Datenbanksoftware vorteilhaft
|
||||||
dastehen.
|
dastehen.
|
||||||
|
|
||||||
Support
|
Support
|
||||||
|
@ -414,15 +408,15 @@
|
||||||
einer großen Gruppe von Entwicklern und Benutzern mögliche
|
einer großen Gruppe von Entwicklern und Benutzern mögliche
|
||||||
Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung
|
Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung
|
||||||
garantieren, kommerzielle DBMS tun dies aber auch nicht. Der
|
garantieren, kommerzielle DBMS tun dies aber auch nicht. Der
|
||||||
direkte Kontakt zur Entwickler- und Benutzergemeinschaft, der
|
direkte Kontakt zur Entwickler- und Benutzergemeinschaft und
|
||||||
Zugriff auf die Handbücher und auf den Quellcode ermöglicht
|
der Zugriff auf die Handbücher und den Quellcode ermöglicht
|
||||||
einen im Vergleich zu anderen DBMS höherwertigen Support. Es
|
einen im Vergleich zu anderen DBMS höherwertigeren Support. Es
|
||||||
gibt jedoch auch Anbieter von kommerziellen Support-Leistungen
|
gibt jedoch auch Anbieter von kommerziellen Support-Leistungen
|
||||||
(siehe FAQ-Punkt 1.6).
|
(siehe FAQ-Punkt 1.6).
|
||||||
|
|
||||||
Preis
|
Preis
|
||||||
PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie
|
PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie
|
||||||
für die nicht-kommerzielle Nutzung. Sie können den
|
auch für die nicht-kommerzielle Nutzung. Sie können den
|
||||||
PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in
|
PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in
|
||||||
der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr
|
der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr
|
||||||
Produkt integrieren.
|
Produkt integrieren.
|
||||||
|
@ -438,8 +432,8 @@
|
||||||
Fortschritt des Projekts.
|
Fortschritt des Projekts.
|
||||||
|
|
||||||
Selbstverständlich ist diese Infrastruktur nicht billig. Es gibt eine
|
Selbstverständlich ist diese Infrastruktur nicht billig. Es gibt eine
|
||||||
Reihe von einmaligen und monatlich wiederkehrenden Kosten, die für den
|
Reihe von einmaligen und monatlich anfallenden Kosten, die für den
|
||||||
Weiterbetrieb beglichen werden müssen. Falls Sie oder Ihre Firma dazu
|
Betrieb beglichen werden müssen. Falls Sie oder Ihre Firma dazu
|
||||||
finanziell beitragen können, besuchen Sie bitte die URL
|
finanziell beitragen können, besuchen Sie bitte die URL
|
||||||
http://store.pgsql.com/shopping/ wo Sie eine Spende abgeben können.
|
http://store.pgsql.com/shopping/ wo Sie eine Spende abgeben können.
|
||||||
|
|
||||||
|
@ -452,8 +446,8 @@
|
||||||
Eine Möglichkeit der nicht-finanziellen Untetstützung besteht übrigens
|
Eine Möglichkeit der nicht-finanziellen Untetstützung besteht übrigens
|
||||||
darin, für http://advocacy.postgresql.org (en.) bzw.
|
darin, für http://advocacy.postgresql.org (en.) bzw.
|
||||||
http://advocacy.postgresql.org/?lang=de (dt.) einen Bericht über den
|
http://advocacy.postgresql.org/?lang=de (dt.) einen Bericht über den
|
||||||
erfolgreichen Einsatz von PostgreSQL in Ihrem Unternehmen oder
|
erfolgreichen Einsatz von PostgreSQL in Ihrem Unternehmen oder in
|
||||||
Organisation bereitzustellen.
|
Ihrer Organisation bereitzustellen.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
Fragen zu Benutzerprogrammen
|
Fragen zu Benutzerprogrammen
|
||||||
|
@ -466,7 +460,7 @@
|
||||||
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
|
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
|
||||||
heruntergeladen werden.
|
heruntergeladen werden.
|
||||||
|
|
||||||
OpenLink ODBC kann unter http://www.openlinksw.com geholt werden. Die
|
OpenLink ODBC kann unter http://www.openlinksw.com bezogen werden. Die
|
||||||
Software arbeitet mit dem Standard-ODBC-Client dieser Firma, so dass
|
Software arbeitet mit dem Standard-ODBC-Client dieser Firma, so dass
|
||||||
PostgreSQL-ODBC auf jeder Client-Plattform zur Verfügung steht, die
|
PostgreSQL-ODBC auf jeder Client-Plattform zur Verfügung steht, die
|
||||||
unterstützt wird (Win, Mac, Unix, VMS).
|
unterstützt wird (Win, Mac, Unix, VMS).
|
||||||
|
@ -490,11 +484,11 @@
|
||||||
2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
|
2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
|
||||||
|
|
||||||
Es gibt mehrere grafische Schnittstellen für PostgreSQL, darunter
|
Es gibt mehrere grafische Schnittstellen für PostgreSQL, darunter
|
||||||
PgAccess ( http://www.pgaccess.org), PgAdmin III
|
PgAccess ( http://www.pgaccess.org), pgAdmin III
|
||||||
(http://www.pgadmin.org, RHDB Admin (http://sources.redhat.com/rhdb/ )
|
(http://www.pgadmin.org, RHDB Admin (http://sources.redhat.com/rhdb/ )
|
||||||
und Rekall ( http://www.thekompany.com/products/rekall/, proprietär).
|
und Rekall ( http://www.thekompany.com/products/rekall/,
|
||||||
Es gibt außerdem PhpPgAdmin ( http://phppgadmin.sourceforge.net/ ),
|
GPL/proprietär). Es gibt außerdem phpPgAdmin (
|
||||||
eine web-basierte Schnittstelle.
|
http://phppgadmin.sourceforge.net/ ), eine web-basierte Schnittstelle.
|
||||||
|
|
||||||
2.4) Welche Programmiersprachen und Schnittstellen gibt es?
|
2.4) Welche Programmiersprachen und Schnittstellen gibt es?
|
||||||
|
|
||||||
|
@ -537,10 +531,8 @@
|
||||||
Serverprozesse ab, die Sie für postmaster konfiguriert haben. Bei den
|
Serverprozesse ab, die Sie für postmaster konfiguriert haben. Bei den
|
||||||
voreingestellten Werten für Puffer und Prozesse benötigen Sie bei den
|
voreingestellten Werten für Puffer und Prozesse benötigen Sie bei den
|
||||||
meisten Systemen ein Minimum von ca. 1 MB. Der "PostgreSQL
|
meisten Systemen ein Minimum von ca. 1 MB. Der "PostgreSQL
|
||||||
Administrator's Guide"
|
Administrator's Guide" () enthält weitere Informationen zu Shared
|
||||||
(http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=k
|
Memory und Semaphores.
|
||||||
ernel-resources.html) enthält weitere Informationen zu Shared Memory
|
|
||||||
und Semaphores.
|
|
||||||
|
|
||||||
3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich
|
3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich
|
||||||
"IpcSemaphoreCreate"-Fehlermeldungen. Warum?
|
"IpcSemaphoreCreate"-Fehlermeldungen. Warum?
|
||||||
|
@ -588,25 +580,29 @@
|
||||||
reduziert den Transaktionsaufwand. Überlegen Sie auch, bei größeren
|
reduziert den Transaktionsaufwand. Überlegen Sie auch, bei größeren
|
||||||
Datenänderungen Indizes zu löschen und danach wiederherzustellen.
|
Datenänderungen Indizes zu löschen und danach wiederherzustellen.
|
||||||
|
|
||||||
Es gibt verschiedene Tuning-Optionen. Sie können fsync() ausschalten,
|
Es gibt verschiedene Tuning-Optionen, die im Handbuch dokumentiert
|
||||||
indem Sie beim Starten des postmaster die Optionen -o -F angeben. Das
|
sind (Administration Guide/Server Run-time Environment/Run-time
|
||||||
hindert fsync()-Operationen daran, nach jeder Transaktion die Daten
|
Configuration). Sie können fsync() ausschalten, indem Sie beim Starten
|
||||||
direkt auf die Festplatte zu schreiben.
|
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 -B Option des postmaster die Anzahl der Shared
|
Sie können auch mit der shared_buffers Option des postmaster die
|
||||||
Memory Puffer für die Backend-Prozesse erhöhen. Falls Sie diesen Wert
|
Anzahl der Shared Memory Puffer für die Backend-Prozesse erhöhen.
|
||||||
jedoch zu hoch setzen, kann es vorkommen, dass der postmaster nicht
|
Falls Sie diesen Wert jedoch zu hoch setzen, kann es vorkommen, dass
|
||||||
startet, weil die Obergrenze der Speicherzuweisung für Shared Memory
|
der postmaster nicht startet, weil die Obergrenze der
|
||||||
überschritten wird. Jeder Puffer ist 8 kB groß, standardmäßig gibt es
|
Speicherzuweisung für Shared Memory überschritten wird. Jeder Puffer
|
||||||
64 Puffer.
|
ist 8 kB groß, voreingestellt sind 1000 Puffer.
|
||||||
|
|
||||||
Sie können auch die -S Option des Backends nutzen, um die Größe des
|
Die sort_mem (ab PostgreSQL 8.0: work_mem)-Optionen des Backends
|
||||||
Speicherplatzes für temporäres Sortieren zu erhöhen. Der -S Wert wird
|
können benutzt werden, um die Größe des Speicherplatzes für temporäres
|
||||||
in Kilobyte gemessen und ist standardmäßig auf 512 kB festgelegt.
|
Sortieren zu erhöhen. Die Werte werden in Kilobyte gemessen und sind
|
||||||
|
standardmäßig auf 1024 (d.h. 1MB) festgelegt.
|
||||||
|
|
||||||
Die CLUSTER-Anweisung kann benutzt werden, um Daten in Basistabellen
|
Die CLUSTER-Anweisung kann benutzt werden, um Daten in Basistabellen
|
||||||
zu gruppieren, so dass sie auf einen Index zusammengebracht werden.
|
zu gruppieren, so dass - um einen schnelleren Zugriff zu erreichen -
|
||||||
Siehe auch die CLUSTER(l) Man-Page für weitere Details.
|
die physikalische Speicherung der Reihenfolge eines der Indexe
|
||||||
|
entspricht. Siehe auch die CLUSTER(l) Man-Page für weitere Details.
|
||||||
|
|
||||||
3.7) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?
|
3.7) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?
|
||||||
|
|
||||||
|
@ -618,9 +614,9 @@
|
||||||
halten das Programm an, wenn etwas Unerwartetes passiert.
|
halten das Programm an, wenn etwas Unerwartetes passiert.
|
||||||
|
|
||||||
Sowohl der postmaster als auch postgres stellen mehrere Debug-Optionen
|
Sowohl der postmaster als auch postgres stellen mehrere Debug-Optionen
|
||||||
zur Verfügung. Stellen Sie zuerst sicher, dass Sie den Standard-Output
|
zur Verfügung. Zuerst sollten Sie sichergehen, dass Sie die Ausgaben
|
||||||
und den Fehlerkanal in eine Datei umleiten, wenn Sie den postmaster
|
über den Standard-Output und den Standard-Error in eine Datei
|
||||||
starten:
|
umleiten, wenn Sie den postmaster starten:
|
||||||
cd /usr/local/pgsql
|
cd /usr/local/pgsql
|
||||||
./bin/postmaster >server.log 2>&1 &
|
./bin/postmaster >server.log 2>&1 &
|
||||||
|
|
||||||
|
@ -632,28 +628,32 @@
|
||||||
Information - angibt. Achtung, hohe Debug-Levels erzeugen schnell
|
Information - angibt. Achtung, hohe Debug-Levels erzeugen schnell
|
||||||
große Logdateien!
|
große Logdateien!
|
||||||
|
|
||||||
Wenn der postmaster nicht läuft, können Sie sogar den postgres-Backend
|
Wenn der postmaster nicht läuft, können Sie das postgres-Backend sogar
|
||||||
von der Befehlszeile ausführen und eine SQL-Anweisung direkt eingeben.
|
von der Befehlszeile ausführen und eine SQL-Anweisung direkt eingeben.
|
||||||
Dies ist nur für Debugging-Zwecke zu empfehlen. Beachten Sie, dass ein
|
Dies ist allerdings nur für Debugging-Zwecke zu empfehlen. Beachten
|
||||||
Zeilenumbruch, und nicht das Semikolon die SQL-Anweisung beendet.
|
Sie, dass hierbei ein Zeilenumbruch, und nicht - wie sonst üblich -
|
||||||
Falls Sie PostgreSQL mit Debugging-Symbolen kompiliert haben, können
|
das Semikolon die SQL-Anweisung beendet. Falls Sie PostgreSQL mit
|
||||||
Sie mit einem Debugger sehen, was passiert. Da das Backend jedoch
|
Debugging-Symbolen kompiliert haben, können Sie mit einem Debugger
|
||||||
nicht vom postmaster gestartet wurde, läuft es nicht in der gleichen
|
sehen, was passiert. Da das Backend jedoch nicht vom postmaster
|
||||||
Umgebung und deshalb können einige locking/backend Operationen nicht
|
gestartet wurde, läuft es nicht in der gleichen Umgebung und deshalb
|
||||||
reproduziert werden.
|
können einige locking-Vorgänge sowie die Kommunikation zwischen den
|
||||||
|
Backends nicht reproduziert werden.
|
||||||
|
|
||||||
Wenn dagegen der postmaster läuft, führen Sie psql in einem Fenster
|
Wenn der postmaster hingegen läuft, führen Sie psql in einem Fenster
|
||||||
aus, dann ermitteln Sie die Prozessnummer (PID) des
|
aus, ermitteln Sie die Prozessnummer (PID) des postgres-Prozesses, der
|
||||||
postgres-Prozesses, der von psql verwendet wird. Binden Sie einen
|
von psql verwendet wird (mit
|
||||||
Debugger an diese PID und führen Sie Abfragen von psql aus. Wenn Sie
|
SELECT pg_backend_pid()
|
||||||
den postgres-Serverstart analysieren wollen, setzen Sie die
|
|
||||||
Umgebungsvariable PGOPTIONS="-W n", und starten Sie dann psql. Dies
|
). Binden Sie einen Debugger an diese PID und führen Sie Abfragen von
|
||||||
verzögert den Start um n Sekunden, damit Sie einen Debugger an den
|
psql aus. Wenn Sie den postgres-Serverstart analysieren wollen, setzen
|
||||||
Prozess binden können und ggf. Breakpoints setzen, bevor die
|
Sie die Umgebungsvariable PGOPTIONS="-W n", und starten Sie dann psql.
|
||||||
|
Dies verzögert den Start um n Sekunden, damit Sie einen Debugger an
|
||||||
|
den Prozess binden und ggf. Breakpoints setzen können, bevor die
|
||||||
Startsequenz begonnen wird.
|
Startsequenz begonnen wird.
|
||||||
|
|
||||||
Das Programm postgres hat auch die Optionen -s, -A und -t, die bei der
|
Es gibt verschiedene Einstellungen (die log_*-Gruppe), die diverse
|
||||||
Fehlersuche und Performanzmessung sehr nützlich sein können.
|
Server-Statistik ausgeben und daher bei der Fehlersuche und
|
||||||
|
Performanzmessung sehr nützlich sein können.
|
||||||
|
|
||||||
Sie können die Anwendung auch mit Profiling kompilieren, um zu sehen,
|
Sie können die Anwendung auch mit Profiling kompilieren, um zu sehen,
|
||||||
welche Funktionen wieviel Ausführungszeit beanspruchen. Das Backend
|
welche Funktionen wieviel Ausführungszeit beanspruchen. Das Backend
|
||||||
|
@ -663,14 +663,14 @@
|
||||||
-DLINUX_PROFILE kompiliert werden muß, um Profiling nutzen zu können.
|
-DLINUX_PROFILE kompiliert werden muß, um Profiling nutzen zu können.
|
||||||
|
|
||||||
3.8) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
|
3.8) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine
|
||||||
Verbindung augzubauen versuche. Warum?
|
Verbindung aufzubauen versuche. Warum?
|
||||||
|
|
||||||
Sie müssen die maximale Anzahl der gleichzeitig ausfühbaren Backend-
|
Sie müssen die maximale Anzahl der gleichzeitig ausführbaren Backend-
|
||||||
Prozesse hochsetzen.
|
Prozesse hochsetzen.
|
||||||
|
|
||||||
Die Voreinstellung ist 32 Prozesse. Sie können diese erhöhen, indem
|
Die Voreinstellung erlaubt 32 Prozesse. Sie können diese erhöhen,
|
||||||
Sie den postmaster mit einem entsprechenden -N Parameter starten bzw.
|
indem Sie den postmaster mit einem entsprechenden -N Parameter starten
|
||||||
die Konfigurationsdatei postgresql.conf anpassen.
|
bzw. die Konfigurationsdatei postgresql.conf anpassen.
|
||||||
|
|
||||||
Bitte beachten Sie, dass Sie auch -B auf ein Wert größer als die
|
Bitte beachten Sie, dass Sie auch -B auf ein Wert größer als die
|
||||||
Voreinstellung von 64 setzen müssen, wenn Sie -N auf einen Wert höher
|
Voreinstellung von 64 setzen müssen, wenn Sie -N auf einen Wert höher
|
||||||
|
@ -697,15 +697,15 @@
|
||||||
|
|
||||||
Die temporären Dateien sollten automatisch gelöscht werden. Falls das
|
Die temporären Dateien sollten automatisch gelöscht werden. Falls das
|
||||||
Backend jedoch während einer Sortierung abstürzen sollte, bleiben sie
|
Backend jedoch während einer Sortierung abstürzen sollte, bleiben sie
|
||||||
erhalten. Nach einem Neustart des postmaster werden sie auomatisch
|
erhalten. Nach einem Neustart des postmaster werden sie dann aber
|
||||||
gelöscht.
|
wieder automatisch gelöscht.
|
||||||
|
|
||||||
3.10) Warum muß ich bei jeder neuen Hauptversion von PostgreSQL die
|
3.10) Warum muß ich bei jeder neuen Hauptversion von PostgreSQL die
|
||||||
komplette Datenbank exportieren und anschließend reimportieren?
|
komplette Datenbank exportieren und anschließend reimportieren?
|
||||||
|
|
||||||
Zwischen "kleinen" PostgreSQL-Versionsänderungen (z.B. zwischen 7.2
|
Zwischen "kleinen" PostgreSQL-Versionsänderungen (z.B. zwischen 7.2
|
||||||
und 7.2.1) werden keine strukturellen Änderungen durchgeführt, wodurch
|
und 7.2.1) werden keine strukturellen Änderungen durchgeführt, wodurch
|
||||||
ein erneutes Aus- und Einlesen der Daten nicht benötigt wird.
|
ein erneutes Aus- und Einlesen der Daten nicht erforderlich ist.
|
||||||
Allerdings wird bei "großen" Versionsänderungen (z.B. zwischen 7.2 und
|
Allerdings wird bei "großen" Versionsänderungen (z.B. zwischen 7.2 und
|
||||||
7.3) oft das interne Format der Systemtabellen und Datendateien
|
7.3) oft das interne Format der Systemtabellen und Datendateien
|
||||||
angepasst. Diese Änderungen sind oft sehr komplex, wodurch die
|
angepasst. Diese Änderungen sind oft sehr komplex, wodurch die
|
||||||
|
@ -714,7 +714,7 @@
|
||||||
Format ausgegeben, wodurch die Importierung in das neue interne Format
|
Format ausgegeben, wodurch die Importierung in das neue interne Format
|
||||||
ermöglicht wird.
|
ermöglicht wird.
|
||||||
|
|
||||||
Bei Versionenwechseln, wo kein Formatänderungen stattgefunden haben,
|
Bei Upgrades, bei denen keine Formatänderungen stattgefunden haben,
|
||||||
kann das pg_upgrade-Skript benutzt werden, um die Daten ohne Aus- und
|
kann das pg_upgrade-Skript benutzt werden, um die Daten ohne Aus- und
|
||||||
Einlesen zu übertragen. Die jeweilige Dokumentation gibt an, ob für
|
Einlesen zu übertragen. Die jeweilige Dokumentation gibt an, ob für
|
||||||
die betreffende Version pg_upgrade verfügbar ist.
|
die betreffende Version pg_upgrade verfügbar ist.
|
||||||
|
@ -744,7 +744,7 @@
|
||||||
Selbst wenn Sie nur die ersten paar Zeilen einer Tabelle abfragen
|
Selbst wenn Sie nur die ersten paar Zeilen einer Tabelle abfragen
|
||||||
möchten, muß unter Umständen die komplette Abfrage abgearbeitet
|
möchten, muß unter Umständen die komplette Abfrage abgearbeitet
|
||||||
werden. Ziehen Sie also möglichst eine Abfrage in Erwägung, die eine
|
werden. Ziehen Sie also möglichst eine Abfrage in Erwägung, die eine
|
||||||
ORDER BY-Anweisung benutzt, die wiederum auf indizierte Spalten
|
ORDER BY-Anweisung benutzt, welche wiederum auf indizierte Spalten
|
||||||
verweist. In diesem Fall kann PostgreSQL direkt nach den gewünschten
|
verweist. In diesem Fall kann PostgreSQL direkt nach den gewünschten
|
||||||
Zeilen suchen und braucht nicht jede mögliche Ergebniszeile
|
Zeilen suchen und braucht nicht jede mögliche Ergebniszeile
|
||||||
abzuarbeiten.
|
abzuarbeiten.
|
||||||
|
@ -756,13 +756,13 @@
|
||||||
SELECT spalte
|
SELECT spalte
|
||||||
FROM tabelle
|
FROM tabelle
|
||||||
ORDER BY random()
|
ORDER BY random()
|
||||||
LIMIT 1;
|
LIMIT 1
|
||||||
|
|
||||||
|
|
||||||
4.3) Wie bekomme ich eine Liste der Tabellen oder anderen Dinge, die ich in
|
4.3) Wie bekomme ich eine Liste der Tabellen oder anderen Dinge, die ich in
|
||||||
psql sehen kann?
|
psql sehen kann?
|
||||||
|
|
||||||
In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weiter
|
In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere
|
||||||
psql-Befehle lassen sich mit \? anzeigen. Sie können sich die Datei
|
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
|
pgsql/src/bin/psql/describe.c mit dem Quellcode für psql ansehen. Sie
|
||||||
enthält die SQL-Abfragen, die die Backslash-Kommandos (\) ausführen.
|
enthält die SQL-Abfragen, die die Backslash-Kommandos (\) ausführen.
|
||||||
|
@ -794,14 +794,14 @@
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
|
|
||||||
Um den Platz zu reklamieren, der von der gelöschten Spalte verwendet
|
Um den Speicherplatz freizugeben, der von der gelöschten Spalte
|
||||||
wurde, führen Sie VACUUM FULL aus.
|
verwendet wurde, führen Sie VACUUM FULL aus.
|
||||||
|
|
||||||
4.5) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?
|
4.5) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?
|
||||||
|
|
||||||
Es bestehen folgende Obergrenzen:
|
Es bestehen folgende Obergrenzen:
|
||||||
Maximale Größe eine Datenbank? unbeschränkt (es existieren
|
Maximale Größe eine Datenbank? unbeschränkt (es existieren
|
||||||
Datenbanken mit 4TB)
|
Datenbanken mit 32 TB)
|
||||||
Maximale Größe einer Tabelle? 32 TB
|
Maximale Größe einer Tabelle? 32 TB
|
||||||
Maximale Größe einer Zeile? 1,6 TB
|
Maximale Größe einer Zeile? 1,6 TB
|
||||||
Maximale Größe einer Spalte? 1 GB
|
Maximale Größe einer Spalte? 1 GB
|
||||||
|
@ -813,17 +813,17 @@
|
||||||
unbeschränkt
|
unbeschränkt
|
||||||
|
|
||||||
Selbstverständlich sind dies theoretische Werte, die oft durch die
|
Selbstverständlich sind dies theoretische Werte, die oft durch die
|
||||||
verfügbaren Platten- und Speicherressourcen eingeschränkt sind.
|
verfügbaren Platten- und Speicherressourcen beschränkt werden. Extreme
|
||||||
Extreme Größen können zu Leistungseinbußen führen.
|
Größen können zu Leistungseinbußen führen.
|
||||||
|
|
||||||
Die maximale Tabellengröße von 32 TB benötigt keine
|
Die maximale Tabellengröße von 32 TB benötigt keine
|
||||||
Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in
|
Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in
|
||||||
Dateien mit einer Größe von 1 GB aufgeteilt, wodurch etwaige
|
Dateien mit einer Größe von je 1 GB aufgeteilt, wodurch etwaige
|
||||||
dateisystem-bedingte Beschränkungen nicht relevant sind.
|
dateisystem-bedingte Beschränkungen nicht relevant sind.
|
||||||
|
|
||||||
Die maximale Tabellengröße und die maximale Anzahl von Spalten können
|
Die maximale Tabellengröße und die maximale Anzahl von Spalten können
|
||||||
gesteigert werden, wenn die Default-Blockgröße auf 32 KB heraufgesetzt
|
vervierfacht werden, indem man die Default-Blockgröße auf 32 KB
|
||||||
wird.
|
heraufsetzt.
|
||||||
|
|
||||||
4.6) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen
|
4.6) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen
|
||||||
Textdatei abzuspeichern?
|
Textdatei abzuspeichern?
|
||||||
|
@ -851,7 +851,7 @@
|
||||||
64 Bytes pro Zeile
|
64 Bytes pro Zeile
|
||||||
|
|
||||||
100.000 Datenzeilen
|
100.000 Datenzeilen
|
||||||
----------------------- = 735 Datenbankseiten (aufgerundet)
|
------------------------ = 735 Datenbankseiten (aufgerundet)
|
||||||
128 Zeilen pro Seite
|
128 Zeilen pro Seite
|
||||||
|
|
||||||
735 Datenbankseiten * 8192 Bytes pro Seite = 6.021.120 Byte (6 MB)
|
735 Datenbankseiten * 8192 Bytes pro Seite = 6.021.120 Byte (6 MB)
|
||||||
|
@ -862,8 +862,8 @@
|
||||||
NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig
|
NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig
|
||||||
Platz in Anspruch nehmen.
|
Platz in Anspruch nehmen.
|
||||||
|
|
||||||
4.7) Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank
|
4.7) Wie finde ich heraus, welche Tabellen, Indizes, Datenbanken oder
|
||||||
definiert sind?
|
Benutzer in der Datenbank definiert sind?
|
||||||
|
|
||||||
psql hat eine Vielzahl von Backslash-Befehlen, mit denen solche
|
psql hat eine Vielzahl von Backslash-Befehlen, mit denen solche
|
||||||
Informationen angezeigt werden können. Der Befehl \? zeigt eine
|
Informationen angezeigt werden können. Der Befehl \? zeigt eine
|
||||||
|
@ -874,23 +874,25 @@
|
||||||
SELECT-Anweisungen, mit deren Hilfe man Information über die
|
SELECT-Anweisungen, mit deren Hilfe man Information über die
|
||||||
Systemtabellen erhalten kann.
|
Systemtabellen erhalten kann.
|
||||||
|
|
||||||
4.8) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?
|
4.8) Meine Abfragen sind langsam oder benutzen die Indizes nicht. Warum?
|
||||||
|
|
||||||
Indizes werden nicht automatisch bei jeder Abfrage verwendet. Indizes
|
Indizes werden nicht automatisch bei jeder Abfrage verwendet. Indizes
|
||||||
werden nur dann verwendet, wenn die abzufragende Tabelle eine
|
werden nur dann verwendet, wenn die abzufragende Tabelle eine
|
||||||
bestimmte Größe übersteigt, und die Abfrage nur eine kleine
|
bestimmte Größe übersteigt, und die Abfrage nur eine kleine
|
||||||
Prozentzahl der Tabellenzeilen abfragt. Grund hierfür ist, dass die
|
Prozentzahl der Tabellenzeilen abfragt. Der Grund hierfür ist der,
|
||||||
durch einen Index verursachten Festplattenzugriffe manchmal langsamer
|
dass die durch einen Index verursachten Festplattenzugriffe manchmal
|
||||||
sind als ein einfaches Auslesen aller Tabellenzeilen (sequentieller
|
länger dauern würden als ein einfaches Auslesen aller Tabellenzeilen
|
||||||
Scan).
|
(sequentieller Scan).
|
||||||
|
|
||||||
Um festzustellen, ob ein Index verwendet werden soll, braucht
|
Um festzustellen, ob ein Index verwendet werden soll, braucht
|
||||||
PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden
|
PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden
|
||||||
durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand
|
durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand
|
||||||
der Statistiken kennt der Abfragenoptimierer die Anzahl der
|
der Statistiken kennt der Abfragenoptimierer die Anzahl der
|
||||||
Tabellenzeilen und kann besser entscheiden, ob Indizes verwendet
|
Tabellenzeilen und kann besser entscheiden, ob Indizes verwendet
|
||||||
werden sollen. Statistiken sind auch bei der Feststellung optimaler
|
werden sollen. Statistiken sind auch bei der Ermittlung der optimalen
|
||||||
JOIN-Reihenfolge und -Methoden wertvoll.
|
JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese
|
||||||
|
regelmässig durchgeführt werden, da sich der Inhalt einer Tabelle ja
|
||||||
|
auch verändert
|
||||||
|
|
||||||
In Versionen vor 8.0 werden Indizes oft nicht benutzt, wenn die
|
In Versionen vor 8.0 werden Indizes oft nicht benutzt, wenn die
|
||||||
jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders
|
jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders
|
||||||
|
@ -917,20 +919,21 @@
|
||||||
|
|
||||||
Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können
|
Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können
|
||||||
Indizes nur unter bestimmten Umständen verwendet werden:
|
Indizes nur unter bestimmten Umständen verwendet werden:
|
||||||
* Der Anfang des Suchmusters muß mit dem Anfang des Strings
|
* Das Suchmuster muss sich an Anfang des Strings befinden, d.h.:
|
||||||
verknüpft werden, d.h.:
|
|
||||||
+ LIKE-Suchmuster dürfen nicht mit % anfangen;
|
+ LIKE-Suchmuster dürfen nicht mit % anfangen;
|
||||||
+ ~ (reguläre Ausdrücke) müssen mit ^ anfangen.
|
+ ~ (reguläre Ausdrücke) müssen mit ^ anfangen.
|
||||||
* Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e])
|
* Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e])
|
||||||
anfangen
|
beginnen.
|
||||||
|
|
||||||
Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B.
|
Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B.
|
||||||
ILIKE bzw. ~*), verwenden keine Indizes. Stattdessen können
|
ILIKE bzw. ~*), verwenden keine Indizes. Stattdessen können
|
||||||
funktionale Indizes verwendet werden, die im Punkt 4.12 beschrieben
|
funktionale Indizes verwendet werden, die im Punkt 4.12 beschrieben
|
||||||
werden.
|
werden.
|
||||||
|
|
||||||
Die C-Locale muß während der Datenbank-Initialisierung mit initdb
|
Die Standard-Locale "C" muss während der Datenbank-Initialisierung mit
|
||||||
bestimmt worden sein.
|
initdb verwendet worden sein, da andere locales den nächstgrößten Wert
|
||||||
|
nicht ermitteln können. Es ist allerdings möglich, einen besonderen
|
||||||
|
text_pattern_ops-Index für solche Fälle zu erstellen.
|
||||||
|
|
||||||
4.9) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine
|
4.9) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine
|
||||||
Abfrage auswertet?
|
Abfrage auswertet?
|
||||||
|
@ -942,11 +945,11 @@
|
||||||
Ein R-Tree Index wird benutzt, um räumliche Daten zu indizieren. Ein
|
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
|
Hash-Index kann nicht für Bereichssuchen genutzt werden. Ein B-Tree
|
||||||
Index kann nur für Bereichssuchen in eindimensionalen Daten genutzt
|
Index kann nur für Bereichssuchen in eindimensionalen Daten genutzt
|
||||||
werden. R-Trees können multi-dimensionale Daten abhandeln. Ein
|
werden. R-Trees können hingegen auch mit multi-dimensionalen Daten
|
||||||
Beispiel: Wenn ein R-Tree Index auf ein Attribut vom Typ POINT
|
umgehen. Ein Beispiel: Wenn ein R-Tree Index auf ein Attribut vom Typ
|
||||||
gebildet wird, dann kann das System Abfragen wie z.B. "Zeige alle
|
POINT gebildet wird, dann kann das System Abfragen wie z.B. "Zeige
|
||||||
Punkte, die sich in einem umgebenden Rechteck befinden" effizienter
|
alle Punkte, die sich in einem umgebenden Rechteck befinden"
|
||||||
beantworten.
|
effizienter beantworten.
|
||||||
|
|
||||||
Die kanonische Veröffentlichung, die das originale R-Tree Design
|
Die kanonische Veröffentlichung, die das originale R-Tree Design
|
||||||
beschreibt, ist:
|
beschreibt, ist:
|
||||||
|
@ -960,9 +963,9 @@
|
||||||
|
|
||||||
Die eingebauten R-Trees können Polygone und Rechtecke verarbeiten.
|
Die eingebauten R-Trees können Polygone und Rechtecke verarbeiten.
|
||||||
Theoretisch können R-Trees auf eine hohe Anzahl von Dimensionen
|
Theoretisch können R-Trees auf eine hohe Anzahl von Dimensionen
|
||||||
erweitert werden. Praktisch bedingt diese Erweiterung eine Menge
|
erweitert werden. Für die Praxis bedeutet eine solche Erweiterung
|
||||||
Arbeit und wir haben derzeit keinerlei Dokumentation darüber, wie das
|
allerdings eine Menge Arbeit und wir haben derzeit keinerlei
|
||||||
zu machen wäre.
|
Dokumentation darüber, wie das zu machen wäre.
|
||||||
|
|
||||||
4.11) Was ist der "Genetic Query Optimizer"?
|
4.11) Was ist der "Genetic Query Optimizer"?
|
||||||
|
|
||||||
|
@ -975,9 +978,9 @@
|
||||||
Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende
|
Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende
|
||||||
ich einen Index bei solchen Suchabfragen?
|
ich einen Index bei solchen Suchabfragen?
|
||||||
|
|
||||||
Der Operator ~ bewirkt die Anwendung eines regulären Ausdrucks. ~*
|
Der Operator ~ wendet einen regulären Ausdruck an und ~* wendet ihn
|
||||||
führt zur Anwendung eines regulären Ausdrucks mit Ignorierung der
|
an, ohne die Groß- und Kleinschreibung zu beachten. Ebenso beachtet
|
||||||
Groß- und Kleinschreibung.
|
LIKE die Groß- und Kleinschreibung, und ILIKE nicht.
|
||||||
|
|
||||||
Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,
|
Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,
|
||||||
werden in der Regel so ausgedruckt:
|
werden in der Regel so ausgedruckt:
|
||||||
|
@ -985,8 +988,8 @@
|
||||||
FROM tabelle
|
FROM tabelle
|
||||||
WHERE LOWER(spalte) = 'abc'
|
WHERE LOWER(spalte) = 'abc'
|
||||||
|
|
||||||
Ein funktionaler Index, der wie folgt erstellt wird, wird auf jeden
|
Hier kann kein normaler Index benutzt werden. Legt man hingegen einen
|
||||||
Fall verwendet:
|
funktionalen Index an, so wird er auf jeden Fall verwendet:
|
||||||
CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))
|
CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))
|
||||||
|
|
||||||
4.13) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
|
4.13) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
|
||||||
|
@ -998,11 +1001,11 @@
|
||||||
Typ interner Name Bemerkungen
|
Typ interner Name Bemerkungen
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
VARCHAR(n) varchar die Größe legt die Maximallänge fest; kein
|
VARCHAR(n) varchar die Größe legt die Maximallänge fest; kein
|
||||||
Ausfüllen mit Leerzeichen
|
Auffüllen mit Leerzeichen
|
||||||
CHAR(n) bpchar mit Leerzeichen gefüllt bis zur angegebenen Länge
|
CHAR(n) bpchar mit Leerzeichen gefüllt bis zur angegebenen Länge
|
||||||
TEXT text Die Länge wird nur durch die maximale Zeilenlänge
|
TEXT text keine obere Schranke für die Länge
|
||||||
beschränkt
|
BYTEA bytea Bytearray mit variabler Länge (auch für
|
||||||
BYTEA bytea Bytearray mit variabler Länge
|
'\0'-Bytes geeignet)
|
||||||
"char" char 1 Zeichen
|
"char" char 1 Zeichen
|
||||||
|
|
||||||
Der interne Name kommt vor allem in den Systemkatalogen und in manchen
|
Der interne Name kommt vor allem in den Systemkatalogen und in manchen
|
||||||
|
@ -1028,10 +1031,11 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
|
|
||||||
BYTEA ist für binäre Daten, besonders für Werte, die NULL-Bytes haben.
|
BYTEA ist für binäre Daten, besonders für Werte, die NULL-Bytes haben.
|
||||||
|
|
||||||
Die hier erwähnten Typen weisen ähnliche Performanzeigenschaften auf.
|
Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften
|
||||||
|
auf.
|
||||||
|
|
||||||
4.15.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des
|
4.15.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des
|
||||||
Werts?
|
Werts (serial/auto-increment)?
|
||||||
|
|
||||||
PostgreSQL bietet einen SERIAL-Datentyp. Dieser erzeugt automatisch
|
PostgreSQL bietet einen SERIAL-Datentyp. Dieser erzeugt automatisch
|
||||||
eine Sequenz auf die angegebene Spalte. Zum Beispiel:
|
eine Sequenz auf die angegebene Spalte. Zum Beispiel:
|
||||||
|
@ -1082,25 +1086,27 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
INSERT-Anweisung zurückgelieferten OID-Wert als einmaligen Wert zu
|
INSERT-Anweisung zurückgelieferten OID-Wert als einmaligen Wert zu
|
||||||
verwenden. Dieser Ansatz ist allerdings PostgreSQL-spezifisch;
|
verwenden. Dieser Ansatz ist allerdings PostgreSQL-spezifisch;
|
||||||
außerdem wird nach ca. 4 Milliarden Einträgen der OID-Wert wieder auf
|
außerdem wird nach ca. 4 Milliarden Einträgen der OID-Wert wieder auf
|
||||||
eine kleine Zahl gesetzt, ist also nicht garantiert einmalig.
|
eine kleine Zahl gesetzt, ist also nicht garantiert immer einmalig
|
||||||
|
oder aufsteigend.
|
||||||
|
|
||||||
In Perl mit dem DBD::Pg-Modul wird der OID-Wert nach einem
|
Mit zum Beispiel dem DBD::Pg-Modul von Perl wird der OID-Wert nach
|
||||||
$sth->excute() über $sth->{pg_oid_status} zurückgeliefert.
|
einem $sth->excute() über $sth->{pg_oid_status} zurückgeliefert.
|
||||||
|
|
||||||
4.15.3) Führen currval() und nextval() zu einer Race-Condition mit anderen
|
4.15.3) Führen currval() und nextval() zu einer Race-Condition mit anderen
|
||||||
Nutzern?
|
Nutzern?
|
||||||
|
|
||||||
Nein. Die Funktionen liefern einen Wert zurück, der von Ihrem Backend
|
Nein. currval() liefert einen Wert zurück, der von Ihrem Backend
|
||||||
bestimmt wird, und der anderen Benutzern nicht zur Verfügung steht.
|
bestimmt wird, und der anderen Benutzern nicht zur Verfügung steht.
|
||||||
|
|
||||||
4.15.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht
|
4.15.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht
|
||||||
zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
|
zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
|
||||||
Sequenz-/SERIAL-Spalte?
|
Sequenz-/SERIAL-Spalte?
|
||||||
|
|
||||||
Um die konkurrente Verarbeitung zu verbessern, werden Sequenzwerte
|
Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern,
|
||||||
nach Bedarf an laufende Transaktionen zugeteilt und erst beim Abschluß
|
werden Sequenzen gerade nicht für andere Transaktionen gesperrt,
|
||||||
der Transaktion gesperrt. Durch abgebrochene Transaktionen werden
|
sondern die Sequenznummern werden den laufenden Transaktionen sofort
|
||||||
Lücken in der Sequenznummerierung verursacht.
|
zugeteilt. Lücken in der Sequenznummerierung werden durch abgebrochene
|
||||||
|
Transaktionen verursacht.
|
||||||
|
|
||||||
4.16) Was ist ein OID? Was ist ein TID?
|
4.16) Was ist ein OID? Was ist ein TID?
|
||||||
|
|
||||||
|
@ -1108,9 +1114,9 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID. Alle
|
die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID. Alle
|
||||||
OIDs, die durch initdb erzeugt werden, sind kleiner als 16384 (siehe
|
OIDs, die durch initdb erzeugt werden, sind kleiner als 16384 (siehe
|
||||||
include/access/transam.h). Alle OIDs, die durch den Benutzer erzeugt
|
include/access/transam.h). Alle OIDs, die durch den Benutzer erzeugt
|
||||||
werden, sind gleich oder größer als dieser Wert. Standardmäßig sind
|
werden, sind größer oder gleich diesem Wert. Standardmäßig sind all
|
||||||
all OIDs nicht nur innerhalb einer Tabelle oder Datenbank, sondern in
|
OIDs nicht nur innerhalb einer Tabelle oder Datenbank, sondern in der
|
||||||
der gesamten PostgreSQL-Installation einmalig.
|
gesamten PostgreSQL-Installation einmalig.
|
||||||
|
|
||||||
PostgreSQL benutzt OIDs in seinen internen Systemtabellen, um Zeilen
|
PostgreSQL benutzt OIDs in seinen internen Systemtabellen, um Zeilen
|
||||||
in JOINs zwischen Tabellen zu verknüpfen. Es ist möglich, einen Index
|
in JOINs zwischen Tabellen zu verknüpfen. Es ist möglich, einen Index
|
||||||
|
@ -1120,7 +1126,7 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
|
|
||||||
OIDs werden allen neuen Zeilen von einem zentralen Bereich, der von
|
OIDs werden allen neuen Zeilen von einem zentralen Bereich, der von
|
||||||
allen Datenbanken genutzt wird, zugewiesen. Nichts hindert Sie daran,
|
allen Datenbanken genutzt wird, zugewiesen. Nichts hindert Sie daran,
|
||||||
die OID zu ändern, oder eine Kopie der Tabelle mit den originalen Oids
|
die OID zu ändern, oder eine Kopie der Tabelle mit den originalen OIDs
|
||||||
anzulegen:
|
anzulegen:
|
||||||
CREATE TABLE new_table(mycol int);
|
CREATE TABLE new_table(mycol int);
|
||||||
SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table;
|
SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table;
|
||||||
|
@ -1128,6 +1134,16 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
COPY new_table WITH OIDS FROM '/tmp/pgtable';
|
COPY new_table WITH OIDS FROM '/tmp/pgtable';
|
||||||
DROP TABLE tmp_table;
|
DROP TABLE tmp_table;
|
||||||
|
|
||||||
|
OIDs werden als 4-Byte Integer gespeichert und laufen bei einem Wert
|
||||||
|
von ungefähr 4 Milliarden über. Niemand hat jemals davon berichtet,
|
||||||
|
dass dies passiert wäre aber wir haben geplant, diese Beschränkung
|
||||||
|
aufzuheben, bevor das jemand ausprobieren kann.
|
||||||
|
|
||||||
|
TIDs werden benutzt, um bestimmte physikalische Zeilen durch Block und
|
||||||
|
Offset Werte zu identifizieren. TIDs verändern sich, sobald Zeilen
|
||||||
|
verändert oder zurückgeladen werden. Sie werden in Indexeinträgen
|
||||||
|
benutzt um auf die physikalischen Zeilen zu zeigen.
|
||||||
|
|
||||||
4.17) Welche Bedeutung haben die verschiedenen Ausdrücke, die in PostgreSQL
|
4.17) Welche Bedeutung haben die verschiedenen Ausdrücke, die in PostgreSQL
|
||||||
benutzt werden (z.B. attribute, class,...)?
|
benutzt werden (z.B. attribute, class,...)?
|
||||||
|
|
||||||
|
@ -1139,7 +1155,7 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
* retrieve, SELECT
|
* retrieve, SELECT
|
||||||
* replace, UPDATE
|
* replace, UPDATE
|
||||||
* append, INSERT
|
* append, INSERT
|
||||||
* oid, serial value
|
* OID, serial value
|
||||||
* portal, cursor
|
* portal, cursor
|
||||||
* range variable, table name, table alias
|
* range variable, table name, table alias
|
||||||
|
|
||||||
|
@ -1200,13 +1216,13 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
FROM tabelle_1
|
FROM tabelle_1
|
||||||
WHERE spalte1 IN (SELECT spalte2 FROM tabelle_2)
|
WHERE spalte1 IN (SELECT spalte2 FROM tabelle_2)
|
||||||
|
|
||||||
in:
|
ersetzen durch:
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM tabelle_1
|
FROM tabelle_1
|
||||||
WHERE EXISTS (SELECT spalte2 FROM tabelle_2 WHERE spalte1 = spalte2)
|
WHERE EXISTS (SELECT spalte2 FROM tabelle_2 WHERE spalte1 = spalte2)
|
||||||
|
|
||||||
Damit diese Abfrage effizient durchgeführt wird, sollte für 'spalte2'
|
Damit diese Abfrage effizient durchgeführt wird, sollte für 'spalte2'
|
||||||
ein Index angelegt worden sein. Ab PostgreSQL 7.4 IN verwendet die
|
ein Index angelegt worden sein. Ab PostgreSQL 7.4 verwendet IN die
|
||||||
gleichen Methoden wie die normale Tabellenverknüpfung und ist daher
|
gleichen Methoden wie die normale Tabellenverknüpfung und ist daher
|
||||||
soger EXISTS vorzuziehen.
|
soger EXISTS vorzuziehen.
|
||||||
|
|
||||||
|
@ -1226,13 +1242,14 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die
|
Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die
|
||||||
Spalte 'spalte' und geben außerdem alle unverknüpften Zeilen in
|
Spalte 'spalte' und geben außerdem alle unverknüpften Zeilen in
|
||||||
tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)
|
tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)
|
||||||
zurück. Ein FULL JOIN würde dagegen alle verknüpften Zeilen sowie
|
zurück. Ein RIGHT JOIN würde hingegen alle unverknüpften Zeilen in
|
||||||
jeweils alle unverknüpften Zeilen aus den beiden Tabellen verknüpfen.
|
tabelle_2 hinzufügen und ein FULL JOIN würde alle verknüpften Zeilen
|
||||||
Die Angabe von OUTER ist nicht zwingend und kann in LEFT, RIGHT und
|
sowie jeweils alle unverknüpften Zeilen aus den beiden Tabellen
|
||||||
FULL-Verknüpfungen weggelassen werden. Normale Verknüpfungen sind
|
zurückliefern. Die Angabe von OUTER ist nicht zwingend und kann in
|
||||||
INNER JOINs.
|
LEFT, RIGHT und FULL-Verknüpfungen weggelassen werden. Normale
|
||||||
|
Verknüpfungen sind INNER JOINs.
|
||||||
|
|
||||||
In früheren Versionen von PostgreSQL können OUTER JOINs mittels UNION
|
In früheren Versionen von PostgreSQL konnten OUTER JOINs mittels UNION
|
||||||
und NOT IN simuliert werden. Zum Beispiel 'tabelle_1' und 'tabelle_2'
|
und NOT IN simuliert werden. Zum Beispiel 'tabelle_1' und 'tabelle_2'
|
||||||
können als LEFT OUTER JOIN auch so verknüpft werden:
|
können als LEFT OUTER JOIN auch so verknüpft werden:
|
||||||
SELECT t1.spalte1, t2.spalte2
|
SELECT t1.spalte1, t2.spalte2
|
||||||
|
@ -1252,7 +1269,7 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
möglich.
|
möglich.
|
||||||
|
|
||||||
contrib/dblink ist eine Erweiterung, die datenbankübergreifende
|
contrib/dblink ist eine Erweiterung, die datenbankübergreifende
|
||||||
Abfragen ermöglicht.
|
Abfragen über Funktionsaufrufe ermöglicht.
|
||||||
|
|
||||||
Es ist natürlich möglich, dass eine Client-Anwendung gleichzeitige
|
Es ist natürlich möglich, dass eine Client-Anwendung gleichzeitige
|
||||||
Verbindungen zu verschiedenen Datenbanken aufbaut und selber
|
Verbindungen zu verschiedenen Datenbanken aufbaut und selber
|
||||||
|
@ -1260,7 +1277,7 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
|
|
||||||
Ab 7.3 unterstützt PostgreSQL schemas, die die Aufteilung einer
|
Ab 7.3 unterstützt PostgreSQL schemas, die die Aufteilung einer
|
||||||
Datenbank in mehrere logische Bereiche ermöglichen. Bei vielen
|
Datenbank in mehrere logische Bereiche ermöglichen. Bei vielen
|
||||||
Anwendungen könnten dies einen geeigneten Ersatz für den Zugriff auf
|
Anwendungen könnten diese einen geeigneten Ersatz für den Zugriff auf
|
||||||
eine andere Datenbank bieten.
|
eine andere Datenbank bieten.
|
||||||
|
|
||||||
4.25) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
|
4.25) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
|
||||||
|
@ -1272,17 +1289,16 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
4.26) Warum kann ich temporäre Tabellen in PL/PgSQL-Funktionen nicht
|
4.26) Warum kann ich temporäre Tabellen in PL/PgSQL-Funktionen nicht
|
||||||
zuverlässig erstellen bzw. löschen?
|
zuverlässig erstellen bzw. löschen?
|
||||||
|
|
||||||
PL/PgSQL verarbeitet die Inhalte einer Funktion in einer Cache. Dies
|
PL/PgSQL verarbeitet die Inhalte einer Funktion in eine Cache. Dies
|
||||||
hat eine unangenehme Nebenwirkung, nämlich dass wenn eine PL/PgSQL-
|
hat eine unangenehme Nebenwirkung, nämlich dass wenn eine PL/PgSQL-
|
||||||
Funktion auf eine temporäre Tabelle zugreift, und diese Tabelle
|
Funktion auf eine temporäre Tabelle zugreift, und diese Tabelle
|
||||||
anschließend gelöscht bzw. neu erstellt wird, die Funktion
|
anschließend gelöscht bzw. neu erstellt wird, die Funktion
|
||||||
fehlschlagen wird, da die gecachte Funktionsinhalte noch auf die alte
|
fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte
|
||||||
temporäre Tabelle zeigen.
|
temporäre Tabelle zeigen.
|
||||||
|
|
||||||
Die Lösung für diese Probleme besteht darin, in der Funktion mittels
|
Die Lösung für diese Probleme besteht darin, in der PL/PgSQL Funktion
|
||||||
EXECUTE auf temporäre Tabellen zuzugreifen. Diese bewirkt, dass bei
|
mittels EXECUTE auf temporäre Tabellen zuzugreifen. Diese bewirkt,
|
||||||
jedem Funktionsruf die betreffende Abfrage von PL/PgSQL neu geparst
|
dass bei jedem Funktionsruf die betreffende Abfrage neu geparst wird.
|
||||||
wird.
|
|
||||||
|
|
||||||
4.27) Welche Möglichkeiten zur Datenbank-Replikation gibt es?
|
4.27) Welche Möglichkeiten zur Datenbank-Replikation gibt es?
|
||||||
|
|
||||||
|
@ -1290,11 +1306,7 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
PostgreSQL. In diesen werden Datenänderungen in der Master-Datenbank
|
PostgreSQL. In diesen werden Datenänderungen in der Master-Datenbank
|
||||||
durchgeführt und an Slave-Datenbanken weitergeleitet. Informationen
|
durchgeführt und an Slave-Datenbanken weitergeleitet. Informationen
|
||||||
über diese Lösungen befinden sich auf der folgenden Seite (unten):
|
über diese Lösungen befinden sich auf der folgenden Seite (unten):
|
||||||
http://gborg.PostgreSQL.org/genpage?replication_research .
|
http://gborg.postgresql.org/genpage?replication_research .
|
||||||
|
|
||||||
Eine Multi-Master-Lösung befindet sich in der Entwicklung. Näheres
|
|
||||||
dazu befindet sich hier:
|
|
||||||
http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php .
|
|
||||||
|
|
||||||
4.28) Welche Möglichkeiten zur Verschlüsselung gibt es?
|
4.28) Welche Möglichkeiten zur Verschlüsselung gibt es?
|
||||||
|
|
||||||
|
@ -1354,7 +1366,7 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
liegt die Übersetzung nicht immer auf dem aktuellsten Stand.
|
liegt die Übersetzung nicht immer auf dem aktuellsten Stand.
|
||||||
|
|
||||||
Die aktuellste Version der deutschen Übersetzung befindet sich immer
|
Die aktuellste Version der deutschen Übersetzung befindet sich immer
|
||||||
unter http://sql-info.de/postgresql/FAQ_german.html. Diese
|
unter http://sql-info.de/de/postgresql/FAQ_german.html. Diese
|
||||||
"Arbeitsversion" enthält eventuell Änderungen, die noch nicht auf der
|
"Arbeitsversion" enthält eventuell Änderungen, die noch nicht auf der
|
||||||
PostgreSQL-Website eingebunden worden sind.
|
PostgreSQL-Website eingebunden worden sind.
|
||||||
|
|
||||||
|
|
|
@ -14,16 +14,16 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
|
|
||||||
<p>Deutsche Übersetzung von Ian Barwick (<a href="mailto:barwick@gmx.net">barwick@gmx.net</a>).</p>
|
<p>Deutsche Übersetzung von Ian Barwick (<a href="mailto:barwick@gmx.net">barwick@gmx.net</a>).</p>
|
||||||
|
|
||||||
<p>Letzte Aktualisierung der deutschen Übersetzung: Di., den 26.10.2004, 22:30 MEZ</p>
|
<p>Letzte Aktualisierung der deutschen Übersetzung: Fr., den 17.12.2004, 22:30 MEZ</p>
|
||||||
|
|
||||||
<p>Die aktuellste Version dieses Dokuments liegt auf der PostgreSQL Website:</p>
|
<p>Die aktuellste Version dieses Dokuments liegt auf der PostgreSQL-Website:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="http://www.PostgreSQL.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</a> (engl.)</li>
|
<li><a href="http://www.postgresql.org/docs/faqs/FAQ.html">http://www.postgresql.org/docs/faqs/FAQ.html</a> (engl.)</li>
|
||||||
<li><a href="http://www.PostgreSQL.org/docs/faqs/FAQ_german.html">http://www.PostgreSQL.org/docs/faqs/FAQ_german.html</a> (dt.)</li>
|
<li><a href="http://www.postgresql.org/docs/faqs/FAQ_german.html">http://www.postgresql.org/docs/faqs/FAQ_german.html</a> (dt.)</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>Übersetzungen dieses Dokuments in andere Sprachen sowie plattform-
|
<p>Übersetzungen dieses Dokuments in andere Sprachen sowie plattform-
|
||||||
spezifische FAQs können unter
|
spezifische FAQs können unter
|
||||||
<a href="http://www.PostgreSQL.org/docs/index.html#faqs">http://www.PostgreSQL.org/docs/index.html#faqs</a>
|
<a href="http://www.postgresql.org/docs/index.html#faqs">http://www.postgresql.org/docs/index.html#faqs</a>
|
||||||
eingesehen werden.</p>
|
eingesehen werden.</p>
|
||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
|
@ -78,7 +78,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
ich den Datentyp einer Spalte?<br />
|
ich den Datentyp einer Spalte?<br />
|
||||||
<a href="#4.5">4.5</a>) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?<br />
|
<a href="#4.5">4.5</a>) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?<br />
|
||||||
<a href="#4.6">4.6</a>) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen Textdatei abzuspeichern?<br />
|
<a href="#4.6">4.6</a>) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen Textdatei abzuspeichern?<br />
|
||||||
<a href="#4.7">4.7</a>) Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank definiert sind?<br />
|
<a href="#4.7">4.7</a>) Wie finde ich heraus, welche Tabellen, Indizes, Datenbanken oder Benutzer in der Datenbank definiert sind?Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank definiert sind?<br />
|
||||||
<a href="#4.8">4.8</a>) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?<br />
|
<a href="#4.8">4.8</a>) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?<br />
|
||||||
<a href="#4.9">4.9</a>) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer ("<em>GEQO</em>") meine Abfrage auswertet?<br />
|
<a href="#4.9">4.9</a>) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer ("<em>GEQO</em>") meine Abfrage auswertet?<br />
|
||||||
<a href="#4.10">4.10</a>) Was ist ein R-Tree Index?<br />
|
<a href="#4.10">4.10</a>) Was ist ein R-Tree Index?<br />
|
||||||
|
@ -90,8 +90,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
<a href="#4.14">4.14</a>) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?<br />
|
<a href="#4.14">4.14</a>) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?<br />
|
||||||
<a href="#4.15.1">4.15.1</a>) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Wertes?<br />
|
<a href="#4.15.1">4.15.1</a>) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Wertes?<br />
|
||||||
<a href="#4.15.2">4.15.2</a>) Wie bekomme ich den Wert einer SERIAL-Sequenz?<br />
|
<a href="#4.15.2">4.15.2</a>) Wie bekomme ich den Wert einer SERIAL-Sequenz?<br />
|
||||||
<a href="#4.15.3">4.15.3</a>) Führen currval() und nextval() zu einer Race-Condition mit anderen
|
<a href="#4.15.3">4.15.3</a>) Führt currval() zu einer Race-Condition mit anderen Nutzern?<br />
|
||||||
Nutzern?<br />
|
|
||||||
<a href="#4.15.4">4.15.4</a>) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht
|
<a href="#4.15.4">4.15.4</a>) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht
|
||||||
zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
|
zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
|
||||||
Sequenz-/<small>SERIAL</small>-Spalte?<br />
|
Sequenz-/<small>SERIAL</small>-Spalte?<br />
|
||||||
|
@ -140,11 +139,11 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
<p>Die PostgreSQL-Entwicklung wird von einem Entwickler-Team durchgeführt,
|
<p>Die PostgreSQL-Entwicklung wird von einem Entwickler-Team durchgeführt,
|
||||||
die alle Teilnehmer der PostgreSQL-Entwicklungs-Mailingliste
|
die alle Teilnehmer der PostgreSQL-Entwicklungs-Mailingliste
|
||||||
sind. Der aktuelle Koordinator ist Marc G. Fournier
|
sind. Der aktuelle Koordinator ist Marc G. Fournier
|
||||||
(<a href="mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</a>) (Anmeldemöglichkeit: siehe unten).
|
(<a href="mailto:scrappy@postgresql.org">scrappy@postgresql.org</a>) (Anmeldemöglichkeit: siehe unten).
|
||||||
Dieses Team ist für die Gesamtentwicklung von PostgreSQL
|
Dieses Team ist für die Gesamtentwicklung von PostgreSQL
|
||||||
verantwortlich. Es handelt sich um ein Gemeinschaftsprojekt, das nicht
|
verantwortlich. Es handelt sich um ein Gemeinschaftsprojekt, das nicht
|
||||||
von einer bestimmten Firma kontrolliert wird. Lesen Sie die Entwickler-FAQ:
|
von einer bestimmten Firma kontrolliert wird. Lesen Sie die Entwickler-FAQ:
|
||||||
<a href="http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html">http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</a>
|
<a href="http://www.postgresql.org/docs/faqs/FAQ_DEV.html">http://www.postgresql.org/docs/faqs/FAQ_DEV.html</a>
|
||||||
wenn Sie an einer Mitarbeit interessiert sind.</p>
|
wenn Sie an einer Mitarbeit interessiert sind.</p>
|
||||||
|
|
||||||
<p>Die Autoren von PostgreSQL 1.01 waren Andrew Yu und Jolly Chen. Viele
|
<p>Die Autoren von PostgreSQL 1.01 waren Andrew Yu und Jolly Chen. Viele
|
||||||
|
@ -157,7 +156,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
|
|
||||||
<p>Der ursprüngliche Name der Software in Berkeley war Postgres. Als die
|
<p>Der ursprüngliche Name der Software in Berkeley war Postgres. Als die
|
||||||
SQL-Funktionalität 1995 hinzugefügt wurde, wurde sein Name zu
|
SQL-Funktionalität 1995 hinzugefügt wurde, wurde sein Name zu
|
||||||
Postgres95 geändert. Der Name wurde Ende 1996 in PostgreSQL geändert.</p>
|
Postgres95 erweitert. Der Name wurde Ende 1996 in PostgreSQL geändert.</p>
|
||||||
|
|
||||||
<h4><a name="1.2">1.2</a>).Welchem Copyright unterliegt PostgreSQL?</h4>
|
<h4><a name="1.2">1.2</a>).Welchem Copyright unterliegt PostgreSQL?</h4>
|
||||||
|
|
||||||
|
@ -212,23 +211,23 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
<p>Unter Windows 95/98/ME ist es nur möglich, den Datenbankserver mit Hilfe
|
<p>Unter Windows 95/98/ME ist es nur möglich, den Datenbankserver mit Hilfe
|
||||||
der Cygwin-Umgebung (Unix-Portierungsbibliotheken) zu betreiben. Weitere
|
der Cygwin-Umgebung (Unix-Portierungsbibliotheken) zu betreiben. Weitere
|
||||||
Informationen hierzu gibt es in der CYGWIN-FAQ:
|
Informationen hierzu gibt es in der CYGWIN-FAQ:
|
||||||
<a href="http://www.postgresql.org/docs/faqs/text/FAQ_CYGWIN">http://www.PostgreSQL.org/docs/faqs/text/FAQ_CYGWIN</a>.</p>
|
<a href="http://www.postgresql.org/docs/faqs/text/FAQ_CYGWIN">http://www.postgresql.org/docs/faqs/text/FAQ_CYGWIN</a>.</p>
|
||||||
|
|
||||||
<p>Eine Portierung für Novell Netware 6 gibt es unter <a href="http://forge.novell.com">http://forge.novell.com</a>.</p>
|
<p>Eine Portierung für Novell Netware 6 gibt es unter <a href="http://forge.novell.com">http://forge.novell.com</a>.</p>
|
||||||
|
|
||||||
<h4><a name="1.5">1.5</a>) Woher bekomme ich PostgreSQL?</h4>
|
<h4><a name="1.5">1.5</a>) Woher bekomme ich PostgreSQL?</h4>
|
||||||
|
|
||||||
<p>Der zentrale FTP-Server für PostgreSQL ist der ftp-Server
|
<p>Der zentrale FTP-Server für PostgreSQL ist der ftp-Server
|
||||||
<a href="ftp://ftp.postgreSQL.org/pub">ftp://ftp.postgreSQL.org/pub</a>. Weitere Mirror-Sites sind auf der
|
<a href="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a>. Weitere Mirror-Sites sind auf der
|
||||||
PostgreSQL-Website aufgelistet.</p>
|
PostgreSQL-Website aufgelistet.</p>
|
||||||
|
|
||||||
<h4><a name="1.6">1.6</a>) Wo bekomme ich Support für PostgreSQL?</h4>
|
<h4><a name="1.6">1.6</a>) Wo bekomme ich Support für PostgreSQL?</h4>
|
||||||
|
|
||||||
<p>Die zentrale (englischsprachige) Mailing-Liste ist:
|
<p>Die zentrale (englischsprachige) Mailing-Liste ist:
|
||||||
<a href="mailto:pgsql-general@PostgreSQL.org">mailto:pgsql-general@PostgreSQL.org</a> .
|
<a href="mailto:pgsql-general@postgresql.org">mailto:pgsql-general@postgresql.org</a> .
|
||||||
|
|
||||||
<p>Die Liste ist Themen vorbehalten, die PostgreSQL betreffen. Die Anmeldung
|
<p>Die Liste ist Themen vorbehalten, die PostgreSQL betreffen. Die Anmeldung
|
||||||
erfolgt mit einer Email an die Adresse <a href="mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</a> mit folgenden Zeilen im Text
|
erfolgt mit einer Email an die Adresse <a href="mailto:pgsql-general-request@postgresql.org">pgsql-general-request@postgresql.org</a> mit folgenden Zeilen im Text
|
||||||
(nicht in der Betreffzeile):</p>
|
(nicht in der Betreffzeile):</p>
|
||||||
<pre>
|
<pre>
|
||||||
subscribe
|
subscribe
|
||||||
|
@ -236,39 +235,38 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
</pre>
|
</pre>
|
||||||
<p>Es gibt auch eine Digest-Liste (eine Liste, die Mails zusammengefasst
|
<p>Es gibt auch eine Digest-Liste (eine Liste, die Mails zusammengefasst
|
||||||
sendet). Um sich an dieser Digest-Liste anzumelden, senden Sie eine Email
|
sendet). Um sich an dieser Digest-Liste anzumelden, senden Sie eine Email
|
||||||
an <a href="mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</a> mit folgendem Text:</p>
|
an <a href="mailto:pgsql-general-digest-request@postgresql.org">pgsql-general-digest-request@postgresql.org</a> mit folgendem Text:</p>
|
||||||
<pre>
|
<pre>
|
||||||
subscribe
|
subscribe
|
||||||
end
|
end
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>Es gibt noch die Bug-Mailingliste. Die Anmeldung für diese Liste erfolgt
|
<p>Es gibt noch die Bug-Mailingliste. Die Anmeldung für diese Liste erfolgt
|
||||||
durch eine Email an <a href="mailto:bugs-request@PostgreSQL.org">bugs-request@PostgreSQL.org</a> mit folgendem Text:</p>
|
durch eine Email an <a href="mailto:bugs-request@postgresql.org">bugs-request@postgresql.org</a> mit folgendem Text:</p>
|
||||||
<pre>
|
<pre>
|
||||||
subscribe
|
subscribe
|
||||||
end
|
end
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>Die Entwickler-Mailingliste kann mit einer Email an
|
<p>Die Entwickler-Mailingliste kann mit einer Email an
|
||||||
<a href="mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</a> abonniert werden. Die Email muß ebenfalls folgenden Text enthalten:</p>
|
<a href="mailto:pgsql-hackers-request@postgresql.org">pgsql-hackers-request@postgresql.org</a> abonniert werden. Die Email muß ebenfalls folgenden Text enthalten:</p>
|
||||||
<pre>
|
<pre>
|
||||||
subscribe
|
subscribe
|
||||||
end
|
end
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>Eine deutschsprachige Mailing-Liste gibt es bei Yahoo Groups:
|
<p>Eine deutschsprachige Mailing-Liste gibt es ebenfalls:
|
||||||
<a href="http://de.groups.yahoo.com/group/postgres/">http://de.groups.yahoo.com/group/postgres/</a>;
|
<a href="http://archives.postgresql.org/pgsql-de-allgemein/">http://archives.postgresql.org/pgsql-de-allgemein/</a>;
|
||||||
die Liste kann mit einer leeren E-Mail an <a href="mailto:postgres-subscribe@yahoogroups.de">postgres-subscribe@yahoogroups.de</a>
|
die Liste kann <a href="http://mail.postgresql.org/mj/mj_wwwusr?domain=postgresql.org&func=lists-long-full&extra=pgsql-de-allgemein">hier</a> abonniert werden.</p>
|
||||||
abonniert werden.</p>
|
|
||||||
|
|
||||||
<p>Weitere Mailinglisten und Informationen zu PostgreSQL befinden sich auf der PostgreSQL-Homepage:</p>
|
<p>Weitere Mailinglisten und Informationen zu PostgreSQL befinden sich auf der PostgreSQL-Homepage:</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<a href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</a>
|
<a href="http://www.postgresql.org">http://www.postgresql.org</a>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>Es gibt außerdem einen IRC-Channel bei EFNet und bei Freenode, Channel
|
<p>Es gibt außerdem einen IRC-Channel bei EFNet und bei Freenode, Channel
|
||||||
<em>#PostgreSQL</em>. Unter UNIX/Linux können Sie mit z.B.
|
<em>#PostgreSQL</em>. Unter UNIX/Linux können Sie mit z.B.
|
||||||
<small>irc -c '#PostgreSQL' "$USER" irc.phoenix.net</small> bzw. <small>irc -c
|
<small>irc -c '#PostgreSQL' "$USER" irc.freenode.net.</small> bzw.
|
||||||
'#PostgreSQL' "$USER" irc.freenode.net.</small> daran teilnehmen.</p>
|
<small>irc -c '#PostgreSQL' "$USER" irc.phoenix.net</small> daran teilnehmen.</p>
|
||||||
|
|
||||||
<p>Eine Liste von Unternehmen, die Support für PostgreSQL auf kommerzieller
|
<p>Eine Liste von Unternehmen, die Support für PostgreSQL auf kommerzieller
|
||||||
Basis leisten, kann unter
|
Basis leisten, kann unter
|
||||||
|
@ -285,17 +283,17 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
|
|
||||||
<p>Einige Handbücher, Man-Pages und einige kleine Testprogramme sind in
|
<p>Einige Handbücher, Man-Pages und einige kleine Testprogramme sind in
|
||||||
der Distribution enthalten. Siehe das <em>/doc</em>-Verzeichnis. Ausserdem sind
|
der Distribution enthalten. Siehe das <em>/doc</em>-Verzeichnis. Ausserdem sind
|
||||||
alle Handbücher online unter <a href="http://www.PostgreSQL.org/docs/">http://www.PostgreSQL.org/docs/</a>
|
alle Handbücher online unter <a href="http://www.postgresql.org/docs/">http://www.postgresql.org/docs/</a>
|
||||||
verfügbar.</p>
|
verfügbar.</p>
|
||||||
|
|
||||||
<p>Zwei Bücher zu PostgreSQL sind online verfügbar unter
|
<p>Zwei Bücher zu PostgreSQL sind online verfügbar unter
|
||||||
<a href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</a> und
|
<a href="http://www.postgresql.org/docs/awbook.html">http://www.postgresql.org/docs/awbook.html</a> und
|
||||||
<a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a> .</p>
|
<a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a> .</p>
|
||||||
|
|
||||||
<p>Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter
|
<p>Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter
|
||||||
<a href="http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</a>
|
<a href="http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</a>
|
||||||
Diverse technische Artikel befinden sich unter
|
Diverse technische Artikel befinden sich unter
|
||||||
<a href="http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</a> .</p>
|
<a href="http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</a> .</p>
|
||||||
|
|
||||||
<p><em>psql</em> hat einige nützliche <em>\d</em>-Befehle, um Informationen über Typen,
|
<p><em>psql</em> hat einige nützliche <em>\d</em>-Befehle, um Informationen über Typen,
|
||||||
Operatoren, Funktionen, Aggregate, usw. zu zeigen. </p>
|
Operatoren, Funktionen, Aggregate, usw. zu zeigen. </p>
|
||||||
|
@ -303,12 +301,12 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
<h4><a name="1.9">1.9</a>) Wie erfahre ich von bekannten Bugs oder fehlenden Features?</h4>
|
<h4><a name="1.9">1.9</a>) Wie erfahre ich von bekannten Bugs oder fehlenden Features?</h4>
|
||||||
|
|
||||||
<p>PostgreSQL unterstützt eine erweiterte Teilmenge von SQL-92. Siehe
|
<p>PostgreSQL unterstützt eine erweiterte Teilmenge von SQL-92. Siehe
|
||||||
unsere TODO-Liste unter <a href="http://developer.PostgreSQL.org/todo.php">http://developer.PostgreSQL.org/todo.php</a> für eine Auflistung
|
unsere TODO-Liste unter <a href="http://developer.postgresql.org/todo.php">http://developer.postgresql.org/todo.php</a> für eine Auflistung
|
||||||
der bekannten Bugs, fehlenden Features und zukünftigen Pläne.</p>
|
der bekannten Bugs, fehlenden Features und zukünftigen Pläne.</p>
|
||||||
|
|
||||||
<h4><a name="1.10">1.10</a>) Wie kann ich <small>SQL</small> lernen?</h4>
|
<h4><a name="1.10">1.10</a>) Wie kann ich <small>SQL</small> lernen?</h4>
|
||||||
|
|
||||||
<p>Das PostgreSQL Book auf <a href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</a> bietet
|
<p>Das PostgreSQL Book auf <a href="http://www.postgresql.org/docs/awbook.html">http://www.postgresql.org/docs/awbook.html</a> bietet
|
||||||
eine Einführung in SQL. Ein weiteres PostgreSQL-Buch befindet sich unter
|
eine Einführung in SQL. Ein weiteres PostgreSQL-Buch befindet sich unter
|
||||||
<a href="http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook</a> . Es gibt zudem nette Tutorials unter
|
<a href="http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook</a> . Es gibt zudem nette Tutorials unter
|
||||||
<a href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a> ,
|
<a href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a> ,
|
||||||
|
@ -343,25 +341,25 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
|
|
||||||
<h4><a name="1.13">1.13</a>) Wie sende ich einen Fehlerbericht?</h4>
|
<h4><a name="1.13">1.13</a>) Wie sende ich einen Fehlerbericht?</h4>
|
||||||
|
|
||||||
<p>Bitte besuchen Sie die PostgreSQL-BugTool-Seite <a href="http://www.PostgreSQL.org/bugs/">http://www.PostgreSQL.org/bugs/</a>,
|
<p>Bitte besuchen Sie die PostgreSQL-BugTool-Seite <a href="http://www.postgresql.org/bugform.html">http://www.postgresql.org/bugform.html</a>,
|
||||||
die Hinweise und Anleitungen zur Einreichung von Fehlerberichten enthält.
|
die Hinweise und Anleitungen zur Einreichung von Fehlerberichten enthält.
|
||||||
|
|
||||||
<p>Überprüfe auch den ftp-Server <a href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</a>,
|
<p>Überprüfe auch den ftp-Server <a href="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a>,
|
||||||
um nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches gibt.</p>
|
um nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches gibt.</p>
|
||||||
|
|
||||||
<h4><a name="1.14">1.14</a>) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?</h4>
|
<h4><a name="1.14">1.14</a>) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?</h4>
|
||||||
|
|
||||||
<p>Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,
|
<p>Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,
|
||||||
Leistung, Zuverlässigkeit, Support und Preis.</p>
|
Performanz, Zuverlässigkeit, Support und Preis.</p>
|
||||||
|
|
||||||
<dl>
|
<dl>
|
||||||
<dt><b>Eigenschaften</b></dt>
|
<dt><b>Eigenschaften</b></dt>
|
||||||
<dd><p>PostgreSQL besitt die meisten Eigenschaften - wie Transaktionen,
|
<dd><p>PostgreSQL besitt die meisten Eigenschaften - wie Transaktionen,
|
||||||
Unterabfragen (Subqueries), Trigger, Views und verfeinertes Locking -
|
Unterabfragen (Subqueries), Trigger, Views und verfeinertes Locking -
|
||||||
die bei großen kommerziellen DBMS vorhanden sind. Es bietet außerdem
|
die bei großen kommerziellen DBMS vorhanden sind. Es bietet außerdem
|
||||||
einige anderen Eigenschaften, die diese nicht haben, wie benutzerbestimmte
|
einige anderen Eigenschaften, die diese nicht immer haben, wie
|
||||||
Typen, Vererbung, Regeln, und die Multi-Versionen-Steuerung zum Verringern
|
benutzerbestimmte Typen, Vererbung, Regeln, und die
|
||||||
konkurrierender Locks.</p>
|
Multi-Versionen-Steuerung zum Verringern konkurrierender Locks.</p>
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt><b>Performanz</b></dt>
|
<dt><b>Performanz</b></dt>
|
||||||
|
@ -370,25 +368,20 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
manchen Bereichen ist es schneller, in anderen langsamer.</p>
|
manchen Bereichen ist es schneller, in anderen langsamer.</p>
|
||||||
<p>Im Vergleich zu MySQL oder abgespeckten Datenbank-Systemen
|
<p>Im Vergleich zu MySQL oder abgespeckten Datenbank-Systemen
|
||||||
ist PostgreSQL in Lastsituationen - z.B. bei zeitgleichen
|
ist PostgreSQL in Lastsituationen - z.B. bei zeitgleichen
|
||||||
Zugriffen durch mehrere Nutzer, komplexen Abfragen oder gleichzeitigen
|
Zugriffen durch mehrere Nutzer, bei komplexen Abfragen oder gleichzeitigen
|
||||||
Lese- und Schreibzugriffen schneller. MySQL ist nur bei einfacheren
|
Lese- und Schreibzugriffen schneller. MySQL ist nur bei einfacheren
|
||||||
SELECT-Abfragen mit wenigen Nutzern schneller. MySQL hat allerdings
|
SELECT-Abfragen mit wenigen Nutzern im Vorteil. MySQL besitzt allerdings
|
||||||
wenige der oben erwähnten Eigenschaften. PostgreSQL setzt auf
|
nur wenige der im Punkt "Eigenschaften" genannten Features. PostgreSQL setzt auf
|
||||||
Zuverlässigkeit und Funktionsumfang, dabei wird selbstredend ständig
|
Zuverlässigkeit und Funktionsumfang, dabei wird selbstredend ständig
|
||||||
an Performanz-Verbesserungen gearbeitet. Ein interessanter Vergleich
|
an Performanz-Verbesserungen gearbeitet. </p>
|
||||||
zwischen PostgreSQL und MySQL befindet sich unter dieser URL:
|
|
||||||
<a href="http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html</a>
|
|
||||||
Zu beachten ist außerdem, daß die MySQL-Hersteller zwar ihre Produkte
|
|
||||||
als Open-Source vertreiben, beim kommerziellen Einsatz müssen jedoch
|
|
||||||
gemäß den Nutzungsbedingungen Lizenzgebühren entrichtet werden.</p>
|
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt><b>Zuverlässigkeit</b></dt>
|
<dt><b>Zuverlässigkeit</b></dt>
|
||||||
<dd><p>Wir stellen fest, dass ein DBMS wertlos ist, wenn es nicht
|
<dd><p>Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht
|
||||||
zuverlässig arbeitet. Wir bemühen uns, nur streng geprüften,
|
zuverlässig arbeitet. Daher bemühen wir uns, nur streng geprüften und
|
||||||
beständigen Code freizugeben, der nur ein Minimum an Programmfehler
|
beständigen Code freizugeben, der nur ein Minimum an Programmfehlern
|
||||||
aufweist. Jede Freigabe hat mindestens einen Monat Betatest-Phase
|
aufweist. Jede Freigabe hat mindestens einen Monat Betatest-Phase
|
||||||
hinter sich, und unsere Freigabehistorie beweist, dass wir stabile,
|
hinter sich, und unsere Freigabehistorie beweist, dass wir stabile und
|
||||||
solide Versionen freigeben, die im Produktionsbetrieb genutzt werden
|
solide Versionen freigeben, die im Produktionsbetrieb genutzt werden
|
||||||
können. Wir glauben, dass wir im Vergleich mit anderer
|
können. Wir glauben, dass wir im Vergleich mit anderer
|
||||||
Datenbanksoftware vorteilhaft dastehen.</p>
|
Datenbanksoftware vorteilhaft dastehen.</p>
|
||||||
|
@ -399,14 +392,14 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
großen Gruppe von Entwicklern und Benutzern mögliche Probleme
|
großen Gruppe von Entwicklern und Benutzern mögliche Probleme
|
||||||
zu lösen. Wir können nicht immer eine Fehlerbehebung
|
zu lösen. Wir können nicht immer eine Fehlerbehebung
|
||||||
garantieren, kommerzielle DBMS tun dies aber auch nicht.
|
garantieren, kommerzielle DBMS tun dies aber auch nicht.
|
||||||
Der direkte Kontakt zur Entwickler- und Benutzergemeinschaft, der
|
Der direkte Kontakt zur Entwickler- und Benutzergemeinschaft und der
|
||||||
Zugriff auf die Handbücher und auf den Quellcode ermöglicht einen
|
Zugriff auf die Handbücher und den Quellcode ermöglicht einen
|
||||||
im Vergleich zu anderen DBMS höherwertigen Support. Es gibt jedoch auch
|
im Vergleich zu anderen DBMS höherwertigeren Support. Es gibt jedoch auch
|
||||||
Anbieter von kommerziellen Support-Leistungen (siehe FAQ-Punkt <a href="#1.6">1.6</a>).</p>
|
Anbieter von kommerziellen Support-Leistungen (siehe FAQ-Punkt <a href="#1.6">1.6</a>).</p>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><b>Preis</b></dt>
|
<dt><b>Preis</b></dt>
|
||||||
<dd><p>PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie
|
<dd><p>PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie
|
||||||
für die nicht-kommerzielle Nutzung. Sie können den PostgreSQL-Code
|
auch für die nicht-kommerzielle Nutzung. Sie können den PostgreSQL-Code
|
||||||
ohne Einschränkungen (außer denjenigen, die in der oben angegebene
|
ohne Einschränkungen (außer denjenigen, die in der oben angegebene
|
||||||
BSD-artigen Lizenz erwähnt werden) in Ihr Produkt integrieren.</p>
|
BSD-artigen Lizenz erwähnt werden) in Ihr Produkt integrieren.</p>
|
||||||
</dd>
|
</dd>
|
||||||
|
@ -423,8 +416,8 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
Projekts.</p>
|
Projekts.</p>
|
||||||
|
|
||||||
<p>Selbstverständlich ist diese Infrastruktur nicht billig. Es gibt eine
|
<p>Selbstverständlich ist diese Infrastruktur nicht billig. Es gibt eine
|
||||||
Reihe von einmaligen und monatlich wiederkehrenden Kosten, die für
|
Reihe von einmaligen und monatlich anfallenden Kosten, die für
|
||||||
den Weiterbetrieb beglichen werden müssen. Falls Sie oder Ihre Firma
|
den Betrieb beglichen werden müssen. Falls Sie oder Ihre Firma
|
||||||
dazu finanziell beitragen können, besuchen Sie bitte die URL
|
dazu finanziell beitragen können, besuchen Sie bitte die URL
|
||||||
<a href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</a>
|
<a href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</a>
|
||||||
wo Sie eine Spende abgeben können.</p>
|
wo Sie eine Spende abgeben können.</p>
|
||||||
|
@ -438,7 +431,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
<p>Eine Möglichkeit der nicht-finanziellen Untetstützung besteht übrigens
|
<p>Eine Möglichkeit der nicht-finanziellen Untetstützung besteht übrigens
|
||||||
darin, für <a href="http://advocacy.postgresql.org">http://advocacy.postgresql.org</a> (en.) bzw. <a href="http://advocacy.postgresql.org/?lang=de">http://advocacy.postgresql.org/?lang=de</a> (dt.)
|
darin, für <a href="http://advocacy.postgresql.org">http://advocacy.postgresql.org</a> (en.) bzw. <a href="http://advocacy.postgresql.org/?lang=de">http://advocacy.postgresql.org/?lang=de</a> (dt.)
|
||||||
einen Bericht über den erfolgreichen Einsatz von PostgreSQL in Ihrem
|
einen Bericht über den erfolgreichen Einsatz von PostgreSQL in Ihrem
|
||||||
Unternehmen oder Organisation bereitzustellen.</p>
|
Unternehmen oder in Ihrer Organisation bereitzustellen.</p>
|
||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
|
@ -451,7 +444,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
<p>PsqlODBC kann von <a href="http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</a>
|
<p>PsqlODBC kann von <a href="http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</a>
|
||||||
heruntergeladen werden.</p>
|
heruntergeladen werden.</p>
|
||||||
|
|
||||||
<p>OpenLink ODBC kann unter <a href="http://www.openlinksw.com/">http://www.openlinksw.com</a> geholt werden. Die
|
<p>OpenLink ODBC kann unter <a href="http://www.openlinksw.com/">http://www.openlinksw.com</a> bezogen werden. Die
|
||||||
Software arbeitet mit dem Standard-ODBC-Client dieser Firma, so dass
|
Software arbeitet mit dem Standard-ODBC-Client dieser Firma, so dass
|
||||||
PostgreSQL-ODBC auf jeder Client-Plattform zur Verfügung steht, die
|
PostgreSQL-ODBC auf jeder Client-Plattform zur Verfügung steht, die
|
||||||
unterstützt wird (Win, Mac, Unix, VMS).</p>
|
unterstützt wird (Win, Mac, Unix, VMS).</p>
|
||||||
|
@ -477,12 +470,12 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
|
|
||||||
<p>Es gibt mehrere grafische Schnittstellen für PostgreSQL, darunter
|
<p>Es gibt mehrere grafische Schnittstellen für PostgreSQL, darunter
|
||||||
PgAccess ( <a href="http://www.pgaccess.org">http://www.pgaccess.org</a>),
|
PgAccess ( <a href="http://www.pgaccess.org">http://www.pgaccess.org</a>),
|
||||||
PgAdmin III (<a
|
pgAdmin III (<a
|
||||||
href="http://www.pgadmin.org">http://www.pgadmin.org</a>, RHDB Admin (<a
|
href="http://www.pgadmin.org">http://www.pgadmin.org</a>, RHDB Admin (<a
|
||||||
href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/
|
href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/
|
||||||
</a>) und Rekall (<a href="http://www.thekompany.com/products/rekall/">
|
</a>) und Rekall (<a href="http://www.thekompany.com/products/rekall/">
|
||||||
http://www.thekompany.com/products/rekall/</a>, proprietär). Es gibt
|
http://www.thekompany.com/products/rekall/</a>, GPL/proprietär). Es gibt
|
||||||
außerdem PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/">
|
außerdem phpPgAdmin (<a href="http://phppgadmin.sourceforge.net/">
|
||||||
http://phppgadmin.sourceforge.net/ </a>), eine web-basierte Schnittstelle.
|
http://phppgadmin.sourceforge.net/ </a>), eine web-basierte Schnittstelle.
|
||||||
|
|
||||||
<h4><a name="2.4">2.4</a>) Welche Programmiersprachen und Schnittstellen gibt es?</h4>
|
<h4><a name="2.4">2.4</a>) Welche Programmiersprachen und Schnittstellen gibt es?</h4>
|
||||||
|
@ -530,7 +523,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
ab, die Sie für <em>postmaster</em> konfiguriert haben. Bei den voreingestellten
|
ab, die Sie für <em>postmaster</em> konfiguriert haben. Bei den voreingestellten
|
||||||
Werten für Puffer und Prozesse benötigen Sie bei den meisten Systemen
|
Werten für Puffer und Prozesse benötigen Sie bei den meisten Systemen
|
||||||
ein Minimum von ca. 1 MB. Der "PostgreSQL Administrator's Guide"
|
ein Minimum von ca. 1 MB. Der "PostgreSQL Administrator's Guide"
|
||||||
(<a href="http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html">http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html</a>)
|
(<a href="http://www.postgresql.org/docs/current/static/kernel-resources.html"http://www.postgresql.org/docs/current/static/kernel-resources.html</a>)
|
||||||
enthält weitere Informationen zu Shared Memory und Semaphores.</p>
|
enthält weitere Informationen zu Shared Memory und Semaphores.</p>
|
||||||
|
|
||||||
|
|
||||||
|
@ -565,7 +558,6 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
host-basierte Authentifizierung in der Datei <em>$PGDATA/pg_hba.conf</em>
|
host-basierte Authentifizierung in der Datei <em>$PGDATA/pg_hba.conf</em>
|
||||||
entsprechend angepasst ist.</p>
|
entsprechend angepasst ist.</p>
|
||||||
|
|
||||||
|
|
||||||
<h4><a name="3.6">3.6</a>) Wie optimiere ich die Datenbank für bessere Leistung?</h4>
|
<h4><a name="3.6">3.6</a>) Wie optimiere ich die Datenbank für bessere Leistung?</h4>
|
||||||
|
|
||||||
<p>Der Einsatz von Indizes sollte auf jeden Fall Abfragen beschleunigen. Die
|
<p>Der Einsatz von Indizes sollte auf jeden Fall Abfragen beschleunigen. Die
|
||||||
|
@ -582,24 +574,27 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
Sie auch, bei größeren Datenänderungen Indizes zu löschen und danach
|
Sie auch, bei größeren Datenänderungen Indizes zu löschen und danach
|
||||||
wiederherzustellen.</p>
|
wiederherzustellen.</p>
|
||||||
|
|
||||||
<p>Es gibt verschiedene Tuning-Optionen. Sie können <em>fsync()</em> ausschalten,
|
<p>Es gibt verschiedene Tuning-Optionen, die im Handbuch dokumentiert sind
|
||||||
indem Sie beim Starten des <em>postmaster</em> die Optionen <em>-o -F</em> angeben. Das
|
(<a href="http://www.postgresql.org/docs/current/static/runtime.html">Administration Guide/Server Run-time Environment/Run-time Configuration</a>).
|
||||||
hindert <em>fsync()</em>-Operationen daran, nach jeder Transaktion die Daten direkt
|
Sie können <em>fsync()</em> ausschalten, indem Sie beim Starten des <em>postmaster</em>
|
||||||
auf die Festplatte zu schreiben.</p>
|
die Optionen <em>-o -F</em> angeben. Das hindert <em>fsync()</em>-Operationen
|
||||||
|
daran, nach jeder Transaktion die Daten direkt auf die Festplatte zu schreiben.</p>
|
||||||
|
|
||||||
<p>Sie können auch mit der <em>-B</em> Option des <em>postmaster</em> die Anzahl der
|
<p>Sie können auch mit der <em>shared_buffers</em> Option des <em>postmaster</em> die
|
||||||
Shared Memory Puffer für die Backend-Prozesse erhöhen. Falls Sie diesen Wert
|
Anzahl der Shared Memory Puffer für die Backend-Prozesse erhöhen. Falls Sie diesen Wert
|
||||||
jedoch zu hoch setzen, kann es vorkommen, dass der <em>postmaster</em> nicht startet,
|
jedoch zu hoch setzen, kann es vorkommen, dass der <em>postmaster</em> nicht startet,
|
||||||
weil die Obergrenze der Speicherzuweisung für Shared Memory überschritten
|
weil die Obergrenze der Speicherzuweisung für Shared Memory überschritten
|
||||||
wird. Jeder Puffer ist 8 kB groß, standardmäßig gibt es 64 Puffer.</p>
|
wird. Jeder Puffer ist 8 kB groß, voreingestellt sind 1000 Puffer.</p>
|
||||||
|
|
||||||
<p>Sie können auch die <em>-S</em> Option des Backends nutzen, um die Größe
|
<p>Die <em>sort_mem</em> (ab PostgreSQL 8.0: <em>work_mem</em>)-Optionen des Backends können benutzt
|
||||||
des Speicherplatzes für temporäres Sortieren zu erhöhen. Der <em>-S</em> Wert
|
werden, um die Größe des Speicherplatzes für temporäres Sortieren zu erhöhen. Die
|
||||||
wird in Kilobyte gemessen und ist standardmäßig auf 512 kB festgelegt.</p>
|
Werte werden in Kilobyte gemessen und sind standardmäßig auf 1024 (d.h. 1MB) festgelegt.</p>
|
||||||
|
|
||||||
<p>Die <small>CLUSTER</small>-Anweisung kann benutzt werden, um Daten in Basistabellen zu
|
<p>Die <small>CLUSTER</small>-Anweisung kann benutzt werden, um Daten in
|
||||||
gruppieren, so dass sie auf einen Index zusammengebracht werden. Siehe
|
Basistabellen zu gruppieren, so dass - um einen schnelleren Zugriff zu
|
||||||
auch die <small>CLUSTER(l)</small> Man-Page für weitere Details.</p>
|
erreichen - die physikalische Speicherung der Reihenfolge eines der Indexe
|
||||||
|
entspricht. Siehe auch die <small>CLUSTER(l)</small> Man-Page für weitere
|
||||||
|
Details.</p>
|
||||||
|
|
||||||
<h4><a name="3.7">3.7</a>) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?</h4>
|
<h4><a name="3.7">3.7</a>) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?</h4>
|
||||||
|
|
||||||
|
@ -611,8 +606,8 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
Backends und halten das Programm an, wenn etwas Unerwartetes passiert.</p>
|
Backends und halten das Programm an, wenn etwas Unerwartetes passiert.</p>
|
||||||
|
|
||||||
<p>Sowohl der <em>postmaster</em> als auch <em>postgres</em> stellen mehrere
|
<p>Sowohl der <em>postmaster</em> als auch <em>postgres</em> stellen mehrere
|
||||||
Debug-Optionen zur Verfügung. Stellen Sie zuerst sicher, dass Sie den Standard-Output
|
Debug-Optionen zur Verfügung. Zuerst sollten Sie sichergehen, dass Sie die Ausgaben über den Standard-Output
|
||||||
und den Fehlerkanal in eine Datei umleiten, wenn Sie den <em>postmaster</em> starten:</p>
|
und den Standard-Error in eine Datei umleiten, wenn Sie den <em>postmaster</em> starten:</p>
|
||||||
<pre>
|
<pre>
|
||||||
cd /usr/local/pgsql
|
cd /usr/local/pgsql
|
||||||
./bin/postmaster >server.log 2>&1 &
|
./bin/postmaster >server.log 2>&1 &
|
||||||
|
@ -626,27 +621,28 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
Information - angibt. Achtung, hohe Debug-Levels erzeugen schnell große
|
Information - angibt. Achtung, hohe Debug-Levels erzeugen schnell große
|
||||||
Logdateien!</p>
|
Logdateien!</p>
|
||||||
|
|
||||||
<p>Wenn der <em>postmaster</em> nicht läuft, können Sie sogar den <em>postgres</em>-Backend
|
<p>Wenn der <em>postmaster</em> nicht läuft, können Sie das <em>postgres</em>-Backend sogar
|
||||||
von der Befehlszeile ausführen und eine <small>SQL</small>-Anweisung direkt eingeben.
|
von der Befehlszeile ausführen und eine <small>SQL</small>-Anweisung direkt eingeben.
|
||||||
Dies ist <em>nur</em> für Debugging-Zwecke zu empfehlen. Beachten Sie, dass ein
|
Dies ist allerdings <em>nur</em> für Debugging-Zwecke zu empfehlen. Beachten Sie, dass hierbei ein
|
||||||
Zeilenumbruch, und nicht das Semikolon die <small>SQL</small>-Anweisung beendet.
|
Zeilenumbruch, und nicht - wie sonst üblich - das Semikolon die <small>SQL</small>-Anweisung beendet.
|
||||||
Falls Sie PostgreSQL mit Debugging-Symbolen kompiliert haben, können Sie
|
Falls Sie PostgreSQL mit Debugging-Symbolen kompiliert haben, können Sie
|
||||||
mit einem Debugger sehen, was passiert. Da das Backend jedoch nicht vom
|
mit einem Debugger sehen, was passiert. Da das Backend jedoch nicht vom
|
||||||
<em>postmaster</em> gestartet wurde, läuft es nicht in der gleichen
|
<em>postmaster</em> gestartet wurde, läuft es nicht in der gleichen
|
||||||
Umgebung und deshalb können einige locking/backend Operationen nicht
|
Umgebung und deshalb können einige locking-Vorgänge sowie die Kommunikation zwischen den Backends nicht
|
||||||
reproduziert werden.</p>
|
reproduziert werden.</p>
|
||||||
|
|
||||||
<p>Wenn dagegen der <em>postmaster</em> läuft, führen Sie <em>psql</em> in einem Fenster aus, dann
|
<p>Wenn der <em>postmaster</em> hingegen läuft, führen Sie <em>psql</em> in einem Fenster aus,
|
||||||
ermitteln Sie die Prozessnummer (<small>PID</small>) des <em>postgres</em>-Prozesses, der von <em>psql</em>
|
ermitteln Sie die Prozessnummer (<small>PID</small>) des <em>postgres</em>-Prozesses, der von <em>psql</em>
|
||||||
verwendet wird. Binden Sie einen Debugger an diese <small>PID</small> und führen Sie
|
verwendet wird (mit <pre>SELECT pg_backend_pid()</pre>). Binden Sie einen Debugger an diese <small>PID</small>
|
||||||
Abfragen von <em>psql</em> aus. Wenn Sie den postgres-Serverstart analysieren wollen,
|
und führen Sie Abfragen von <em>psql</em> aus. Wenn Sie den postgres-Serverstart analysieren
|
||||||
setzen Sie die Umgebungsvariable <em>PGOPTIONS="-W </em>n<em>"</em>, und starten Sie dann
|
wollen, setzen Sie die Umgebungsvariable <em>PGOPTIONS="-W </em>n<em>"</em>, und starten Sie
|
||||||
<em>psql</em>. Dies verzögert den Start um <em>n</em> Sekunden, damit Sie einen Debugger an
|
dann <em>psql</em>. Dies verzögert den Start um <em>n</em> Sekunden, damit Sie einen Debugger an
|
||||||
den Prozess binden können und ggf. Breakpoints setzen, bevor die
|
den Prozess binden und ggf. Breakpoints setzen können, bevor die
|
||||||
Startsequenz begonnen wird.</p>
|
Startsequenz begonnen wird.</p>
|
||||||
|
|
||||||
<p>Das Programm <em>postgres</em> hat auch die Optionen <em>-s</em>, <em>-A</em> und <em>-t</em>, die bei der Fehlersuche
|
<p>Es gibt verschiedene Einstellungen (die <small>log_*</small>-Gruppe), die diverse
|
||||||
und Performanzmessung sehr nützlich sein können.</p>
|
Server-Statistik ausgeben und daher bei der Fehlersuche und Performanzmessung sehr
|
||||||
|
nützlich sein können.</p>
|
||||||
|
|
||||||
<p>Sie können die Anwendung auch mit Profiling kompilieren, um zu sehen,
|
<p>Sie können die Anwendung auch mit Profiling kompilieren, um zu sehen,
|
||||||
welche Funktionen wieviel Ausführungszeit beanspruchen. Das Backend
|
welche Funktionen wieviel Ausführungszeit beanspruchen. Das Backend
|
||||||
|
@ -656,12 +652,12 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
muß, um Profiling nutzen zu können.</p>
|
muß, um Profiling nutzen zu können.</p>
|
||||||
|
|
||||||
<h4><a name="3.8">3.8</a>) Ich bekomme die Meldung "<em>Sorry, too many clients</em>", wenn ich eine
|
<h4><a name="3.8">3.8</a>) Ich bekomme die Meldung "<em>Sorry, too many clients</em>", wenn ich eine
|
||||||
Verbindung augzubauen versuche. Warum?</h4>
|
Verbindung aufzubauen versuche. Warum?</h4>
|
||||||
|
|
||||||
<p>Sie müssen die maximale Anzahl der gleichzeitig ausfühbaren Backend-
|
<p>Sie müssen die maximale Anzahl der gleichzeitig ausführbaren Backend-
|
||||||
Prozesse hochsetzen.</p>
|
Prozesse hochsetzen.</p>
|
||||||
|
|
||||||
<p>Die Voreinstellung ist 32 Prozesse. Sie können diese erhöhen, indem Sie
|
<p>Die Voreinstellung erlaubt 32 Prozesse. Sie können diese erhöhen, indem Sie
|
||||||
den <em>postmaster</em> mit einem entsprechenden <em>-N</em> Parameter starten bzw. die
|
den <em>postmaster</em> mit einem entsprechenden <em>-N</em> Parameter starten bzw. die
|
||||||
Konfigurationsdatei <em>postgresql.conf</em> anpassen.</p>
|
Konfigurationsdatei <em>postgresql.conf</em> anpassen.</p>
|
||||||
|
|
||||||
|
@ -688,15 +684,15 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
|
|
||||||
<p>Die temporären Dateien sollten automatisch gelöscht werden. Falls das
|
<p>Die temporären Dateien sollten automatisch gelöscht werden. Falls das
|
||||||
Backend jedoch während einer Sortierung abstürzen sollte, bleiben sie
|
Backend jedoch während einer Sortierung abstürzen sollte, bleiben sie
|
||||||
erhalten. Nach einem Neustart des <em>postmaster</em> werden sie
|
erhalten. Nach einem Neustart des <em>postmaster</em> werden sie dann aber wieder
|
||||||
auomatisch gelöscht.</p>
|
automatisch gelöscht.</p>
|
||||||
|
|
||||||
<h4><a name="3.10">3.10</a>) Warum muß ich bei jeder neuen Hauptversion von PostgreSQL
|
<h4><a name="3.10">3.10</a>) Warum muß ich bei jeder neuen Hauptversion von PostgreSQL
|
||||||
die komplette Datenbank exportieren und anschließend reimportieren?</h4>
|
die komplette Datenbank exportieren und anschließend reimportieren?</h4>
|
||||||
|
|
||||||
<p>Zwischen "kleinen" PostgreSQL-Versionsänderungen (z.B. zwischen
|
<p>Zwischen "kleinen" PostgreSQL-Versionsänderungen (z.B. zwischen
|
||||||
7.2 und 7.2.1) werden keine strukturellen Änderungen durchgeführt,
|
7.2 und 7.2.1) werden keine strukturellen Änderungen durchgeführt,
|
||||||
wodurch ein erneutes Aus- und Einlesen der Daten nicht benötigt wird.
|
wodurch ein erneutes Aus- und Einlesen der Daten nicht erforderlich ist.
|
||||||
Allerdings wird bei "großen" Versionsänderungen (z.B. zwischen 7.2 und 7.3)
|
Allerdings wird bei "großen" Versionsänderungen (z.B. zwischen 7.2 und 7.3)
|
||||||
oft das interne Format der Systemtabellen und Datendateien
|
oft das interne Format der Systemtabellen und Datendateien
|
||||||
angepasst. Diese Änderungen sind oft sehr komplex, wodurch die
|
angepasst. Diese Änderungen sind oft sehr komplex, wodurch die
|
||||||
|
@ -705,7 +701,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
ausgegeben, wodurch die Importierung in das neue interne Format
|
ausgegeben, wodurch die Importierung in das neue interne Format
|
||||||
ermöglicht wird.</p>
|
ermöglicht wird.</p>
|
||||||
|
|
||||||
<p>Bei Versionenwechseln, wo kein Formatänderungen stattgefunden haben,
|
<p>Bei Upgrades, bei denen keine Formatänderungen stattgefunden haben,
|
||||||
kann das <em>pg_upgrade</em>-Skript benutzt werden, um die Daten ohne Aus-
|
kann das <em>pg_upgrade</em>-Skript benutzt werden, um die Daten ohne Aus-
|
||||||
und Einlesen zu übertragen. Die jeweilige Dokumentation gibt an, ob für
|
und Einlesen zu übertragen. Die jeweilige Dokumentation gibt an, ob für
|
||||||
die betreffende Version <em>pg_upgrade</em> verfügbar ist.</p>
|
die betreffende Version <em>pg_upgrade</em> verfügbar ist.</p>
|
||||||
|
@ -738,7 +734,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
<p>Selbst wenn Sie nur die ersten paar Zeilen einer Tabelle abfragen möchten,
|
<p>Selbst wenn Sie nur die ersten paar Zeilen einer Tabelle abfragen möchten,
|
||||||
muß unter Umständen die komplette Abfrage abgearbeitet werden. Ziehen Sie also
|
muß unter Umständen die komplette Abfrage abgearbeitet werden. Ziehen Sie also
|
||||||
möglichst eine Abfrage in Erwägung, die eine <small>ORDER BY</small>-Anweisung
|
möglichst eine Abfrage in Erwägung, die eine <small>ORDER BY</small>-Anweisung
|
||||||
benutzt, die wiederum auf indizierte Spalten verweist. In diesem Fall kann
|
benutzt, welche wiederum auf indizierte Spalten verweist. In diesem Fall kann
|
||||||
PostgreSQL direkt nach den gewünschten Zeilen suchen und braucht nicht
|
PostgreSQL direkt nach den gewünschten Zeilen suchen und braucht nicht
|
||||||
jede mögliche Ergebniszeile abzuarbeiten.</p>
|
jede mögliche Ergebniszeile abzuarbeiten.</p>
|
||||||
|
|
||||||
|
@ -750,13 +746,13 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
SELECT spalte
|
SELECT spalte
|
||||||
FROM tabelle
|
FROM tabelle
|
||||||
ORDER BY random()
|
ORDER BY random()
|
||||||
LIMIT 1;
|
LIMIT 1
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<h4><a name="4.3">4.3</a>) Wie bekomme ich eine Liste der Tabellen oder anderen Dinge, die ich
|
<h4><a name="4.3">4.3</a>) Wie bekomme ich eine Liste der Tabellen oder anderen Dinge, die ich
|
||||||
in <em>psql</em> sehen kann?</h4>
|
in <em>psql</em> sehen kann?</h4>
|
||||||
|
|
||||||
<p>In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weiter psql-Befehle
|
<p>In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere psql-Befehle
|
||||||
lassen sich mit \? anzeigen. Sie können sich die Datei <em>pgsql/src/bin/psql/describe.c</em>
|
lassen sich mit \? anzeigen. Sie können sich die Datei <em>pgsql/src/bin/psql/describe.c</em>
|
||||||
mit dem Quellcode für <em>psql</em> ansehen. Sie enthält die <small>SQL</small>-Abfragen, die die
|
mit dem Quellcode für <em>psql</em> ansehen. Sie enthält die <small>SQL</small>-Abfragen, die die
|
||||||
Backslash-Kommandos (\) ausführen. Sie können <em>psql</em> auch mit der <em>-E</em>
|
Backslash-Kommandos (\) ausführen. Sie können <em>psql</em> auch mit der <em>-E</em>
|
||||||
|
@ -788,7 +784,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
ALTER TABLE <em>tabelle</em> DROP COLUMN <em>alte_spalte</em>;
|
ALTER TABLE <em>tabelle</em> DROP COLUMN <em>alte_spalte</em>;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
</pre>
|
</pre>
|
||||||
<p>Um den Platz zu reklamieren, der von der gelöschten Spalte verwendet
|
<p>Um den Speicherplatz freizugeben, der von der gelöschten Spalte verwendet
|
||||||
wurde, führen Sie <small>VACUUM FULL</small> aus.</p>
|
wurde, führen Sie <small>VACUUM FULL</small> aus.</p>
|
||||||
|
|
||||||
<h4><a name="4.5">4.5</a>) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?</h4>
|
<h4><a name="4.5">4.5</a>) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?</h4>
|
||||||
|
@ -796,7 +792,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
<p>Es bestehen folgende Obergrenzen:</p>
|
<p>Es bestehen folgende Obergrenzen:</p>
|
||||||
<pre>
|
<pre>
|
||||||
Maximale Größe eine Datenbank? unbeschränkt (es existieren
|
Maximale Größe eine Datenbank? unbeschränkt (es existieren
|
||||||
Datenbanken mit 4TB)
|
Datenbanken mit 32 TB)
|
||||||
Maximale Größe einer Tabelle? 32 TB
|
Maximale Größe einer Tabelle? 32 TB
|
||||||
Maximale Größe einer Zeile? 1,6 TB
|
Maximale Größe einer Zeile? 1,6 TB
|
||||||
Maximale Größe einer Spalte? 1 GB
|
Maximale Größe einer Spalte? 1 GB
|
||||||
|
@ -808,17 +804,16 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
unbeschränkt
|
unbeschränkt
|
||||||
</pre>
|
</pre>
|
||||||
<p>Selbstverständlich sind dies theoretische Werte, die oft durch die
|
<p>Selbstverständlich sind dies theoretische Werte, die oft durch die
|
||||||
verfügbaren Platten- und Speicherressourcen eingeschränkt sind.
|
verfügbaren Platten- und Speicherressourcen beschränkt werden.
|
||||||
Extreme Größen können zu Leistungseinbußen führen.</p>
|
Extreme Größen können zu Leistungseinbußen führen.</p>
|
||||||
|
|
||||||
<p>Die maximale Tabellengröße von 32 TB benötigt keine Large-File-Unterstützung
|
<p>Die maximale Tabellengröße von 32 TB benötigt keine Large-File-Unterstützung
|
||||||
im Betriebssystem. Große Tabellen werden in Dateien mit einer Größe von
|
im Betriebssystem. Große Tabellen werden in Dateien mit einer Größe von
|
||||||
1 GB aufgeteilt, wodurch etwaige dateisystem-bedingte Beschränkungen nicht
|
je 1 GB aufgeteilt, wodurch etwaige dateisystem-bedingte Beschränkungen nicht
|
||||||
relevant sind.</p>
|
relevant sind.</p>
|
||||||
|
|
||||||
<p>Die maximale Tabellengröße und die maximale Anzahl von Spalten können
|
<p>Die maximale Tabellengröße und die maximale Anzahl von Spalten können
|
||||||
gesteigert werden, wenn die Default-Blockgröße auf 32 KB heraufgesetzt
|
vervierfacht werden, indem man die Default-Blockgröße auf 32 KB heraufsetzt.</p>
|
||||||
wird.</p>
|
|
||||||
|
|
||||||
<h4><a name="4.6">4.6</a>) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen
|
<h4><a name="4.6">4.6</a>) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen
|
||||||
Textdatei abzuspeichern? </h4>
|
Textdatei abzuspeichern? </h4>
|
||||||
|
@ -846,7 +841,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
64 Bytes pro Zeile
|
64 Bytes pro Zeile
|
||||||
|
|
||||||
100.000 Datenzeilen
|
100.000 Datenzeilen
|
||||||
----------------------- = 735 Datenbankseiten (aufgerundet)
|
------------------------ = 735 Datenbankseiten (aufgerundet)
|
||||||
128 Zeilen pro Seite
|
128 Zeilen pro Seite
|
||||||
|
|
||||||
735 Datenbankseiten * 8192 Bytes pro Seite = 6.021.120 Byte (6 MB)
|
735 Datenbankseiten * 8192 Bytes pro Seite = 6.021.120 Byte (6 MB)
|
||||||
|
@ -857,8 +852,8 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
<p>NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig
|
<p>NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig
|
||||||
Platz in Anspruch nehmen.</p>
|
Platz in Anspruch nehmen.</p>
|
||||||
|
|
||||||
<h4><a name="4.7">4.7</a>) Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank
|
<h4><a name="4.7">4.7</a>) Wie finde ich heraus, welche Tabellen, Indizes,
|
||||||
definiert sind?</h4>
|
Datenbanken oder Benutzer in der Datenbank definiert sind?</h4>
|
||||||
|
|
||||||
<p><em>psql</em> hat eine Vielzahl von Backslash-Befehlen, mit denen solche Informationen
|
<p><em>psql</em> hat eine Vielzahl von Backslash-Befehlen, mit denen solche Informationen
|
||||||
angezeigt werden können. Der Befehl <em>\?</em> zeigt eine Übersicht. Außerdem
|
angezeigt werden können. Der Befehl <em>\?</em> zeigt eine Übersicht. Außerdem
|
||||||
|
@ -868,13 +863,13 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
<small>SELECT</small>-Anweisungen, mit deren Hilfe man Information über die Systemtabellen
|
<small>SELECT</small>-Anweisungen, mit deren Hilfe man Information über die Systemtabellen
|
||||||
erhalten kann.</p>
|
erhalten kann.</p>
|
||||||
|
|
||||||
<h4><a name="4.8">4.8</a>) Meine Abfragen sind langsam oder nutzen die Indizes nicht. Warum?</h4>
|
<h4><a name="4.8">4.8</a>) Meine Abfragen sind langsam oder benutzen die Indizes nicht. Warum?</h4>
|
||||||
|
|
||||||
<p>Indizes werden nicht automatisch bei jeder Abfrage verwendet. Indizes werden
|
<p>Indizes werden nicht automatisch bei jeder Abfrage verwendet. Indizes werden
|
||||||
nur dann verwendet, wenn die abzufragende Tabelle eine bestimmte Größe
|
nur dann verwendet, wenn die abzufragende Tabelle eine bestimmte Größe
|
||||||
übersteigt, und die Abfrage nur eine kleine Prozentzahl der Tabellenzeilen
|
übersteigt, und die Abfrage nur eine kleine Prozentzahl der Tabellenzeilen
|
||||||
abfragt. Grund hierfür ist, dass die durch einen Index verursachten
|
abfragt. Der Grund hierfür ist der, dass die durch einen Index verursachten
|
||||||
Festplattenzugriffe manchmal langsamer sind als ein einfaches Auslesen
|
Festplattenzugriffe manchmal länger dauern würden als ein einfaches Auslesen
|
||||||
aller Tabellenzeilen (sequentieller Scan).</p>
|
aller Tabellenzeilen (sequentieller Scan).</p>
|
||||||
|
|
||||||
<p>Um festzustellen, ob ein Index verwendet werden soll, braucht PostgreSQL
|
<p>Um festzustellen, ob ein Index verwendet werden soll, braucht PostgreSQL
|
||||||
|
@ -882,7 +877,9 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
<small>VACUUM ANALYZE</small> bzw. <small>ANALYZE</small> berechnet. Anhand der Statistiken kennt der
|
<small>VACUUM ANALYZE</small> bzw. <small>ANALYZE</small> berechnet. Anhand der Statistiken kennt der
|
||||||
Abfragenoptimierer die Anzahl der Tabellenzeilen und kann besser
|
Abfragenoptimierer die Anzahl der Tabellenzeilen und kann besser
|
||||||
entscheiden, ob Indizes verwendet werden sollen. Statistiken sind auch
|
entscheiden, ob Indizes verwendet werden sollen. Statistiken sind auch
|
||||||
bei der Feststellung optimaler <small>JOIN</small>-Reihenfolge und -Methoden wertvoll.</p>
|
bei der Ermittlung der optimalen <small>JOIN</small>-Reihenfolgen und
|
||||||
|
-Methoden wertvoll. Daher sollten diese regelmässig durchgeführt werden, da
|
||||||
|
sich der Inhalt einer Tabelle ja auch verändert</p>
|
||||||
|
|
||||||
<p>In Versionen vor 8.0 werden Indizes oft nicht benutzt, wenn die
|
<p>In Versionen vor 8.0 werden Indizes oft nicht benutzt, wenn die
|
||||||
jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders für
|
jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders für
|
||||||
|
@ -911,22 +908,23 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
<p>Bei der Nutzung von Wildcard-Operatoren wie <small>LIKE</small> oder <small>~</small>, können
|
<p>Bei der Nutzung von Wildcard-Operatoren wie <small>LIKE</small> oder <small>~</small>, können
|
||||||
Indizes nur unter bestimmten Umständen verwendet werden:</p>
|
Indizes nur unter bestimmten Umständen verwendet werden:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Der Anfang des Suchmusters muß mit dem Anfang des Strings
|
<li>Das Suchmuster muss sich an Anfang des Strings befinden, d.h.:
|
||||||
verknüpft werden, d.h.:
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><small>LIKE</small>-Suchmuster dürfen nicht mit <em>%</em> anfangen;</li>
|
<li><small>LIKE</small>-Suchmuster dürfen nicht mit <em>%</em> anfangen;</li>
|
||||||
<li><small>~</small> (reguläre Ausdrücke) müssen mit <em>^</em> anfangen.</li>
|
<li><small>~</small> (reguläre Ausdrücke) müssen mit <em>^</em> anfangen.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. <em>[a-e]</em>)
|
<li>Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. <em>[a-e]</em>)
|
||||||
anfangen</li>
|
beginnen.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B.
|
<p>Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B.
|
||||||
<small>ILIKE</small> bzw. <small>~*</small>), verwenden keine Indizes. Stattdessen können
|
<small>ILIKE</small> bzw. <small>~*</small>), verwenden keine Indizes. Stattdessen können
|
||||||
funktionale Indizes verwendet werden, die im Punkt <a href="#4.12">4.12</a> beschrieben werden.</p>
|
funktionale Indizes verwendet werden, die im Punkt <a href="#4.12">4.12</a> beschrieben werden.</p>
|
||||||
|
|
||||||
<p>Die C-Locale muß während der Datenbank-Initialisierung mit <em>initdb</em>
|
<p>Die Standard-Locale "C" muss während der Datenbank-Initialisierung mit <em>initdb</em>
|
||||||
bestimmt worden sein.</p>
|
verwendet worden sein, da andere <em>locales</em> den nächstgrößten Wert nicht
|
||||||
|
ermitteln können. Es ist allerdings möglich, einen besonderen <small>text_pattern_ops</small>-Index
|
||||||
|
für solche Fälle zu erstellen.</p>
|
||||||
|
|
||||||
<h4><a name="4.9">4.9</a>) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine
|
<h4><a name="4.9">4.9</a>) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine
|
||||||
Abfrage auswertet?</h4>
|
Abfrage auswertet?</h4>
|
||||||
|
@ -938,7 +936,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
<p>Ein R-Tree Index wird benutzt, um räumliche Daten zu indizieren. Ein
|
<p>Ein R-Tree Index wird benutzt, um räumliche Daten zu indizieren. Ein
|
||||||
Hash-Index kann nicht für Bereichssuchen genutzt werden. Ein B-Tree
|
Hash-Index kann nicht für Bereichssuchen genutzt werden. Ein B-Tree
|
||||||
Index kann nur für Bereichssuchen in eindimensionalen Daten genutzt
|
Index kann nur für Bereichssuchen in eindimensionalen Daten genutzt
|
||||||
werden. R-Trees können multi-dimensionale Daten abhandeln. Ein
|
werden. R-Trees können hingegen auch mit multi-dimensionalen Daten umgehen. Ein
|
||||||
Beispiel: Wenn ein R-Tree Index auf ein Attribut vom Typ <small>POINT</small>
|
Beispiel: Wenn ein R-Tree Index auf ein Attribut vom Typ <small>POINT</small>
|
||||||
gebildet wird, dann kann das System Abfragen wie z.B. "Zeige alle
|
gebildet wird, dann kann das System Abfragen wie z.B. "Zeige alle
|
||||||
Punkte, die sich in einem umgebenden Rechteck befinden" effizienter
|
Punkte, die sich in einem umgebenden Rechteck befinden" effizienter
|
||||||
|
@ -955,13 +953,13 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
|
|
||||||
<p>Die eingebauten R-Trees können Polygone und Rechtecke verarbeiten.
|
<p>Die eingebauten R-Trees können Polygone und Rechtecke verarbeiten.
|
||||||
Theoretisch können R-Trees auf eine hohe Anzahl von Dimensionen
|
Theoretisch können R-Trees auf eine hohe Anzahl von Dimensionen
|
||||||
erweitert werden. Praktisch bedingt diese Erweiterung eine Menge
|
erweitert werden. Für die Praxis bedeutet eine solche Erweiterung allerdings eine Menge
|
||||||
Arbeit und wir haben derzeit keinerlei Dokumentation darüber, wie das
|
Arbeit und wir haben derzeit keinerlei Dokumentation darüber, wie das
|
||||||
zu machen wäre.</p>
|
zu machen wäre.</p>
|
||||||
|
|
||||||
<h4><a name="4.11">4.11</a>) Was ist der "<em>Genetic Query Optimizer</em>"?</h4>
|
<h4><a name="4.11">4.11</a>) Was ist der "<em>Genetic Query Optimizer</em>"?</h4>
|
||||||
|
|
||||||
<p>Das GEQO-Modul in PostgreSQL soll dazu dienen, das Optimierungsproblem
|
<p>Das <small>GEQO</small>-Modul in PostgreSQL soll dazu dienen, das Optimierungsproblem
|
||||||
beim <small>JOIN</small> von vielen Tabellen auf der Basis genetischer Algorithmen
|
beim <small>JOIN</small> von vielen Tabellen auf der Basis genetischer Algorithmen
|
||||||
(GA) zu lösen. Es ermöglicht die Behandlung von großen JOIN-Queries durch
|
(GA) zu lösen. Es ermöglicht die Behandlung von großen JOIN-Queries durch
|
||||||
eine nicht-erschöpfende Suche.</p>
|
eine nicht-erschöpfende Suche.</p>
|
||||||
|
@ -970,9 +968,8 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende
|
Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende
|
||||||
ich einen Index bei solchen Suchabfragen?</h4>
|
ich einen Index bei solchen Suchabfragen?</h4>
|
||||||
|
|
||||||
<p>Der Operator <em>~</em> bewirkt die Anwendung eines regulären Ausdrucks. <em>~*</em> führt
|
<p>Der Operator <em>~</em> wendet einen regulären Ausdruck an und <em>~*</em> wendet ihn an, ohne die Groß- und Kleinschreibung zu beachten.
|
||||||
zur Anwendung eines regulären Ausdrucks mit Ignorierung der Groß-
|
Ebenso beachtet <small>LIKE</small> die Groß- und Kleinschreibung, und <small>ILIKE</small> nicht.</p>
|
||||||
und Kleinschreibung.</p>
|
|
||||||
|
|
||||||
<p>Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren, werden
|
<p>Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren, werden
|
||||||
in der Regel so ausgedruckt:</p>
|
in der Regel so ausgedruckt:</p>
|
||||||
|
@ -981,8 +978,8 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
FROM tabelle
|
FROM tabelle
|
||||||
WHERE LOWER(spalte) = 'abc'
|
WHERE LOWER(spalte) = 'abc'
|
||||||
</pre>
|
</pre>
|
||||||
<p>Ein funktionaler Index, der wie folgt erstellt wird, wird auf jeden Fall
|
<p>Hier kann kein normaler Index benutzt werden. Legt man hingegen
|
||||||
verwendet:</p>
|
einen funktionalen Index an, so wird er auf jeden Fall verwendet:</p>
|
||||||
<pre>
|
<pre>
|
||||||
CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))
|
CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -994,11 +991,11 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
|
||||||
Typ interner Name Bemerkungen
|
Typ interner Name Bemerkungen
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
VARCHAR(n) varchar die Größe legt die Maximallänge fest; kein
|
VARCHAR(n) varchar die Größe legt die Maximallänge fest; kein
|
||||||
Ausfüllen mit Leerzeichen
|
Auffüllen mit Leerzeichen
|
||||||
CHAR(n) bpchar mit Leerzeichen gefüllt bis zur angegebenen Länge
|
CHAR(n) bpchar mit Leerzeichen gefüllt bis zur angegebenen Länge
|
||||||
TEXT text Die Länge wird nur durch die maximale Zeilenlänge
|
TEXT text keine obere Schranke für die Länge
|
||||||
beschränkt
|
BYTEA bytea Bytearray mit variabler Länge (auch für
|
||||||
BYTEA bytea Bytearray mit variabler Länge
|
'\0'-Bytes geeignet)
|
||||||
"char" char 1 Zeichen
|
"char" char 1 Zeichen
|
||||||
</pre>
|
</pre>
|
||||||
<p>Der <em>interne Name</em> kommt vor allem in den Systemkatalogen und in manchen
|
<p>Der <em>interne Name</em> kommt vor allem in den Systemkatalogen und in manchen
|
||||||
|
@ -1022,10 +1019,10 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
die tatsächlich eingegebene Zeichenkette gespeichert wird.</p>
|
die tatsächlich eingegebene Zeichenkette gespeichert wird.</p>
|
||||||
|
|
||||||
<p><small>BYTEA</small> ist für binäre Daten, besonders für Werte, die <small>NULL</small>-Bytes haben. </p>
|
<p><small>BYTEA</small> ist für binäre Daten, besonders für Werte, die <small>NULL</small>-Bytes haben. </p>
|
||||||
<p>Die hier erwähnten Typen weisen ähnliche Performanzeigenschaften auf.</p>
|
<p>Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften auf.</p>
|
||||||
|
|
||||||
<h4><a name="4.15.1">4.15.1</a>) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des
|
<h4><a name="4.15.1">4.15.1</a>) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des
|
||||||
Werts?</h4>
|
Werts (serial/auto-increment)?</h4>
|
||||||
|
|
||||||
<p>PostgreSQL bietet einen <small>SERIAL</small>-Datentyp. Dieser erzeugt automatisch
|
<p>PostgreSQL bietet einen <small>SERIAL</small>-Datentyp. Dieser erzeugt automatisch
|
||||||
eine Sequenz auf die angegebene Spalte. Zum Beispiel:</p>
|
eine Sequenz auf die angegebene Spalte. Zum Beispiel:</p>
|
||||||
|
@ -1041,7 +1038,7 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
|
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
|
||||||
name TEXT
|
name TEXT
|
||||||
);
|
);
|
||||||
</pre><p> umgewandelt.</p>
|
</pre><p>umgewandelt.</p>
|
||||||
|
|
||||||
<p>Die <em>create_sequence</em> Man-Page liefert weitere Informationen über Sequenzen.
|
<p>Die <em>create_sequence</em> Man-Page liefert weitere Informationen über Sequenzen.
|
||||||
Es ist auch möglich, den <small>OID</small>-Wert jeder Spalte als einmaligen Wert
|
Es ist auch möglich, den <small>OID</small>-Wert jeder Spalte als einmaligen Wert
|
||||||
|
@ -1078,46 +1075,45 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
zurückgelieferten <a href="#4.16"><small>OID</small></a>-Wert als einmaligen Wert zu verwenden.
|
zurückgelieferten <a href="#4.16"><small>OID</small></a>-Wert als einmaligen Wert zu verwenden.
|
||||||
Dieser Ansatz ist allerdings PostgreSQL-spezifisch; außerdem wird nach
|
Dieser Ansatz ist allerdings PostgreSQL-spezifisch; außerdem wird nach
|
||||||
ca. 4 Milliarden Einträgen der <small>OID</small>-Wert wieder auf eine kleine Zahl
|
ca. 4 Milliarden Einträgen der <small>OID</small>-Wert wieder auf eine kleine Zahl
|
||||||
gesetzt, ist also nicht garantiert einmalig.</p>
|
gesetzt, ist also nicht garantiert immer einmalig oder aufsteigend.</p>
|
||||||
|
|
||||||
<p>In Perl mit dem <em>DBD::Pg</em>-Modul wird der OID-Wert nach einem
|
<p>Mit zum Beispiel dem <em>DBD::Pg</em>-Modul von Perl wird der OID-Wert nach einem
|
||||||
<em>$sth->excute()</em> über <em>$sth->{pg_oid_status}</em> zurückgeliefert.</p>
|
<em>$sth->excute()</em> über <em>$sth->{pg_oid_status}</em> zurückgeliefert.</p>
|
||||||
|
|
||||||
<h4><a name="4.15.3">4.15.3</a>) Führen <em>currval()</em> und <em>nextval()</em> zu einer Race-Condition mit anderen
|
<h4><a name="4.15.3">4.15.3</a>) Führen <em>currval()</em> und <em>nextval()</em> zu einer Race-Condition mit anderen
|
||||||
Nutzern?</h4>
|
Nutzern?</h4>
|
||||||
|
|
||||||
<p>Nein. Die Funktionen liefern einen Wert zurück, der von Ihrem Backend
|
<p>Nein. <em>currval()</em> liefert einen Wert zurück, der von Ihrem Backend
|
||||||
bestimmt wird, und der anderen Benutzern nicht zur Verfügung steht.</p>
|
bestimmt wird, und der anderen Benutzern nicht zur Verfügung steht.</p>
|
||||||
|
|
||||||
<h4><a name="4.15.4">4.15.4</a>) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht
|
<h4><a name="4.15.4">4.15.4</a>) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht
|
||||||
zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
|
zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner
|
||||||
Sequenz-/<small>SERIAL</small>-Spalte?</h4>
|
Sequenz-/<small>SERIAL</small>-Spalte?</h4>
|
||||||
|
|
||||||
<p>Um die konkurrente Verarbeitung zu verbessern, werden Sequenzwerte
|
<p>Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern, werden
|
||||||
nach Bedarf an laufende Transaktionen zugeteilt und erst beim
|
Sequenzen gerade nicht für andere Transaktionen gesperrt, sondern die
|
||||||
Abschluß der Transaktion gesperrt. Durch abgebrochene Transaktionen werden
|
Sequenznummern werden den laufenden Transaktionen sofort zugeteilt. Lücken in
|
||||||
Lücken in der Sequenznummerierung verursacht.</p>
|
der Sequenznummerierung werden durch abgebrochene Transaktionen verursacht.</p>
|
||||||
|
|
||||||
|
|
||||||
<h4><a name="4.16">4.16</a>) Was ist ein <small>OID</small>? Was ist ein <small>TID</small>?</h4>
|
<h4><a name="4.16">4.16</a>) Was ist ein <small>OID</small>? Was ist ein <small>TID</small>?</h4>
|
||||||
|
|
||||||
<p>OIDs sind PostgreSQLs Antwort auf eindeutige Zeilen-IDs. Jede Zeile,
|
<p><small>OID</small>s sind PostgreSQLs Antwort auf eindeutige Zeilen-IDs. Jede Zeile,
|
||||||
die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID. Alle
|
die in PostgreSQL erzeugt wird, bekommt eine eindeutige <small>OID</small>. Alle
|
||||||
OIDs, die durch initdb erzeugt werden, sind kleiner als 16384 (siehe
|
<small>OID</small>s, die durch initdb erzeugt werden, sind kleiner als 16384 (siehe
|
||||||
include/access/transam.h). Alle OIDs, die durch den Benutzer erzeugt
|
include/access/transam.h). Alle <small>OID</small>s, die durch den Benutzer erzeugt
|
||||||
werden, sind gleich oder größer als dieser Wert. Standardmäßig sind
|
werden, sind größer oder gleich diesem Wert. Standardmäßig sind
|
||||||
all OIDs nicht nur innerhalb einer Tabelle oder Datenbank,
|
all <small>OID</small>s nicht nur innerhalb einer Tabelle oder Datenbank,
|
||||||
sondern in der gesamten PostgreSQL-Installation einmalig.</p>
|
sondern in der gesamten PostgreSQL-Installation einmalig.</p>
|
||||||
|
|
||||||
<p>PostgreSQL benutzt OIDs in seinen internen Systemtabellen, um Zeilen
|
<p>PostgreSQL benutzt <small>OID</small>s in seinen internen Systemtabellen, um Zeilen
|
||||||
in JOINs zwischen Tabellen zu verknüpfen. Es ist möglich, einen Index
|
in JOINs zwischen Tabellen zu verknüpfen. Es ist möglich, einen Index
|
||||||
für die OID-Spalte zu erstellen, wodurch schnellere Zugriffszeiten
|
für die <small>OID</small>-Spalte zu erstellen, wodurch schnellere Zugriffszeiten
|
||||||
erreicht werden können. Es wird empfohlen, OID-Werte in Spalten vom Typ OID
|
erreicht werden können. Es wird empfohlen, <small>OID</small>-Werte in Spalten vom Typ <small>OID</small>
|
||||||
zu speichern.</p>
|
zu speichern.</p>
|
||||||
|
|
||||||
<p>OIDs werden allen neuen Zeilen von einem zentralen Bereich, der von
|
<p><small>OID</small>s werden allen neuen Zeilen von einem zentralen Bereich, der von
|
||||||
allen Datenbanken genutzt wird, zugewiesen. Nichts hindert Sie daran,
|
allen Datenbanken genutzt wird, zugewiesen. Nichts hindert Sie daran,
|
||||||
die OID zu ändern, oder eine Kopie der Tabelle mit den originalen Oids
|
die <small>OID</small> zu ändern, oder eine Kopie der Tabelle mit den originalen <small>OID</small>s
|
||||||
anzulegen:</p>
|
anzulegen:</p>
|
||||||
<pre>
|
<pre>
|
||||||
CREATE TABLE new_table(mycol int);
|
CREATE TABLE new_table(mycol int);
|
||||||
|
@ -1127,6 +1123,17 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
DROP TABLE tmp_table;
|
DROP TABLE tmp_table;
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
<p>O<small>ID</small>s werden als 4-Byte Integer gespeichert und laufen bei
|
||||||
|
einem Wert von ungefähr 4 Milliarden über. Niemand hat jemals davon
|
||||||
|
berichtet, dass dies passiert wäre aber wir haben geplant, diese
|
||||||
|
Beschränkung aufzuheben, bevor das jemand ausprobieren kann.</p>
|
||||||
|
|
||||||
|
<p>T<small>ID</small>s werden benutzt, um bestimmte physikalische Zeilen
|
||||||
|
durch Block und Offset Werte zu identifizieren. T<small>ID</small>s
|
||||||
|
verändern sich, sobald Zeilen verändert oder zurückgeladen werden. Sie
|
||||||
|
werden in Indexeinträgen benutzt um auf die physikalischen Zeilen zu
|
||||||
|
zeigen.
|
||||||
|
|
||||||
<h4><a name="4.17">4.17</a>) Welche Bedeutung haben die verschiedenen Ausdrücke, die in
|
<h4><a name="4.17">4.17</a>) Welche Bedeutung haben die verschiedenen Ausdrücke, die in
|
||||||
PostgreSQL benutzt werden (z.B. attribute, class,...)?</h4>
|
PostgreSQL benutzt werden (z.B. attribute, class,...)?</h4>
|
||||||
|
|
||||||
|
@ -1139,7 +1146,7 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
<li>retrieve, SELECT</li>
|
<li>retrieve, SELECT</li>
|
||||||
<li>replace, UPDATE</li>
|
<li>replace, UPDATE</li>
|
||||||
<li>append, INSERT</li>
|
<li>append, INSERT</li>
|
||||||
<li>oid, serial value</li>
|
<li><small>OID</small>, serial value</li>
|
||||||
<li>portal, cursor</li>
|
<li>portal, cursor</li>
|
||||||
<li>range variable, table name, table alias</li>
|
<li>range variable, table name, table alias</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -1173,7 +1180,7 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
large obj descriptor</em>". Warum?</h4>
|
large obj descriptor</em>". Warum?</h4>
|
||||||
|
|
||||||
<p>Sie sollten die Anweisungen <small>BEGIN WORK</small> und <small>COMMIT</small> bei jeden Gebrauch von
|
<p>Sie sollten die Anweisungen <small>BEGIN WORK</small> und <small>COMMIT</small> bei jeden Gebrauch von
|
||||||
Large Objects benutzen. Also um <small>lo_open ... lo_close</small>.</p>
|
Large Objects benutzen. Also um <small>lo_open</small> ... <small>lo_close</small>.</p>
|
||||||
|
|
||||||
<p>Derzeit erzwingt PostgreSQL diese Regel, indem es die Handles der
|
<p>Derzeit erzwingt PostgreSQL diese Regel, indem es die Handles der
|
||||||
Large Objects beim <small>COMMIT</small> der Transaktion schließt. So führt der erste
|
Large Objects beim <small>COMMIT</small> der Transaktion schließt. So führt der erste
|
||||||
|
@ -1204,14 +1211,14 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
FROM tabelle_1
|
FROM tabelle_1
|
||||||
WHERE spalte1 IN (SELECT spalte2 FROM tabelle_2)
|
WHERE spalte1 IN (SELECT spalte2 FROM tabelle_2)
|
||||||
</pre>
|
</pre>
|
||||||
<p>in:</p>
|
<p>ersetzen durch:</p>
|
||||||
<pre>
|
<pre>
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM tabelle_1
|
FROM tabelle_1
|
||||||
WHERE EXISTS (SELECT spalte2 FROM tabelle_2 WHERE spalte1 = spalte2)
|
WHERE EXISTS (SELECT spalte2 FROM tabelle_2 WHERE spalte1 = spalte2)
|
||||||
</pre>
|
</pre>
|
||||||
<p> Damit diese Abfrage effizient durchgeführt wird, sollte für '<em>spalte2</em>'
|
<p> Damit diese Abfrage effizient durchgeführt wird, sollte für '<em>spalte2</em>'
|
||||||
ein Index angelegt worden sein. Ab PostgreSQL 7.4 <small>IN</small> verwendet
|
ein Index angelegt worden sein. Ab PostgreSQL 7.4 verwendet <small>IN</small>
|
||||||
die gleichen Methoden wie die normale Tabellenverknüpfung und ist daher soger
|
die gleichen Methoden wie die normale Tabellenverknüpfung und ist daher soger
|
||||||
<small>EXISTS</small> vorzuziehen.
|
<small>EXISTS</small> vorzuziehen.
|
||||||
</p>
|
</p>
|
||||||
|
@ -1235,12 +1242,13 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
Diese identischen Abfragen verknüpfen <em>tabelle_1</em> mit <em>tabelle_2</em> über die
|
Diese identischen Abfragen verknüpfen <em>tabelle_1</em> mit <em>tabelle_2</em> über die
|
||||||
Spalte '<em>spalte</em>' und geben außerdem alle unverknüpften Zeilen in tabelle_1
|
Spalte '<em>spalte</em>' und geben außerdem alle unverknüpften Zeilen in tabelle_1
|
||||||
(diejenigen, die keine Entsprechung in <em>tabelle_2</em> haben) zurück.
|
(diejenigen, die keine Entsprechung in <em>tabelle_2</em> haben) zurück.
|
||||||
Ein <small>FULL JOIN</small> würde dagegen alle verknüpften Zeilen sowie jeweils alle
|
Ein <small>RIGHT JOIN</small> würde hingegen alle unverknüpften Zeilen in tabelle_2 hinzufügen und
|
||||||
unverknüpften Zeilen aus den beiden Tabellen verknüpfen. Die Angabe von
|
ein <small>FULL JOIN</small> würde alle verknüpften Zeilen sowie jeweils alle
|
||||||
|
unverknüpften Zeilen aus den beiden Tabellen zurückliefern. Die Angabe von
|
||||||
OUTER ist nicht zwingend und kann in <small>LEFT</small>, <small>RIGHT</small> und <small>FULL</small>-Verknüpfungen
|
OUTER ist nicht zwingend und kann in <small>LEFT</small>, <small>RIGHT</small> und <small>FULL</small>-Verknüpfungen
|
||||||
weggelassen werden. Normale Verknüpfungen sind <small>INNER JOIN</small>s.</p>
|
weggelassen werden. Normale Verknüpfungen sind <small>INNER JOIN</small>s.</p>
|
||||||
|
|
||||||
<p>In früheren Versionen von PostgreSQL können <small>OUTER JOIN</small>s mittels <small>UNION</small>
|
<p>In früheren Versionen von PostgreSQL konnten <small>OUTER JOIN</small>s mittels <small>UNION</small>
|
||||||
und <small>NOT IN</small> simuliert werden. Zum Beispiel '<em>tabelle_1</em>' und '<em>tabelle_2</em>'
|
und <small>NOT IN</small> simuliert werden. Zum Beispiel '<em>tabelle_1</em>' und '<em>tabelle_2</em>'
|
||||||
können als <small>LEFT OUTER JOIN</small> auch so verknüpft werden:</p>
|
können als <small>LEFT OUTER JOIN</small> auch so verknüpft werden:</p>
|
||||||
<pre>
|
<pre>
|
||||||
|
@ -1260,14 +1268,14 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
zuzugreifen. Da PostgreSQL datenbank-spezifische Systemkataloge lädt, ist
|
zuzugreifen. Da PostgreSQL datenbank-spezifische Systemkataloge lädt, ist
|
||||||
eine datenbankübergreifende Abfrage nicht möglich.</p>
|
eine datenbankübergreifende Abfrage nicht möglich.</p>
|
||||||
|
|
||||||
<p><em>contrib/dblink</em> ist eine Erweiterung, die datenbankübergreifende Abfragen
|
<p><em>contrib/dblink</em> ist eine Erweiterung, die datenbankübergreifende Abfragen über
|
||||||
ermöglicht.</p>
|
Funktionsaufrufe ermöglicht.</p>
|
||||||
|
|
||||||
<p>Es ist natürlich möglich, dass eine Client-Anwendung gleichzeitige Verbindungen
|
<p>Es ist natürlich möglich, dass eine Client-Anwendung gleichzeitige Verbindungen
|
||||||
zu verschiedenen Datenbanken aufbaut und selber Datensätze zusammenfügt.</p>
|
zu verschiedenen Datenbanken aufbaut und selber Datensätze zusammenfügt.</p>
|
||||||
|
|
||||||
<p>Ab 7.3 unterstützt PostgreSQL <em>schemas</em>, die die Aufteilung einer Datenbank
|
<p>Ab 7.3 unterstützt PostgreSQL <em>schemas</em>, die die Aufteilung einer Datenbank
|
||||||
in mehrere logische Bereiche ermöglichen. Bei vielen Anwendungen könnten dies
|
in mehrere logische Bereiche ermöglichen. Bei vielen Anwendungen könnten diese
|
||||||
einen geeigneten Ersatz für den Zugriff auf eine andere Datenbank bieten.</p>
|
einen geeigneten Ersatz für den Zugriff auf eine andere Datenbank bieten.</p>
|
||||||
|
|
||||||
<h4><a name="4.25">4.25</a>) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
|
<h4><a name="4.25">4.25</a>) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion
|
||||||
|
@ -1279,16 +1287,16 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
<h4><a name="4.26">4.26</a>) Warum kann ich temporäre Tabellen in <small>PL/PgSQL</small>-Funktionen nicht
|
<h4><a name="4.26">4.26</a>) Warum kann ich temporäre Tabellen in <small>PL/PgSQL</small>-Funktionen nicht
|
||||||
zuverlässig erstellen bzw. löschen?</h4>
|
zuverlässig erstellen bzw. löschen?</h4>
|
||||||
|
|
||||||
<p><small>PL/PgSQL</small> verarbeitet die Inhalte einer Funktion in einer Cache. Dies hat
|
<p><small>PL/PgSQL</small> verarbeitet die Inhalte einer Funktion in eine Cache. Dies hat
|
||||||
eine unangenehme Nebenwirkung, nämlich dass wenn eine <small>PL/PgSQL</small>-
|
eine unangenehme Nebenwirkung, nämlich dass wenn eine <small>PL/PgSQL</small>-
|
||||||
Funktion auf eine temporäre Tabelle zugreift, und diese Tabelle
|
Funktion auf eine temporäre Tabelle zugreift, und diese Tabelle
|
||||||
anschließend gelöscht bzw. neu erstellt wird, die Funktion
|
anschließend gelöscht bzw. neu erstellt wird, die Funktion
|
||||||
fehlschlagen wird, da die gecachte Funktionsinhalte noch auf die alte
|
fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte
|
||||||
temporäre Tabelle zeigen.</p>
|
temporäre Tabelle zeigen.</p>
|
||||||
|
|
||||||
<p>Die Lösung für diese Probleme besteht darin, in der Funktion mittels
|
<p>Die Lösung für diese Probleme besteht darin, in der <small>PL/PgSQL</small> Funktion mittels
|
||||||
<small>EXECUTE</small> auf temporäre Tabellen zuzugreifen. Diese bewirkt, dass bei
|
<small>EXECUTE</small> auf temporäre Tabellen zuzugreifen. Diese bewirkt, dass bei
|
||||||
jedem Funktionsruf die betreffende Abfrage von <small>PL/PgSQL</small> neu geparst wird.</p>
|
jedem Funktionsruf die betreffende Abfrage neu geparst wird.</p>
|
||||||
|
|
||||||
<h4><a name="4.27">4.27</a>) Welche Möglichkeiten zur Datenbank-Replikation gibt es?</h4>
|
<h4><a name="4.27">4.27</a>) Welche Möglichkeiten zur Datenbank-Replikation gibt es?</h4>
|
||||||
|
|
||||||
|
@ -1296,11 +1304,7 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
In diesen werden Datenänderungen in der Master-Datenbank durchgeführt und an
|
In diesen werden Datenänderungen in der Master-Datenbank durchgeführt und an
|
||||||
Slave-Datenbanken weitergeleitet. Informationen über diese Lösungen
|
Slave-Datenbanken weitergeleitet. Informationen über diese Lösungen
|
||||||
befinden sich auf der folgenden Seite (unten):
|
befinden sich auf der folgenden Seite (unten):
|
||||||
<a href="http://gborg.PostgreSQL.org/genpage?replication_research">http://gborg.PostgreSQL.org/genpage?replication_research</a> .</p>
|
<a href="http://gborg.postgresql.org/genpage?replication_research">http://gborg.postgresql.org/genpage?replication_research</a> .</p>
|
||||||
|
|
||||||
<p>Eine Multi-Master-Lösung befindet sich in der Entwicklung. Näheres dazu
|
|
||||||
befindet sich hier:
|
|
||||||
<a href="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php">http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</a> .</p>
|
|
||||||
|
|
||||||
<h4><a name="4.28">4.28</a>) Welche Möglichkeiten zur Verschlüsselung gibt es?</h4>
|
<h4><a name="4.28">4.28</a>) Welche Möglichkeiten zur Verschlüsselung gibt es?</h4>
|
||||||
|
|
||||||
|
@ -1363,7 +1367,7 @@ BYTEA bytea Bytearray mit variabler L
|
||||||
die Übersetzung nicht immer auf dem aktuellsten Stand.</p>
|
die Übersetzung nicht immer auf dem aktuellsten Stand.</p>
|
||||||
|
|
||||||
<p>Die aktuellste Version der deutschen Übersetzung befindet sich immer unter
|
<p>Die aktuellste Version der deutschen Übersetzung befindet sich immer unter
|
||||||
<a href="http://sql-info.de/postgresql/FAQ_german.html">http://sql-info.de/postgresql/FAQ_german.html</a>.
|
<a href="http://sql-info.de/de/postgresql/FAQ_german.html">http://sql-info.de/de/postgresql/FAQ_german.html</a>.
|
||||||
Diese "Arbeitsversion" enthält eventuell Änderungen, die noch nicht auf der
|
Diese "Arbeitsversion" enthält eventuell Änderungen, die noch nicht auf der
|
||||||
PostgreSQL-Website eingebunden worden sind.</p>
|
PostgreSQL-Website eingebunden worden sind.</p>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue