diff --git a/doc/FAQ_german b/doc/FAQ_german new file mode 100644 index 0000000000..0f6afb04f1 --- /dev/null +++ b/doc/FAQ_german @@ -0,0 +1,1075 @@ + + Häufig gestellte Fragen (FAQ) zu PostgreSQL + + Last updated: Sat Jul 10 00:37:57 EDT 1999 + + Current maintainer: Bruce Momjian (maillist@candle.pha.pa.us) + + Deutsche Übersetzung von Karsten Schulz (schulz@linux-systemhaus.de) + + Letzte Aktualisierung der deutschen Übersetzung: Don, den 05.08.1999, + 09:00 CET + + Die aktuellste Version dieses Dokuments kann auf der PostgreSQL + Website http://www.PostgreSQL.org angesehen werden. + + Linux-spezifische Fragen werden in + http://www.PostgreSQL.org/docs/faq-linux.html beantwortet (deutsche + Übersetzung in Arbeit!). + + Irix-spezifische Fragen werden in + http://www.PostgreSQL.org/docs/faq-irix.html beantwortet. + + HPUX-spezifische Fragen werden in + http://www.PostgreSQL.org/docs/faq-hpux.shtml beantwortet. + _________________________________________________________________ + + Allgemeine Fragen + + 1.1) Was ist PostgreSQL? + 1.2) Welches Copyright liegt auf PostgreSQL? + 1.3) Auf welchen Unix-Plattformen läuft PostgreSQL? + 1.4) Welche Nicht-Unix-Versionen sind verfügbar? + 1.5) Woher bekomme ich PostgreSQL? + 1.6) Wo bekomme ich Support für PostgreSQL? + 1.7) Was ist die neueste Version von PostgreSQL? + 1.8) Welche Dokumente sind für PostgreSQL verfügbar? + 1.9) Wie erfahre ich etwas über bekannte Fehler oder fehlende + Eigenschaften von PostgreSQL? + 1.10) Wie kann ich SQL lernen? + 1.11) Ist PostgreSQL Y2K (Jahr 2000) fähig? + 1.12) Wie kann ich am Entwicklerteam teilnehmen? + 1.13) Wie sende ich einen Fehler-Bericht? + 1.14) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen? + + Fragen zu Benutzerprogrammen + + 2.1) Gibt es ODBC-Treiber für PostgreSQL? + 2.2) Welche Werkzeuge gibt es, um PostgreSQL-Datenbanken über + Webseiten verfügbar zu machen? + 2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle? Einen + Report-Generator? Eine eingebaute Query-Schnittstelle? + 2.4) Welche Sprachen sind für die Kommunikation mit PostgreSQL + verfügbar? + + Administrative Fragen + + 3.1) Warum schlägt initdb fehl? + 3.2) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql? + 3.3) Wenn ich den postmaster starte, bekomme ich einen Bad System Call + oder eine core dumped Meldung. Warum? + 3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich eine + IpcMemoryCreate Fehlermeldungen. Warum? + 3.5) Wenn ich versuche, den postmaster zu starten, bekomme ich eine + IpcSemaphoreCreate Fehlermeldungen. Warum? + 3.6) Wie verhindere ich, daß andere Hosts auf meine PostgreSQL + Datenbanken zugreifen? + 3.7) Warum kann ich mich nicht von einer anderen Maschine mit meiner + Datenbank verbinden? + 3.8) Warum kann ich nicht als root auf die Datenbank zugreifen? + 3.9) Alle meine Server stürzen bei gleichzeitigem Tabellenzugriff ab. + Warum? + 3.10) Wie optimiere ich die Datenbankmaschine für bessere Leistung? + 3.11) Welche Debugging/Fehlersuch-Hilfsmittel sind für PostgreSQL + verfügbar? + 3.12) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine + Verbindung versuche. Warum? + 3.13) Was sind die pg_psort.XXX Dateien in meinem + Datenbank-Verzeichnis? + 3.14) Wie richte ich eine Benutzergruppe (pg_group) ein? + + Fragen zum Betrieb + + 4.1) Das System scheint Kommata, Dezimalpunkte und Datumsformate + durcheinanderzubringen. + 4.2) Was ist der genauer Unterschied zwischen Binary Cursors und + Normal Cursors? + 4.3) Wie wähle ich per SELECT nur die ersten paar Zeilen in einem + Query aus? + 4.4) Wie bekomme ich eine Liste der Tabellen oder anderen Dingen, die + ich in psql sehen kann + 4.5) Wie entferne ich eine Spalte von einer Tabelle? + 4.6) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine + Datenbank? + 4.7) Wieviel Plattenplatz benötigt eine Datenbank zur Speicherung + einer Datendatei mit zeilenweisen Datensätzen? + 4.8) Wie finde ich heraus, welche Indizes oder Operationen in der + Datenbank definiert sind? + 4.9) Meine Queries sind langsam oder nutzen die Indizes nicht. Warum? + 4.10) Auf welche Weise kann ich sehen, wie der Query-Optimierer meine + Abfrage auswertet? + 4.11) Was ist ein R-Tree Index? + 4.12) Was ist "Genetic Query Optimization"? + 4.13) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei + einer Suche mit Ignorierung der Groß- und Kleinschreibweisen? + 4.14) Wie ermittle ich in einem Query, daß ein Feld NULL ist? + 4.15) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen? + 4.16) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung + des Inhalts? + 4.17) Was ist ein Oid? Was ist ein Tid? + 4.18) Was ist die Bedeutung der verschiedenen Ausdrücke, die in + PostgreSQL benutzt werden (z.B. attribute, class,...)? + 4.19) Wieso bekomme ich einen Fehler: "FATAL: palloc failure: memory + exhausted?" + 4.20) Wie kann ich feststellen, welche PostgreSQL-Version ich laufen + habe? + 4.21) Beim Arbeiten mit "Large-Objects" kommt die Fehlermeldung: + invalid large obj descriptor. Warum? + + PostgreSQL erweitern + + 5.1) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich + sie in psql aufrufe, kommt ein core dump. Warum? + 5.2) Was bedeutet die Meldung: NOTICE:PortalHeapMemoryFree: 0x402251d0 + not in alloc set!? + 5.3) Wie kann ich ein paar elegante neue Feldtypen und Funktionen zu + PostgreSQL beitragen? + 5.4) Wie schreibe ich eine Funktion in C, die ein Tuple zurückliefert? + 5.5) Ich habe eine der Quellendateien geändert. Warum macht sich die + Änderung beim erneuten Compilerlauf nicht bemerkbar? + _________________________________________________________________ + + Allgemeine Fragen + + 1.1) Was ist PostgreSQL? + + PostgreSQL ist eine Verbesserung des + POSTGRES-Datenbank-Managementsystems, ein "Next-Generation" + DBMS-Forschungsprototyp. Während PostgreSQL das leistungsfähige + Datenmodell und die reichhaltigen Datentypen von POSTGRES beibehält, + ersetzt es die PostQuel-Abfragesprache durch eine ausgedehnte + Teilmenge von SQL. PostgreSQL ist frei und der komplette Quellcode ist + verfügbar. + + Die PostgreSQL-Entwicklung wird von einem Team von Internet-Entwickler + durchgeführt, die alle an der PostgreSQL-Entwicklungs-Mailingliste + teilnehmen. Der aktuelle Koordinator ist Marc G. Fournier + (scrappy@postgreSQL.org) (siehe unten, wie man sich anmelden kann). + Dieses Team ist jetzt für alle aktuellen und zukünftigen Entwicklungen + von PostgreSQL verantwortlich. + + Die Autoren von PostgreSQL 1.01 waren Andrew Yu und Jolly Chen. Viele + andere haben zur Portierung, zu den Tests, zur Fehlersuche und zur + Verbesserung des Codes beigetragen. Der ursprüngliche Postgres-Code, + von dem PostgreSQL abstammt, ist auf die Bemühungen von vielen + Studierenden und Diplomanden, sowie Programmierern, die unter der + Weisung des Professors Michael Stonebraker an der Universität von + Kalifornien, Berkeley arbeiteteten, zurückzuführen. + + Der ursprüngliche Name der Software bei Berkeley war Postgres. Als die + SQL-Funktionalität 1995 hinzugefügt wurde, wurde sein Name zu + Postgres95 geändert. Der Name wurde Ende 1996 zu PostgreSQL geändert. + + 1.2) Welches Copyright liegt auf PostgreSQL? + + PostgreSQL steht unter folgendem COPYRIGHT (Originaltext): + + PostgreSQL Data Base Management System + + Copyright (c) 1994-6 Regents of the University of California + + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose, without fee, and without a written + agreement is hereby granted, provided that the above copyright notice + and this paragraph and the following two paragraphs appear in all + copies. + + IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY + FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, + INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND + ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF + CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, + UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + + Es gilt die Copyright-Klausel im Original! Informativ folgt hier eine + Übersetzung. Die Übersetzung besitzt keinerlei rechtlichen Status. + Insbesondere kann sich niemand auf diese Übersetzung berufen: + + PostgreSQL Datenbank Management System + + Copyright (c) 1994-6 Regents of the University of California + + Die Erlaubnis, diese Software und seine Unterlagen für jeden möglichen + Zweck, ohne Gebühr und ohne eine schriftliche Vereinbarung zu + benutzen, zu kopieren, zu ändern und zu verteilen wird hiermit + bewilligt, vorausgesetzt daß der oben genannte Urheberrechtsvermerk + und dieser Paragraph und die folgenden zwei Paragraphen in allen + Kopien erscheinen. + + IN KEINEM FALL IST DIE UNIVERSITÄT VON KALIFORNIEN GEGENÜBER JEDEM + MÖGLICHEN BETEILIGTEN FÜR DIE DIREKTEN, INDIREKTEN, SPEZIELLEN, + BEILÄUFIGEN ODER FOLGESCHÄDEN, EINSCHLIEßLICH DER VERLORENEN PROFITE + VERANTWORTLICH, DIE AUS DEM GEBRAUCH VON DIESER SOFTWARE UND SEINEN + UNTERLAGEN HERAUS ENTSTEHEN, SELBST WENN DIE UNIVERSITÄT VON + KALIFORNIEN VON DER MÖGLICHKEIT SOLCHEN SCHADENS BENACHRICHTIGT WORDEN + IST. + + DIE UNIVERSITÄT VON KALIFORNIEN LEHNT SPEZIELL ALLE MÖGLICHE GARANTIEN + AB, EINSCHLIESSLICH, ABER NICHT BEGRENZT AUF, DIE IMPLIZIERTEN + GARANTIEN VON GESCHÄFTSNUTZEN UND EIGNUNG ZU EINEM BESTIMMTEN ZWECK. + DIE SOFTWARE, DIE NACHSTEHEND BEREITGESTELLT WIRD, BASIERT AUF EINER + "SO WIE SIE IST"-GRUNDLAGE, UND DIE UNIVERSITÄT VON KALIFORNIEN HAT + KEINE VERPFLICHTUNGEN, WARTUNG, SUPPORT, AKTUALISIERUNGSVORGÄNGE, + VERBESSERUNGEN ODER ÄNDERUNGEN ZUR VERFÜGUNG ZU STELLEN. + + 1.3) Auf welchen Unix-Plattformen läuft PostgreSQL? + + Die Autoren haben PostgreSQL auf folgenden Plattformen kompiliert und + getestet (einige dieser Kompilierungen benötigen den C-Compiler gcc): + * aix - IBM auf AIX 3.2.5 or 4.x + * alpha - DEC Alpha AXP auf Digital Unix 2.0, 3.2, 4.0 + * BSD44_derived - OS abgeleitet von 4.4-lite BSD (NetBSD, FreeBSD) + * bsdi - BSD/OS 2.x, 3.x, 4.x + * dgux - DG/UX 5.4R4.11 + * hpux - HP PA-RISC auf HP-UX 9.*, 10.* + * i386_solaris - i386 Solaris + * irix5 - SGI MIPS auf IRIX 5.3 + * linux - Intel i86 Alpha SPARC PPC M68k + * sco - SCO 3.2v5 Unixware + * sparc_solaris - SUN SPARC auf Solaris 2.4, 2.5, 2.5.1 + * sunos4 - SUN SPARC auf SunOS 4.1.3 + * svr4 - Intel x86 auf Intel SVR4 and MIPS + * ultrix4 - DEC MIPS auf Ultrix 4.4 + + 1.4) Welche Nicht-Unix-Versionen sind verfügbar? + + Es ist möglich, die libpq C-Bibliothek, psql und andere Schnittstellen + und Binaries zu kompilieren, um sie auf der MS-Windows-Plattform + laufen zu lassen. In diesem Fall läuft der Client auf MS-Windows und + steht über TCP/IP mit einem Server in Verbindung, der auf einer + unserer unterstützten Unixplattformen läuft. Es gibt die Datei + win31.mak in der Distribution, um die Win32 libpq-Bibliothek und psql + zu erzeugen. + + Der Datenbankserver arbeitet jetzt auch unter Benutzung der Cygnus + Unix/NT-Porting-Bibliotheken auf Windows NT. Siehe auch + pgsql/doc/README.NT in der Distribution. + + Es gibt eine weitere Portierung, die U/Win benutzt bei + http://surya.wipro.com/uwin/ported.html. + + 1.5) Woher bekomme ich PostgreSQL? + + Die erste Anlaufadresse für PostgreSQL ist der ftp-Server + ftp://ftp.postgreSQL.org/pub + + Die entsprechenden Spiegelserver sind auf der Hauptwebseite + aufgelistet. + + 1.6) Wo bekomme ich Support für PostgreSQL? + + Es gibt keinen offiziellen Support für PostgreSQL von der Universität + von Kalifornien, Berkeley. Der Support wird durch freiwilligen Einsatz + geleistet. + + Die Mailing-Liste ist: pgsql-general@postgreSQL.org. Die Liste ist für + PostgreSQL betreffende Themen vorbehalten. Um sich anzumelden, sende + eine Email mit folgenden Zeilen im Text (nicht in der Betreffzeile): + + subscribe + end + + an pgsql-general-request@postgreSQL.org. + + Es gibt auch eine Digest-Liste (Eine Liste, die Mails zusammengefasst + sendet). Um sich an dieser Digestliste anzumelden, sende eine Email + an: pgsql-general-digest-request@postgreSQL.org mit folgendem Text: + + subscribe + end + + Die Digests werden an die Mitglieder der Liste geschickt, wenn ca. + 30kB an Mails zusammengekommen sind. + + Die Bug-Mailingliste ist verfübar. Um sich an dieser Liste anzumelden, + sende eine Email an bugs-request@postgreSQL.org mit folgendem Text: + + + subscribe + end + + Es gibt ebenfalls eine Entwickler-Diskussionsliste. Um sich an dieser + Liste anzumelden, sende eine Email an hackers-request@postgreSQL.org + mit diesem Text: + + + subscribe + end + + Weitere Mailinglisten und Informationen zu PostgreSQL können auf der + PostgreSQL-Homepage im WWW gefunden werden: + + http://postgreSQL.org + + Es gibt außerdem einen IRC-Channel im EFNet, Kanal #PostgreSQL. Bruce + nutzt den Unix-Befehl: irc -c '#PostgreSQL' "$USER" irc.phoenix.net um + teilzunehmen + + Kommerzieller Support für PostgreSQL ist bei http://www.pgsql.com/ + verfügbar + + 1.7) Was ist die neueste Version von PostgreSQL? + + Das neueste Release von PostgreSQL ist die Version 6.5. + + Wir planen alle 4 Monate Hauptreleases herauszugeben. + + 1.8) Welche Dokumente sind für PostgreSQL verfügbar? + + Einige Handbücher, Man-Pages und einige kleine Testprogramme sind in + der Distribution enthalten. Siehe im /doc-Verzeichnis. + + psql hat einige nette \d-Befehle, um Informationen über Typen, + Operatoren, Funktionen, Aggregate, usw. zu zeigen. + + Die Website enthält sogar noch mehr Unterlagen. + + 1.9) Wie erfahre ich etwas über bekannte Fehler oder fehlende Eigenschaften + von PostgreSQL? + + PostgreSQL unterstützt eine ausgedehnte Untermenge von SQL-92. Siehe + unser TODO für eine Auflistung der bekannten Fehler, fehlende + Eigenschaften und zukünftige Pläne. + + 1.10) Wie kann ich SQL lernen? + + Es gibt nette SQL-Tutorials bei http://w3.one.net/~jhoffman/sqltut.htm + und bei + http://ourworld.compuserve.com/homepages/Graeme_Birchall/DB2_COOK.HTM. + + Viele unserer User mögen The Practical SQL Handbook, Bowman et al., + Addison Wesley. + + 1.11) Ist PostgreSQL Y2K (Jahr 2000) fähig? + + Ja, wir können Datumsangaben nach dem Jahr 2000 n.Chr. und vor 2000 + v.Chr. leicht verarbeiten. + + 1.12) Wie kann ich am Entwicklerteam teilnehmen? + + Zuerst lade die neuesten Quellen herunter und lies die + PostgreSQL-Entwicklerunterlagen auf unserer Website oder in der + Distribution. Zweitens melde Dich zu den Mailinglisten pgsql-hackers + und pgsql-patches an. Drittens sende qualitativ hochwertige + Programmänderungen an die pgsql-patches Mailingliste. + + Es gibt ungefähr ein Dutzend Leute, die das commit-Recht im + PostgreSQL-CVS Archiv haben. Alle haben so viele hochwertige Patches + eingebracht, daß es schwer für die CVS-Verwalter war, mitzuhalten. Und + wir hatten das Vertrauen, daß die Änderungen, die sie festlegten, sehr + wahrscheinlich von hoher Qualität sind. + + 1.13) Wie sende ich einen Fehler-Bericht? + + Fülle die "Fehler-Vorlage"-Datei (bug.template im doc-Verzeichnis) aus + und sende sie an: bugs@postgreSQL.org + + Überprüfe auch den ftp-Server ftp://ftp.postgreSQL.org/pub, um + nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches + gibt. + + 1.14) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen? + + Es gibt verschiedene Methoden, Software zu messen: Eigenschaften, + Leistung, Zuverlässigkeit, Support und Preis. + + Eigenschaften + PostgreSQL hat die meisten Eigenschaften, die in großen + kommerziellen DBMS's, wie Transaktionen, Sub-SELECTs, Trigger, + Views und verfeinertes Locking, vorhanden sind. Wir haben + einige Eigenschaften, die andere nicht haben, wie + benutzerbestimmte Typen, Vererbung, Regeln, und die + Multi-Versionen-Steuerung zum Verringern von konkurrierenden + Locks. Wir haben keine referentielle Integrität von externen + Schlüsseln oder Outer Joins, aber wir arbeiten an diesen Dingen + für unser nächstes Release. + + Leistung + PostgreSQL läuft in zwei Modi. Im normalen fsync-Modus wird + jede komplette Transaktion auf die Platte geschrieben und + garantiert, daß, selbst wenn das Betriebssystem abstürzt und + der Strom ausfällt, die Daten sicher gespeichert wurden. In + diesem Modus sind wir langsamer als die meisten kommerziellen + Datenbanken, zum Teil, weil wenige von ihnen solch eine + konservatives Methode der Datenspeicherung in ihren + Standardbetriebsmodi betreiben. + + Im no-fsync-Modus sind wir normalerweise schneller als + kommerzielle Datenbanken. In diesem Modus kann ein + Betriebssystemabsturz jedoch Datenkorruption zur Folge haben. + Wir arbeiten daran, einen Zwischenmodus zur Verfügung zu + stellen, der unter weniger Leistungseinbuße leidet als der + fsync-Modus und die Datenintegrität innerhalb 30 Sekunden im + Falle eines Betriebssystemabsturzes erlaubt. Der Modus ist + durch den Datenbankverwalter auswählbar. + + Im Vergleich zu MySQL oder schlankeren Datenbanksystemen sind + wir hinsichtlich INSERTs/UPDATEs langsamer, weil wir einen + Transaktions-Overhead haben. Selbstverständlich hat MySQL kaum + eine der Eigenschaften, die oben im Kapitel Eigenschaften + erwähnt werden. PostgreSQL ist für Flexibilität und gute + Eigenschaften designed, trotzdem fahren wir fort, die Leistung + durch Profiling und Quellcodeanalyse zu verbessern. + + Zuverlässigkeit + Wir stellen fest, daß ein DBMS zuverlässig sein muß, oder es + ist wertlos. Wir bemühen uns, gut geprüften, beständigen Code + freizugeben, der nur ein Minimum an Programmfehler hat. Jede + Freigabe hat mindestens einen Monat Betatestphase hinter sich, + und unsere Freigabehistorie zeigt, daß wir stabile, solide + Versionen freigeben, die im Produktionsbetrieb genutzt werden + können. Wir glauben, daß wir im Vergleich mit anderer + Datenbanksoftware vorteilhaft dastehen. + + Support + Unsere Mailingliste stellt eine große Gruppe Entwickler und + Benutzer zur Behebung aller möglichen anzutreffenden Probleme + zur Verfügung. Wir können nicht immer eine Fehlerbehebung + garantieren, kommerzielle DBMS's tun dies aber auch nicht. + Direkter Zugriff zu den Entwicklern, zur Benutzergemeinschaft, + zu den Handbüchern und zum Quellcode bietet häufig + höherwertigen PostgreSQL-Support im Vergleich zu anderen + DBMS's. Es gibt den kommerziellen "Pro-Ereignis"-Support, der + für diejenigen bereitgestellt wird, die ihn benötigen. (siehe + Support-Faq), + + Preis + PostgrSQL ist frei verfügbar, sowohl für die kommerzielle, wie + für die nicht-kommerzielle Nutzung. Du kannst Deinen Code fast + ohne Beschränkungen zu unserem hinzufügen. Die einzigen + Beschränkungen werden in der BSD-artigen Lizenz weiter oben + aufgeführt. + _________________________________________________________________ + + Fragen zu Benutzerprogrammen + + 2.1) Gibt es ODBC-Treiber für PostgreSQL? + + Es sind zwei ODBC-Treiber verfügbar: PostODBC und OpenLink ODBC. + + PostODBC ist in der Distribution enthalten. Mehr Informationen können + unter http://www.insightdist.com/psqlodbc abgerufen werden. + + OpenLink ODBC kann unter http://www.openlinksw.com geholt werden. Die + Software arbeitet mit OpenLinks Standard-ODBC-Client, so daß + PostgreSQL-ODBC auf jeder Client-Plattform zur Verfügung steht, die + unterstützt wird (Win, Mac, Unix, VMS). + + Sie werden dieses Produkt wahrscheinlich an Leute verkaufen, die + kommerziellen Qualitäts-Support brauchen, aber es wird immer eine + Freeware-Version verfügbar sein. Fragen dazu bitte an + postgres95@openlink.co.uk. + + 2.2) Welche Werkzeuge gibt es, um PostgreSQL-Datenbanken über Webseiten + verfügbar zu machen? + + Eine nette Einführung zu Datenbank-gestützten Webseiten kann unter + http://www.webtools.com abgerufen werden. + + Eine weitere gibt es bei http://www.phone.net/home/mwm/hotlist/. + + Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP + gibt es bei http://www.php.net + + PHP ist hervorragend für einfache Anbindungen geeignet. Für komplexere + Aufgaben nutzen viele die Perl-Schnittstelle mit CGI.pm. + + Einen WWW-Gateway, basierend auf WDB, kann man bei + http://www.eol.ists.ca/~dunlop/wdb-p95 herunterladen. + + 2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle? Einen + Report-Generator? Eine eingebaute Query-Schnittstelle? + + Wir haben eine nette grafische Benutzerschnittstelle mit Namen + pgaccess, welche in der Distribution enthalten ist. pgaccess hat auch + einen Reportgenerator. Die Webpage liegt hier: + http://www.flex.ro/pgaccess + + In der Distribution gibt es außerdem ecpg,, welches eine eingebundene + SQL-Query-Schnittstelle für C zur Verfügung stellt. + + 2.4) Welche Sprachen sind für die Kommunikation mit PostgreSQL verfügbar? + + Wir haben: + * C(libpq) + * C++(libpq++) + * Embedded C(ecpg) + * Java(jdbc) + * Perl(perl5) + * ODBC(odbc) + * Python(PyGreSQL) + * TCL(libpgtcl) + * ein rohes C/4GL(contrib/pginterface) + * Embedded HTML(PHP from http://www.php.net) + _________________________________________________________________ + + Administrative Fragen + + 3.1) Warum schlägt initdb fehl? + + * überprüfe, daß keine Binaries vorheriger Versionen in Deinem Pfad + (PATH-Variable) sind. (Wenn Du die Meldung siehst: + WARN:heap_modifytuple: repl is \ 9, ist das das Problem.) + * überprüfe, daß der Pfad richtig gesetzt ist + * überprüfe, ob der User postgres der Eigentümer der entsprechenden + Dateien ist + + 3.2) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql? + + Der einfachste Weg ist mittels der --prefix Option beim configure den + Pfad anzugeben. Falls Du das vergessen haben solltest, kannst Du die + Datei Makefile.global ändern und POSTGRESDIR entsprechend anpassen, + oder Du erzeugst ein Makefile.custom und definierst POSTGRESDIR dort. + + 3.3) Wenn ich den postmaster starte, bekomme ich einen Bad System Call oder + eine core dumped Meldung. Warum? + + Das kann verschiedene Ursachen haben. Überprüfe zuerst, ob Dein Kernel + System V Extensions enthält. PostgreSQL benötigt die + Kernel-Unterstützung für Shared Memory und Semaphoren. + + 3.4) Wenn ich versuche, den postmaster zu starten, bekomme ich + IpcMemoryCreate Fehlermeldungen. Warum? + + Du hast entweder den Kernel nicht für Shared Memory konfiguriert, oder + Du mußt den Shared Memory Bereich vergrößern. Die genaue Größe hängt + von Deiner Systemarchitektur ab und mit wievielen Puffern und + Serverprozessen Du postmaster konfiguriert hast. Für die meisten + Systeme, mit Standardangaben für Puffer und Prozessen benötigst Du ein + Minimum von ca. 1 MB. + + 3.5) Wenn ich versuche, den postmaster zu starten, bekomme ich + IpcSemaphoreCreate Fehlermeldungen. Warum? + + Falls die Fehlermeldung IpcSemaphoreCreate: semget failed (No space + left on device) lautet, dann ist Dein Kernel mit zu wenig Semaphoren + konfiguriert. Postgres benötigt eine Semaphore pro möglichen + Backend-Prozess. Eine Zwischenlösung wäre, postmaster mit einer + geringeren Anzahl an Backend-Prozessen zu starten. Benutze dazu die -N + Option mit einem Wert kleiner als die standardmäßigen 32. Eine + dauerhafte Lösung wäre es, die Kernel-Parameter SEMMNS und SEMMNI zu + erhöhen. + + Falls die Fehlermeldung anders aussieht, hast Du möglicherweise keine + Semaphoren-Unterstützung in Deinem Kernel aktiviert. + + 3.6) Wie verhindere ich, daß andere Hosts auf meine PostgreSQL Datenbanken + zugreifen? + + Die Standardeinstellung ist, daß PostgreSQL Verbindungen von der + lokalen Maschine über Unix-Domain-Sockets erlaubt. Andere Maschinen + werden keine Verbindung aufbauen können, bis der postmaster mit der -i + Option gestartet ist und die Host-basierte Authentizierung in der + Datei $PGDATA/pg_hba.conf entsprechend angepasst ist. Das erlaubt + TCP/IP-Verbindungen. + + 3.7) Warum kann ich mich nicht von einer anderen Maschine mit meiner + Datenbank verbinden? + + Die Standardeinstellung erlaubt nur Unix-Domain-Socket-Verbindungen + der lokalen Maschine. Um TCP/IP Verbindungen zu ermöglichen, stelle + sicher, daß der postmaster mit der -i Option gestartet wurde, und füge + einen passenden Host-Eintrag in die Datei pgsql/data/pg_hba.conf ein. + Siehe auch die pg_hba.conf Man-Page. + + 3.8) Warum kann ich nicht als root auf die Datenbank zugreifen? + + Du solltest keine Datenbank-Benutzer mit der User-ID 0 (root) + erzeugen. Sie werden auf keine Datenbank zugreifen können. Das ist + eine Sicherheitsmaßnahme, wegen der Möglichkeit Objekt-Module + dynamisch in die Datenbank zu linken. + + 3.9) Alle meine Server stürzen bei gleichzeitigem Tabellenzugriff ab. + Warum? + + Dieses Problem kann durch einen Kernel verursacht werden, der ohne + Support für Semaphoren konfiguriert wurde. + + 3.10) Wie optimiere ich die Datenbankmaschine für bessere Leistung? + + Sicherlich können Indizes Abfragen beschleunigen. Der explain Befehl + erlaubt Dir zu sehen, wie PostgreSQL Deine Abfrage interpretiert und + welche Indizes benutzt werden. + + Wenn Du eine Menge INSERTs machst, überprüfe, ob Du sie als + Stapelverarbeitung mit dem copy-Befehl abarbeiten kannst. Das ist viel + schneller als einzelne INSERTs. Zweitens, SQL-Statements, die nicht in + einem begin work/commit Transaktions-Block eingegeben werden, werden + als eigene Transaktion behandelt. Überprüfe, ob die Statements nicht + in einen einzelnen Transaktions-Block zusammengefasst werden können. + Das reduziert den Transaktions-Overhead. Du kannst auch erwägen, + Indizes zu löschen und neu zu erstellen, wenn Du große Datenmengen + änderst. + + Es gibt verschiedene Tuning-Maßnahmen, die man ergreifen kann. Du + kannst fsync() abschalten, indem Du beim Starten des postmasters die + Optionen -o -F angibst. Das hindert fsync()´s daran, nach jeder + Transaktion die Daten auf die Platte zu schreiben. Du kannst auch mit + der -B Option des postmasters die Anzahl der Shared Memory Puffer für + den Backend-Prozess erhöhen. Falls Du diesen Wert zu hoch einstellst, + kann es sein, daß der postmaster nicht startet, weil der Shared Memory + Speicherplatz Deines Kernels aufgebraucht wird. Jeder Puffer ist 8 kB + groß und es gibt standardmäßig 64 Puffer. + + Du kannst ebenfalls die -S Option des Backends nutzen, um die Größe + des Speicherplatzes für temporäres Sortieren zu erhöhen. Der -S Wert + wird in Kilobyte gemessen und ist standardmäßig auf 512 kB festgelegt. + Es wäre jedoch unklug, den Wert zu hoch anzugeben, da ein Query + möglicherweise Speicherplatzmangel verursacht, wenn es viele + gleichzeitige Sortierungen durchführen muß. + + Der cluster Befehl kann benutzt werden, um Daten in Basistabellen zu + gruppieren, so daß sie auf einen Index zusammengebracht werden. Siehe + auch die cluster(l) Man-Page für weitere Details. + + 3.11) Welche Debugging/Fehlersuch-Hilfsmittel sind für PostgreSQL + verfügbar? + + PostgreSQL hat einige Möglichkeiten, Statusinformationen zu berichten, + die nützlich für die Fehlersuche sein können. + + Erstens, wenn beim configure-Lauf die Option --enable-cassert + angegeben wurde, verfolgen viele assert()´s den Fortschritt des + Backends und halten das Programm an, wenn etwas Unerwartetes passiert. + + Postmaster und postgres, haben mehrere Fehlersuch-Optionen zur + Verfügung. Stelle zuerst sicher, daß Du den Standard-Output und + Fehlerkanal in eine Datei umleitest, wenn Du den postmaster startest, + : + + cd /usr/local/pgsql + ./bin/postmaster >server.log 2>&1 & + + Das erzeugt eine server.log Datei im PostgreSQL-Verzeichnis. Diese + Datei enthält nützliche Informationen über Probleme oder Fehler, die + im Server aufgetreten sind. Postmaster hat eine -d Option, die noch + detailliertere Informationen liefert. Zur -d Option wird eine Nummer + angegeben, die den Debug-Level - also die Menge der berichteten + Information - angibt. Achtung, hohe Debug-Level erzeugen schnell große + Logdateien! + + Du kannst tatsächlich das Postgres-Backend auf der Kommandozeile + laufen lassen und SQL-Statements direkt eingeben. Diese Vorgehensweise + wird aber nur zur Fehlersuche empfohlen. Beachte, daß ein + Zeilenumbruch das SQL-Statement beendet, nicht das Semikolon. Wenn Du + PostgreSQL mit Debugging-Symbolen kompiliert hast, kannst Du einen + Debugger benutzen, um zu beobachten, was passiert. Da das Backend + nicht vom postmaster gestartet wurde, läuft es nicht in der gleichen + Umgebung und deshalb können einige locking/backend Operationen nicht + reproduziert werden. Einige Betriebssysteme können sich an einen + Backend-Prozess direkt anhängen, um Probleme zu diagnostizieren. + + Das Programm postgres hat -s, -A und -t Optionen, die bei der + Fehlersuche und Leistungsmessung sehr nützlich sein können. Du kannst + das Paket auch mit Profiling kompilieren, um zu sehen, welche + Funktionen wieviel Ausführungszeit beanspruchen. Das Backend Profil + wird im Verzeichnis pgsql/data/base/dbname abgelegt. Das Client Profil + wird in das aktuelle Verzeichnis abgelegt. + + 3.12) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine + Verbindung versuche. Warum? + + Du mußt die Grenze des postmasters, die festlegt, wieviele + gleichzeitige Backend-Prozesse gestartet werden können, hochsetzen. + + In Postgres 6.5 sind das normalerweise 32 Prozesse. Du kannst diesen + Wert dadurch erhöhen, daß Du den postmaster mit einem entsprechenden + -N Wert neu startest. In der Standardkonfiguration kannst Du -N auf + maximal 1024 setzen. Falls Du mehr brauchst, erhöhe MAXBACKENDS in + include/config.h und kompiliere das Paket neu. Du kannst den + Standardwert von -N während der Konfiguration setzen, indem Du + --with-maxbackends angibst. Anmerkung: Falls Du -N größer als 32 + einstellst, solltest Du -B auf einen Wert, höher als 64 setzen. Für + eine hohe Anzahl an Backend-Prozessen, solltest Du möglicherweise + einige Unix-Kernel Parameter ebenfalls erhöhen. Folgendes Parameter + solltest Du prüfen: die Maximalgröße der Shared Memory Blocks SHMMAX, + die Maximalanzahl der Semaphoren SEMMNS und SEMMNI, die maximale + Anzahl von Prozessen NPROC, die maximale Anzahl von Prozessen pro User + MAXUPRC, und die Maximalzahl der geöffneten Dateien NFILE und NINODE. + Der Grund für die Begrenzung der erlaubten Backend-Prozesse liegt + darin, daß verhindert werden soll, daß das System seine freien + Ressourcen aufbraucht. + + In den Postgres-Versionen vor 6.5 war die maximale Anzahl von Backends + auf 64 festgelegt und eine Änderung setzte eine erneute Kompilierung + voraus, bei der die Konstante MaxBackendId in + include/storage/sinvaladt.h. entsprechend angepasst wurde. + + 3.13) Was sind die pg_psort.XXX Dateien in meinem Datenbank-Verzeichnis? + + Dies sind temporäre Dateien, die durch den Query-Ausführer erzeugt + werden. Wenn zum Beispiel eine Sortierung durchgeführt werden muß, um + ein ORDER BY auszuführen, und diese Sortierung mehr Platz benötigt, + als mit dem Backend-Parameter -S erlaubt wurde, dann werden diese + temporären Dateien erzeugt, um die Daten dort zu halten. + + Die temporären Dateien sollten automatisch gelöscht werden, falls das + Backend jedoch während einer Sortierung abstürzt, bleiben sie + erhalten. Wenn zu diesem Zeitpunkt keine Transaktion läuft, kannst Du + die pg_tempNNN.NN Dateien ohne Gefahr löschen. + + 3.14) Wie richte ich eine Benutzergruppe (pg_group) ein? + + Zur Zeit gibt es keine einfache Schnittstelle, um Benutzergruppen + einzurichten Du mußt explizit die pg_group-Tabelle mittels + INSERT/UPDATE modifizieren. Zum Beispiel: + + jolly=> INSERT into pg_group (groname, grosysid, grolist) + jolly=> values ('posthackers', '1234', '{5443, 8261}'); + INSERT 548224 + jolly=> grant INSERT on foo to group posthackers; + CHANGE + jolly=> + + Die Felder in pg_group sind: + * groname: der Gruppenname. Dieser Name sollte rein alphanumerisch + sein. Keine Unterstriche oder andere Punktionen + * grosysid: die Gruppen-ID. Die Gruppen-ID ist ein int4-Feld. Sie + sollte eindeutig für jede Gruppe sein. + * grolist: die Liste der pg_user IDs, die zu dieser Gruppe gehören. + (int4[].) + _________________________________________________________________ + + Fragen zum Betrieb + + 4.1) Das System scheint Kommata, Dezimalpunkte und Datumsformate + durcheinanderzubringen. + + Überprüfe die Konfiguration Deiner Locale-Einstellung. PostgreSQL + benutzt die Einstellungen des jeweiligen Users und nicht die des + postmaster Prozesses. Es gibt postgres und psql SET Befehle, um das + Datumsformat zu kontrollieren. Setzte diese entsprechend Deiner + Arbeitsumgebung. + + 4.2) Was ist der genauer Unterschied zwischen Binary Cursors und Normal + Cursors? + + Vgl. die declare Man-Page für eine Beschreibung. + + 4.3) Wie wähle ich per SELECT nur die ersten paar Zeilen in einem Query + aus? + + Vgl. die fetch Man-Page, oder benutze SELECT ... LIMIT.... + + Das verhindert nur, daß alle Ergebniszeilen zum Client übermittelt + werden. Die komplette Abfrage muß abgearbeitet werden, selbst wenn Du + nur die ersten paar Zeilen haben möchtest. Ziehe ein Query in + Erwägung, das ein ORDER BY benutzt. Es gibt keine Möglichkeit Zeilen + zurückzuliefern, bevor nicht die komplette Abfrage abgearbeitet ist. + + 4.4) Wie bekomme ich eine Liste der Tabellen oder anderen Dingen, die ich + in psql sehen kann + + Du kannst Dir die Datei pgsql/src/bin/psql/psql.c mit dem Quellcode + für psql ansehen. Sie enthält die SQL-Befehle, die die + Backslash-Kommandos (\) ausführen. Seit Postgres 6.5 kannst Du psql + auch mit der -E Option starten. Dadurch gibt psql die Queries aus, die + es bei der Ausführung der Befehle benutzt. + + 4.5) Wie entferne ich eine Spalte von einer Tabelle? + + Wir unterstützen alter table drop column nicht, aber mache es so: + + SELECT ... -- wähle alle Spalten außer die, die Du entfernen willst + INTO TABLE new_table + FROM old_table; + DROP TABLE old_table; + ALTER TABLE new_table RENAME TO old_table; + + 4.6) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank? + + Zeilen sind auf 8 kB begrenzt, aber das kann geändert werden, indem Du + in include/config.h die Konstante BLCKSZ änderst. Um Attribute mit + mehr als 8 kB zu nutzen, kannst Du auch das "Large Object Interface" + benutzen. + + Zeilen überschreiten keine 8 kB-Grenzen. Eine Zeile mit 5 kB wird 8 kB + Speicherplatz benötigen. + + Tabellen- und Datenbankgrößen haben keine Grenzen. Es gibt viele + Datenbanken mit zig Gigabytes und wahrscheinlich einige mit hunderten + Gigabyte. + + 4.7) Wieviel Plattenplatz benötigt eine Datenbank zur Speicherung einer + Datendatei mit zeilenweisen Datensätzen? + + Eine Postgres Datenbank kann ungefähr sechseinhalb mal soviel Platz + brauchen, wie eine einfache Textdatei. + + Betrachten wir eine Datei mit 300.000 Zeilen, mit jeweil zwei Integern + pro Zeile. Die einfache Textdatei benötigt 2,4 MB Speicherplatz. Die + Größe der Postgres Datenbankdatei, die diese Daten enthält, liegt + ungefähr bei 14 MB. + 36 Bytes: jeder Zeilenkopf (ungefähr) + + 8 Bytes: zwei Integer-Felder @ jedes 4 Bytes + + 4 Bytes: Zeiger auf den Datensatz + ----------------------------------------------- + 48 Bytes pro Zeile + + Die Größe einer Datenseite in PostgreSQL ist 8192 Bytes (8 KB), also: + + 8192 Bytes pro Seite + --------------------- = 171 Zeilen pro Seite (aufgerundet) + 48 Bytes pro Zeile + + 300000 Datenzeilen + ----------------------- = 1755 Datenbankseiten + 171 Zeilen pro Seite + +1755 Datenbankseiten * 8192 Bytes pro Seite = 14,376,960 Bytes (14MB) + + Indizes haben nicht einen solchen Overhead, sie beinhalten jedoch die + Daten, die sie indizieren und können so auch sehr groß werden. + + 4.8) Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank + definiert sind? + + psql hat eine Vielzahl von Backslash Befehlen, um solche Informationen + zu zeigen. Benutze \?, um sie zu sehen. + + Schaue Dir auch die Datei pgsql/src/tutorial/syscat.source. an. Sie + illustriert viele der SELECTs, die benötigt werden, um diese + Informationen von der Datenbank-Systemtabelle zu erhalten + + 4.9) Meine Queries sind langsam oder nutzen die Indizes nicht. Warum? + + PostgeSQL pflegt automatische Statistiken nicht. Um die Statistiken zu + aktualisieren, mußt Du ein explizites vacuum eingeben. Nach dieser + Aktualisierung weiß der Optimierer wieviele Zeilen in der Tabelle sind + und kann besser entscheiden, ob Indizes benutzt werden sollten. Der + Optimierer benutzt keine Indizes, wenn die Tabelle klein ist, weil ein + sequentieller Suchlauf dann schneller sein würde. + + Benutze den Befehl vacuum analyze für die spaltenspezifische + Optimierung. Vacuum analyze ist für komplexe Multi-Join-Abfragen + wichtig, damit der Optimierer die Anzahl der Zeilen von jeder Tabelle + schätzen und dann die passende Join-Reihenfolge wählen kann. Das + Backend verfolgt die Spaltenstatistik nicht selbst, so daß vacuum + analyze regelmäßig aufgerufen werden sollte. + + Indizes werden nicht für ORDER BY Operationen benutzt. + + Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können + Indizes nur benutzt werden, wenn die Suche mit dem Anfang eines + Strings startet. Um also Indizes zu nutzen, sollten LIKE-Suchen nicht + mit %, und ~ beginnen (Die Sucheparameter regulärer Ausdrücke sollten + mit ^. beginnen. + + 4.10) Auf welche Weise kann ich sehen, wie der Query-Optimierer meine + Abfrage auswertet? + + Vgl. die EXPLAIN Man-Page. + + 4.11) Was ist ein R-Tree Index? + + Ein R-Tree Index wird benutzt, um räumliche Daten zu indizieren. Ein + Hash-Index kann nicht für Bereichssuchen genutzt werden. Ein B-Tree + Index kann nur für Bereichssuchen in eindimensionalen Daten genutzt + werden. R-Trees können multi-dimensionale Daten abhandeln. Ein + Beispiel: Wenn ein R-Tree Index auf ein Attribut vom Typ POINT + gebildet wird, dann kann das System Abfragen wie z.B. "Zeige alle + Punkte, die sich in einem umgebenden Rechteck befinden" effizienter + beantworten. + + Die kanonische Veröffentlichung , die das originale R-Tree Design + beschreibt ist: + + Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial + Searching." Proc of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, + 45-57. + + Du kannst dieses Werk ebenfalls in Stonebraker's "Readings in Database + Systems" finden. + + Die eingebauten R-Trees können Polygone und Rechtecke verarbeiten. + Theoretisch können R-Trees auf eine hohe Anzahl von Dimensionen + erweitert werden. Praktisch bedingt diese Erweiterung eine Menge + Arbeit und wir haben derzeit keinerlei Dokumentation darüber, wie das + zu machen wäre. + + 4.12) Was ist "Genetic Query Optimization"? + + Das GEQO-Modul in PostgreSQL soll dazu dienen, das Optimierungsproblem + beim Joining vieler Tabellen auf der Basis genetischer Algorithmen + (GA) zu lösen. Es erlaubt die Behandlung von großen Join-Queries ohne + erschöpfende Suche. + + Für weitere Informationen siehe die Dokumentation. + + 4.13) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer + Suche mit Ignorierung der Groß- und Kleinschreibweisen? + + ~ und ~* sind wahrscheinlich das, was Du willst. Vgl. psql's \do + Befehl. + + 4.14) Wie ermittle ich in einem Query, daß ein Feld NULL ist? + + Du testest die Spalte mit IS NULL und IS NOT NULL. + + 4.15) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen? + +Typ interner Name Bemerkungen +-------------------------------------------------- +CHAR char 1 Zeichen +CHAR(#) bpchar mit Leerzeichen gefüllt bis zur angegebenen Län +ge +VARCHAR(#) varchar Die Größe legt die Maximallänge fest, kein Ausf +üllen mit Leerzeichen +TEXT text Die Länge wird nur durch die maximale Zeilenlän +ge beschränkt +BYTEA bytea Bytearray mit variabler Länge + + Du mußt die internen Namen benutzen, wenn Du interne Operationen + durchführen willst. + + Die letzten vier Typen sind "varlena"-Typen (d.h. die ersten vier + Bytes geben die Länge an, gefolgt von den Daten). CHAR(#) belegt die + maximale Anzahl von Bytes, unabhängig davon, wieviele Daten im Feld + gespeichert werden. TEXT, VARCHAR(#) und BYTEA haben alle eine + variable Länge auf dem Datenträger, deshalb gibt es einen leichten + Geschwindigkeitsnachteil bei der Nutzung dieser Typen. Genauer, der + Nachteil gilt für den Zugriff auf alle Spalten nach der ersten Spalte + dieses Typs. + + 4.16) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des + Inhalts? + + PostgreSQL unterstützt einen SERIAL Datentyp. Er erzeugt automatisch + eine Sequenz und einen Index auf die Spalte. Siehe die create_sequence + Man-Page für weitere Informationen über Sequenzen. Du kannst aber auch + das Oid Feld jeder Zeile als eindeutigen Wert nutzen. Jedoch mußt Du, + falls Du Deine Datenbank einmal komplett ausgeben und wieder einlesen + willst, die pg_dump's -o oder die copy with oids Option benutzen, um + die Oids zu retten. + + 4.17) Was ist ein Oid? Was ist ein Tid? + + Oids sind PostgreSQLs Antwort auf eindeutige Zeilen-IDs. Jede Zeile, + die in PostgreSQL erzeugt wird, bekommt eine eindeutige Oid. Alle + Oids, die während initdb erzeugt werden, sind kleiner als 16384 (nach + backend/access/transam.h). Alle Oids, die durch den Benutzer erzeugt + werden, sind gleich oder größer als dieser Wert. Standardmäßig sind + all diese Oids nicht nur innerhalb einer Tabelle oder Datenbank, + sondern in der gesamten PostgreSQL Installation eindeutig. + + PostgreSQL benutzt Oids in seinen internen Systemtabellen, um Zeilen + zwischen den Tabellen zu verbinden. Diese Oids können zur + Identifikation spezifischer Benutzerzeilen und in Joins genutzt + werden. Es wird empfohlen, den Spaltentyp OID zu nutzen, um Oids-Werte + zu speichern. Siehe die sql(l) Man-Page, um die anderen internen + Spalten kennenzulernen. Du kannst einen Index auf ein Oid-Feld + erzeugen, um schnelleren Zugriff zu erreichen. + + Oids werden allen neuen Zeilen von einem zentralen Bereich, der von + allen Datenbanken genutzt wird, zugewiesen. Es gibt keinen Grund, + warum Du nicht die Oid ändern, oder eine Kopie der Tabelle mit den + originalen Oids anlegen könntest. + CREATE TABLE new_table(old_oid oid, mycol int); + SELECT INTO new SELECT old_oid, mycol FROM old; + COPY new TO '/tmp/pgtable'; + DELETE FROM new; + COPY new WITH OIDS FROM '/tmp/pgtable'; + + Tids werden genutzt, um spezifische physische Zeilen mit Block und + Versatzwert zu identifizieren. Tids ändern sich, wenn Zeilen geändert + oder neu geladen werden. Sie werden von Index-Einträgen genutzt, um + die Zeilen physisch zu adressieren. + + 4.18) Was ist die Bedeutung der verschiedenen Ausdrücke, die in PostgreSQL + benutzt werden (z.B. attribute, class,...)? + + Einige der Quelltexte und die ältere Dokumentation nutzen allgemeine + Begriffe. Hier sind einige aufgeführt: + * row, record, tuple + * attribute, field, column + * table, class + * retrieve, SELECT + * replace, UPDATE + * append, INSERT + * oid, serial value + * portal, cursor + * range variable, table name, table alias + + 4.19) Wieso bekomme ich einen Fehler: "FATAL: palloc failure: memory + exhausted?" + + Möglicherweise ist der virtuelle Speicher verbraucht oder Dein Kernel + hat eine niedrige Grenze für bestimmte Ressourcen. Versuche dieses, + bevor Du den postmaster startest: + + ulimit -d 65536 + limit datasize 64m + + Je nach Deiner eingesetzten Shell mag nur einer dieser Befehle + funktionieren. Aber es wird die Grenze des Datensegments für Prozesse + erhöhen und vielleicht läuft so Dein Query durch. Dieser Befehl wirkt + sich auf den aktuellen Prozess und alle seine Unterprozesse aus, die + nach diesem Befehl gestartet werden. Falls Du ein Problem mit dem + SQL-CLient hast, weil das Backend zu viele Daten zurückliefert, + versuche diesen Befehl, bevor Du den SQL-Client startest. + + 4.20) Wie kann ich feststellen, welche PostgreSQL-Version ich laufen habe? + + Gib in psql SELECT version(); ein + + 4.21) Beim Arbeiten mit "large-object" kommt die Fehlermeldung: invalid + large obj descriptor. Warum? + + Du solltest die Befehle BEGIN WORK und COMMIT bei jeden Gebrauch von + Large Objects benutzen. Also um lo_open ... lo_close. + + Die Dokumentation hat schon immer darauf hingewiesen, daß lo_open in + eine Transaktion eingebunden werden muß, aber die PostgreSQL Versionen + vor 6.5 haben diese Regel nicht erzwungen. Statt dessen scheiterten + sie gelegentlich, wenn Du diese Regel gebrochen hattest. + + Das aktuelle PostgreSQL erzwingt diese Regel, indem es die Handles der + Large Objects beim COMMIT der Transaktion schließt, was sofort nach + dem lo_open passiert, wenn Du nicht innerhalb einer Transaktion bist. + So führt der erste Versuch, etwas mit dem Large Object zu machen zu + einem invalid large obj descriptor. Also wird der Code, der bisher + benutzt wurde, nun diese Fehlermeldung erzeugen, wenn Du keine + Transaktionen benutzt hast. + + Falls Du eine Client-Schnittstelle wie ODBC benutzt, kann es sein, daß + Du auto-commit off setzen mußt. + _________________________________________________________________ + + PostgreSQL erweitern + + 5.1) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich sie in + psql aufrufe, kommt ein core dump. Warum? + + Dieses Problem kann viele Ursachen haben. Teste deine Funktion zuerst + in einem Extra-Testprogramm. Stelle außerdem sicher, daß Deine + Funktion nicht etwa elog-Nachrichten sendet, wenn der Client Daten + erwartet, wie in den type_in() oder type_out() Funktionen + + 5.2) Was bedeutet die Meldung: NOTICE:PortalHeapMemoryFree: 0x402251d0 not + in alloc set!? + + Du pfreest etwas, das Du nicht palloct hast! Stelle sicher, daß Du + nicht malloc/free und palloc/pfree durcheinanderwürfelst. + + 5.3) Wie kann ich ein paar elegante neue Feldtypen und Funktionen zu + PostgreSQL beitragen? + + Sende Deine Erweiterungen zur pgsql-hackers Mailing Liste, und sie + werden eventuell im contrib/ Verzeichnis enden. + + 5.4) Wie schreibe ich eine Funktion in C, die einen Tuple zurückliefert? + + Das erfordert derart extreme Genialität, daß die Autoren es niemals + versucht haben, obwohl es im Prinzip zu machen wäre. + + 5.5) Ich habe eine der Quellendateien geändert. Warum macht sich die + Änderung beim erneuten Compilerlauf nicht bemerkbar? + + Die Makefiles finden nicht die richtigen Abhängigkeiten. Du mußt ein + make clean und dann ein weiteres make machen. diff --git a/doc/FAQ_linux_german b/doc/FAQ_linux_german new file mode 100644 index 0000000000..5f95280d9b --- /dev/null +++ b/doc/FAQ_linux_german @@ -0,0 +1,752 @@ + + Häufig gestellte Fragen (FAQ) zu PostgreSQL >= V6.1, Linux-spezifisch + + Bitte Zusammen mit der normalen FAQ lesen! + _________________________________________________________________ + + Letztes Update des Originals: Tue Aug 10 11:15:00 BST 1999 + Original-FAQ gepflegt durch: Andrew C.R. Martin + (martin@biochem.ucl.ac.uk) + Original Autor: Andrew C.R. Martin (martin@biochem.ucl.ac.uk) + + Letztes Update der Übersetzung: Mo, 23. August 1999, 10:00 CEST + Übersetzer: Karsten Schulz (schulz@linux-systemhaus.de) + _________________________________________________________________ + + Änderungen in dieser Version (* = geändert, + = neu, - = entfernt) + + +3.11) Wieso bekomme ich einen Fehler wie: IpcMemoryCreate: shmget + failed (Permission denied)? + +Diese Datei ist ungefähr wie folgt unterteilt: + + 1.*) PostgreSQL kompilieren + 2.*) Hilfs- und Zusatzprogramme kompilieren + 3.*) Laufzeit Probleme + +Beantwortete Fragen: + + + + PostgreSQL kompilieren + + 1.1) Welche Anpassungen müssen in src/Makefile.global oder + src/Makefile.custom gemacht werden und gibt es weitere notwendige + Änderungen? + 1.2) Warum habe ich Probleme mit der fehlenden Bibliothek libreadline? + 1.3) [REDHAT] Warum habe ich Probleme mit der fehlenden Bibliothek + libdl und der fehlenden dlfcn.h? + 1.4) [SLACKWARE 3.1] Warum habe ich Probleme mit der fehlenden + Bibliothek libdl und der fehlenden dlfcn.h? + 1.5) Die Kompilierung des Backends schlägt mit der Meldung fehl, daß + die Include-Datei dlfcn.h fehlen würde. + 1.6) GCC meldet, daß er die Option -fpic ignorieren würde. + 1.7) Ich bekomme Warnungen, wie: warning: cast from pointer to integer + of different size + 1.8) [SuSE-Linux 4.2-5.3] Wo sind curses und termcap? + 1.9) Warum bekomme ich Probleme mit ld.so? + 1.10) Wieso bekomme ich yy_flush_buffer undefined Fehler? + 1.11) Wie kompiliere ich PostgreSQL auf einem a.out System? + 1.12) Warum scheitert make mit der Meldung: + yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y make: + /usr/bin/make: cannot execute binary file + 1.13) Was sind die Bezüge in der Bibliothek X11_LIB zu libsocket und + libnsl in der Datei src/Makefile.global? + 1.14) [DEBIAN] Wo ist die Bibliothek libtermcap? + 1.15) [REDHAT] Kann ich PostgreSQL als RPM-Archiv bekommen? + 1.16) Während ich versuche eine Entwickler-Version unter Linux zu + kompilieren, bricht der Vorgang mit folgender Fehlermeldung ab: + In file included from /usr/include/sys/sem.h:8, + from ipc.c:37: + /usr/include/asm/bitops.h:32: warning: no previous prototype for + Set_bit' + .... + make: *** [ipc.o] Error 1 + 1.17) Beim Kompilieren von PostgreSQL bricht der gcc mit einer Signal + 11 Meldung ab. + 1.18) Kann ich Version 6.1.1 unter MkLinux installieren? + 1.19) Warum stoppt make oder bricht sonstwie ab? + 1.20) Wie kann ich für die Prozessoren 486 oder Pentium optimieren? + 1.21) Wieso bekomme ich seltsame Ergebnisse beim Drucken von Zeiten + (z.B. beim Regressionstest 'timespan')? + 1.22) Warum bekomme ich keine shared libraries für libpq, wenn ich + Version 6.3.2 kompiliere? + 1.23) Warum scheitert der Kompilierungslauf mit Nachrichten, daß + F_BOOLIN, F_BOOLOUT und F_BYTEAIN nicht deklariert seien? + + + Hilfs- und Zusatzprogramme kompilieren + + 2.1) Der Linker findet die Bibliothek libX11 nicht, wenn pgtclsh + kompiliert werden soll. + + + Laufzeit Probleme + + 3.1) Ich bekomme die Fehlermeldung _fUnKy_POSTPORT_sTuFf_ undefined, + wenn Skripts wie createuser laufen. + 3.2) Nachdem ich postmaster starte, meldet das System Bad system call + (Core dumped) + 3.3) Wenn ich versuche, den Postmaster zu starten, bekomme ich eine + Fehlermeldung wie: + Failed Assertion("!(file != 0):(null)", File: + "/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257) + !(file != 0) (0) + initdb: could not create template database + initdb: cleaning up. + 3.4) Warum funktioniert createuser nicht? + 3.5) Wieso bekomme ich einen Fehler, wie: + IpcMemoryCreate: memKey=155356396 , size=760632 , + permission=384IpcMemoryCreate: shmget(..., create, ...) + failed: Invalid argument + 3.6) Wieso scheitert der Aufruf von psql mit: psql: can't load library + 'libpq.so.1 + 3.7) Andere seltsame Verhaltensweisen + 3.8) Wenn PostgreSQL beim Systemhalt lief, führt Linux beim Neustart + jedesmal einen Filesystemcheck (fsck) durch + 3.9) Warum dauert Query 32 in den RegressionsTests so lange? + 3.10) Warum bekomme ich lustige Rundungsergebnisse in einigen + Datums/Zeit-Berechnungen, wie: + select '4 hours'::timespan; + liefert '3 hours 59 minutes 60 seconds'? + +3.11) Wieso bekomme ich einen Fehler wie: IpcMemoryCreate: shmget + failed (Permission denied)? + + Abschnitt 1: PostgreSQL kompilieren + + 1.1) Welche Anpassungen müssen in src/Makefile.global oder + src/Makefile.custom gemacht werden und gibt es weitere notwendige + Änderungen? + + Änderungen an den Makefiles werden am einfachsten dadurch gemacht, + indem das customize shellscript im src-Verzeichnis aufgerufen wird, + das ein Makefile.custom erzeugt. + + Die einzige andere Änderung, die evtl. zu machen wäre, ist Flex zu + ersetzen, wenn Du die Version 2.5.3 hast. Diese Version hat einen + Fehler, der sich durch das Scheitern des createuser-Programms äußert. + (siehe dazu auch Frage 3.4). + + Falls Du die Makefiles manuell änderst, musst Du die folgende Variable + setzen: +PORTNAME= linux + + Du musst auch die folgende Variable ändern, damit sie auf Deine + Installation passt: +POSTGRESDIR + + Falls Du die USE_TCL-Option aktivierst, musst Du folgende Variablen + setzen: +TCL_INCDIR= +TCL_LIBDIR= +TCL_LIB= +TK_INCDIR= +TK_LIBDIR= +TK_LIB= +X11_INCDIR= +X11_LIBDIR= +X11_LIB= + + Auf meinem Slackware 3.0 System sind das: +TCL_INCDIR= /usr/include/tcl +TCL_LIBDIR= /usr/lib +TCL_LIB= -ltcl +TK_INCDIR= /usr/include/tcl +TK_LIBDIR= /usr/lib +TK_LIB= -ltk +X11_INCDIR= /usr/include/X11 +X11_LIBDIR= /usr/X386/lib +X11_LIB= -lX11 + + Du solltest auch alle weiteren Änderungen durchführen, die in der + Datei INSTALL und in Makefile.global dokumentiert sind. + + 1.2) Warum habe ich Probleme mit der fehlenden Bibliothek libreadline? + + Linux Systeme kommen in der Regel nicht mit einer installierten GNU + readline Bibliothek. Stelle entweder sicher, daß Du die + readline-Optionen in src/Makefile.global oder src/Makefile.custom + nicht aktivierst oder installiere die GNU readline Bibliothek. + Hinweis: Debian Linux (wie FreeBSD) kommt mit einer installierten GNU + readline Bibliothek. + + 1.3) [REDHAT] Warum habe ich Probleme mit der fehlenden Bibliothek libdl + und der fehlenden dlfcn.h? + + Das Problem erscheint dadurch, daß in der letzten Phase des + Kompilierungsvorgangs Funktionen wie dlopen(), dlclose(), etc. nicht + gelinkt werden können. + + Die libdl Bibliothek wird zum dynamischen Linken von + Benutzerfunktionen zur Laufzeit benutzt. Aus irgendwelchen Gründen + wurde diese Bibliothek mit der RedHat-Distribution nicht ausgeliefert. + Anscheinend ist dies in der letzten RedHat 4.0 (Colgate) geändert + worden. + + RedHat hat nun ein neues ld.so RPM-Archiv auf ihrem ftp-Server. Hole + Dir einfach: + + ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/ld.so-1.7.14-4. + i386.rpm + + Installiere das RPM-Archiv wie üblich und gut ist! + + Hinweis: Du mußt configure und make clean nach der Installation der + Bibliothek und vor dem erneuten Kompilieren laufen lassen. + + Es gab einen Bericht über ein zerstörtes System, weil Programme auf + diese Bibliothek während des Updates zugegriffen haben (alles in allem + nicht weiter überraschend). Konsequenterweise ist es eine gute Idee, + das System vor der Installation zu rebooten, um so wenige Programme + wie möglich während des Updates laufen zu haben. In den + Single-User-Mode zu gehen ist wahrscheinlich auch eine gute Idee! + + Wenn Du lieber den harten Weg gehen willst, kannst Du die Bibliothek + und die Header-Dateien von: + + ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.7.14.tar.gz + + holen. Alternativ findest Du vorkompilierte Binaries in + distributions/debian/buzz/binary-i386/base/ld.so-1.7.14-4.deb auf dem + gleichen ftp-Server oder folge den Instruktionen bei Frage 1.2, die + den gleichen Fehler für Slackware 3.1 behandelt. + + Mache es aber nur auf diese Weise, wenn Du weißt, was Du tust! + + 1.4) [SLACKWARE 3.1] Warum habe ich Probleme mit der fehlenden Bibliothek + libdl und der fehlenden dlfcn.h? + + Das Problem erscheint dadurch, daß in der letzten Phase des + Kompilierungsvorgangs Funktionen wie dlopen(), dlclose(), etc. nicht + gelinkt werden können. + + Siehe die Antwort zu Frage 1.3. + + Slackware bis Version 3.0 war mit dieser Bibliothek und der + Include-Datei ausgestattet und ab späten 3.1er-Versionen scheinen sie + auch wieder da zu sein. Aber in frühen 3.1er-Versionen (vor dem + 09.09.96) fehlten sie und es wurden viele CD-ROMs von diesen ersten + 3.1.er-Versionen gepresst. + + Es gab einen Bericht über ein zerstörtes System, weil Programme auf + diese Bibliothek während des Updates zugegriffen haben (alles in allem + nicht weiter überraschend). Konsequenterweise ist es eine gute Idee, + das System vor der Installation zu rebooten, um so wenige Programme + wie möglich während des Updates laufen zu haben. In den + Single-User-Mode zu gehen ist wahrscheinlich auch eine gute Idee! + + Der einfachste Weg, den Fehler zu beseitigen ist, die Datei ldso.tgz + von der a4-Diskette einer aktuelleren Slackware zu nehmen, diese Datei + im Wurzelverzeichnis (/) zu entpacken und dann ein +sh install/doinst.sh + + durchzuführen. Danach ein +ldconfig + + durchführen. + + Hinweis: Du mußt configure und make clean nach der Installation der + Bibliothek und vor dem erneuten Kompilieren laufen lassen. + + Falls Du manuell installieren möchtest, installiere zuerst die Datei + dlfcn.h in /usr/include. Dann die libdl.so.1.7.14 (oder was immer die + letzte Version ist) in /lib. Dann führe folgende Befehle aus: +cd /lib +ln -sf libdl.so.1.7.14 libdl.so.1 +ln -sf libdl.so.1 libdl.so + + Auf manchen Systemen (je nach Deiner gcc-Konfiguration) können noch + folgende Befehle notwendig sein: +cd /usr/lib +ln -sf /lib/libdl.so . + + Und zum Schluß noch ein +ldconfig + + Hinweis: Du mußt configure und make clean nach der Installation der + Bibliothek und vor dem erneuten Kompilieren laufen lassen. + + 1.5) Die Kompilierung des Backends schlägt mit der Meldung fehl, daß die + Include-Datei dlfcn.h fehlen würde. + + Siehe die Antworten zu den Fragen 1.3 und 1.4. Und vergiss nicht, + falls Du ein a.out-System benutzt, daß Du das dld-Paket installiert + haben muß (welches bei den meisten a.out-Systemen nicht dabei ist), um + dlfcn.h zu haben. Siehe Frage 1.11. + + 1.6) GCC meldet, daß er die Option -fpic ignorieren würde. + + Frühere Versionen des gcc nahmen entweder -fpic oder -fPIC an. Es + scheint, daß neuere Versionen (V2.7.2?) -fPIC erfordern. Falls Du ein + ELF-System benutzt, kannst das alles ignoriert werden, da -fPIC als + Standardvorgabe voreingestellt ist. Du kannst diese Angabe + korrigieren, indem Du CFLAGS_SL in der Datei src/Makefile.global + änderst. + + 1.7) Ich bekomme Warnungen, wie: warning: cast from pointer to integer of + different size + + Diese Warnungen wurden in früheren Versionen von Postgres95 gesichtet + und können ignoriert werden. PostgreSQL V6.0 sollte ohne Warnungen + kompiliert werden, außer jenen, die sich auf System-Header-Dateien + beziehen (welche auch ignoriert werden können). + + 1.8) [SuSE-Linux 4.2-5.3] Wo sind curses und termcap? + + SuSE-Linux 4.2 hat ncurses, nicht curses. Version 4.4 scheint beide + Bibliotheken zu haben. Bei SuSE-Linux ist außerdem die + termcap-Bibliothek in /usr/lib/termcap/ und nicht in /usr/lib. + + PostgreSQL (bis Version V6.0) + + Setze den Wert für CURSES_LIB in src/Makefile.custom auf -lncurses + (oder erledige das durch das customize script. Füge folgende Zeile zur + Datei src/Makefile.custom hinzu: +LDADD_BE+= -L/usr/lib/termcap + + Möglicherweise mußt Du in der Datei src/bin/psql/Makefile folgende + Änderung durchführen: +ifeq ($(PORTNAME), linux) + LD_ADD+= + + ändern in: +ifeq ($(PORTNAME), linux) + LD_ADD+= -ltermcap + + PostgreSQL (V6.1) + + Das Konfigurationsscript weiß nicht, daß es auch in /usr/lib/termcap + nach der termcap-Bibliothek schauen soll. Du solltest dieses + Verzeichnis angeben, wenn es nach zusätzlichen Such-Verzeichnissen + fragt. + + Falls das nicht funkitoniert (Ich habe SuSE nicht, um das zu testen), + dann solltest Du nach dem ./configure-Lauf die Datei + src/Makefile.global ändern und in die LDFLAGS-Zeile den Eintrag + -ltermcap (nach -lreadline) hinzufügen. (Alternativ kannst Du auch die + Datei src/Makefile.custom ändern, bevor Du ./configure aufrufst.) + + Einige SuSE-Versionen liefern nur ncurses, deshalb kann es sein, daß + Du die Benutzung von ncurses statt curses erzwingen mußt, indem Du + -lcurses in -lncurses änderst. (bestätigt für SuSE 5.1) + + PostgreSQL (V6.4) + + In PostgreSQL V6.4 überprüft configure sowohl das Vorhandensein von + curses, als auch das von ncurses. In der Zwischenzeit kannst Du den + patch von Karl Eichwalder (ke@suse.de) anwenden: + + http://www.PostgreSQL.ORG/mhonarc/pgsql-patches/msg00407.html + oder (mit deutschen Bemerkungen): + http://www.suse.de/Support/sdb/ke_postgresql-632.html + + Es gab außerdem einen Bericht, daß beim Update von SuSE 5.0 auf SuSE + 5.2 der Link von libtermcap.so.2.0.8 auf libtermcap.so nicht gesetzt + wurde: +cd /usr/lib +ln -s libtermcap.so.2.0.8 libtermcap.so + + 1.9) Warum bekomme ich Probleme mit ld.so? + + Falls Du Probleme mit ld.so bekommst - eine andere Bibliothek, die im + ELF-System für dynamisches Laden benötigt wird - dann hast Du Deine + Systeminstallation oder wahrscheinlicher ein Linux-Update + durcheinandergebracht Siehe die Fragen 1.3/1.4. Möglicherweise mußt Du + ld.so.x.y.z in /lib installieren und ldconfig laufen lassen. Die + aktuellste Version des ld-Packages ist 1.7.14. Zum Zeitpunkt des + Schreibens dieser FAQ ist die Version 1.8 noch experimental. + + 1.10) Wieso bekomme ich yy_flush_buffer undefined Fehler? + + Das ist nicht wirklich Linux-spezifisch, aber es tritt häufiger auf + alten Linux-Systemen auf. Du brauchst eine aktuelle Version von flex + (2.5.2. oder neuer), um PostgreSQL zu kompilieren. Beachte, daß flex + 2.5.3. einen Bug hat, siehe auch Frage 3.4. + + 1.11) Wie kompiliere ich PostgreSQL auf einem a.out System? + + Als erstes mußt Du die dld-Bibliothek installieren. Diese gibt es auf + Sunsite unter Linux/libs/dld.3.2.7.tar.gz + (ftp://sunsite.unc.edu/pub/Linux/libs/dld.3.2.7.tar.gz). + + Dann füge folgende Zeile in src/Makefile.custom hinzu: +LINUX_ELF= + + oder benutze das customize Skript + + 1.12) Warum scheitert make mit der Meldung: + yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y make: /usr/bin/make: + cannot execute binary file + + Das war ein Problem in frühreren Versionen von Postgres95. + Standardmäßig benutzt PostgreSQL bison -y anstatt yacc. + + yacc ist normalerweise als Skript implementiert, das bison -y aufruft. + Aus verschiedenen Gründen ist make nicht in der Lage, das Skript + auszuführen (verschiedene Versionen von make? Verschiedene Versionen + der bash?) + + Um das zu beheben, ändere einfach die Datei + src/mk/port/postgres.mk.linux am Ende. Die Zeile: +# YACC = bison -y + + wird zu: +YACC = bison -y + + 1.13) Was sind die Bezüge in der Bibliothek X11_LIB zu libsocket und libnsl + in der Datei src/Makefile.global? + + Das war ein Problem in Version 1.08 (Sun Solaris spezifisch). Sie sind + behoben in 1.09 und 6.0 + + 1.14) [DEBIAN] Wo ist die Bibliothek libtermcap? + + Debian Linux kommt ohne die termcap-Bibliothek und benutzt ncurses + (welche terminfo benutzt). Es gibt keinen Grund, die + CURSES_LIB-Variable in src/bin/psql/Makefile zu ändern, da Debian + einen Link von libncurses auf libcurses bereitstellt (im Gegensatz zu + SuSE, siehe Frage 1.8) + + Du kannst die Datei src/bin/psql/Makefile wie folgt ändern: +ifeq ($(PORTNAME), linux) + LD_ADD+= -ltermcap + + in +ifeq ($(PORTNAME), linux) + LD_ADD+= + + + 1.15) [REDHAT] Kann ich PostgreSQL als RPM-Archiv bekommen? + + Ja! Michal Mosiewicz (http://www.pdi.lodz.pl/~mimo) hat ein RPM für + PostgreSQL V6.0 auf Intel Architekturen zusammengestellt, welches er + nach ftp://ftp.redhat.org/pub/Incoming/Postgres-6.0-1.i386.rpm + hochgeladen hat. + + Das ist eine vorkompilierte Version, das Quelltext-RPM stammt vom + 03.02.1997. + + 1.16) Während ich versuche eine Entwickler-Version unter Linux zu + kompilieren, bricht der Vorgang mit folgender Fehlermeldung ab: + In file included from /usr/include/sys/sem.h:8, + from ipc.c:37: + /usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit' + .... + make: *** [ipc.o] Error 1 + + Das Problem ist, daß Linux keine Prototypen für diese + Inline-Funktionen bereithält. Die Lösung liegt darin, das Makefile in + .../src/backend/storage/ipc/ zu ändern: Ändere die Zeile: +CFLAGS+=$(INCLUDE_OPT) + + in +CFLAGS+=$(INCLUDE_OPT) -Wno-error + + Mache dasselbe dann im ../src/backend/storage/lmgr Verzeichnis. + + 1.17) Beim Kompilieren von PostgreSQL bricht der gcc mit einer Signal 11 + Meldung ab. + + Oder genauer: gcc: Internal compiler error: program cc1 got fatal + signal 11 + + Das können Hardware/Speicherprobleme sein. PostgreSQL ist ein großes + Programm und große gcc-Kompilierungsläfe (wie eben PostgreSQL oder + eine Kernel-Kompilierung) beanspruchen den Hauptspeicher wie wenig + andere Programme. Dadurch können Fehler auftreten, die in normalen + Situationen nicht erscheinen. Niedrigere Betriebssysteme beanspruchen + die Hardware ebenfalls nicht in diesem Maße, deshalb kann es sein, daß + Du niemals Probleme unter DOS/Windows siehst. + + Mehr Information zu diesem Problem gibt es unter + http://www.BitWizard.nl/sig11/ und in deutsch unter + http://www.suse.de/sdb/de/html/kfr_58.html. + + Laut dieser Sig11-FAQ scheint es ein spezielles Problem mit dem RedHat + 5.0 gcc auf einem Cyrix-Prozessor zu geben. Siehe bitte dort nach den + Details nach. + + 1.18) Kann ich Version 6.1.1 unter MkLinux installieren? + + Tatsuo Ishii hat das unter MkLinux DR2.1 update2 geschafft, nachdem + der kleine Patch von + ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/mklinux.patch.gz + eingespielt wurde. + + 1.19) Warum stoppt make oder bricht sonstwie ab? + + Es gibt eine Reihe von Reports darüber, daß gmake zu früh aussteigt + oder mit einem Segmentation Fault aussteigt. Das letzte Problem wurde + von gmake 3.74 berichtet. Ein Update auf 3.76.1 löste dieses Problem. + Wie auch immer, 3.74 arbeitet bei vielen Leuten zur vollsten + Zufriedenheit. Kurz gesagt, upgrade Deinen gmake auf die aktuellste + Version, bevor Du dieses Problem meldest. + + 1.20) Wie kann ich für die Prozessoren 486 oder Pentium optimieren? + + Die Standard-Compilerflags führen keine Optimierung für den 486er oder + den Pentium-Prozessor durch. Um diese Optimierung zu aktivieren, füge + wahlweise eine der folgenden Zeilen der Datei Makefile.custom hinzu: +CFLAGS+= -m486 + + oder +CFLAGS+= -mpentium + + oder +CFLAGS+= -mpentiumpro + + 1.21) Wieso bekomme ich seltsame Ergebnisse beim Drucken von Zeiten (z.B. + beim Regressionstest 'timespan')? + + Die Zeit erscheint z.B. als: "4 hours 59 mins 60.00 secs" und nicht + als "5 hours" + + Das ist ein Problem mit der glibc2-Bibliothek, die mit RedHat 5.0 + ausgeliefert wird. Update Deine glibc auf die aktuellste + RedHat-Version für v5.0/Hurricane. Alle Versionen vor glibc-2.9.7 + scheinen dieses Problem zu haben. + + 1.22) Warum bekomme ich keine shared libraries für libpq, wenn ich Version + 6.3.2 kompiliere? + + Es gab eine Last-Minute-Änderung der Linux-Konfiguration für Version + 6.3.2. Siehe für einige Fehlerbehebungen und einen Linux-ELF-Patch in + ftp://postgresql.org/pub/patches/ nach. + + 1.23) Warum scheitert der Kompilierungslauf mit Nachrichten, daß F_BOOLIN, + F_BOOLOUT und F_BYTEAIN nicht deklariert seien? + + Die komplette Meldung sieht ungefähr so aus: + -I/usr/include/readline -O2 -Wall -Wmissing-prototypes -I.. + -Wno-error -c bootstrap.c -o bootstrap.o + bootstrap.c:160: `F_BOOLIN' undeclared here (not in a function) + bootstrap.c:160: initializer element for `Procid[0].inproc' is not + constant + bootstrap.c:160: `F_BOOLOUT' undeclared here (not in a function) + bootstrap.c:160: initializer element for `Procid[0].outproc' is not + constant + bootstrap.c:161: `F_BYTEAIN' undeclared here (not in a function) + bootstrap.c:161: initializer element for `Procid[1].inproc' is not + constant + + Solange Du nicht weißt, warum das passiert, ist dieses Problem + ziemlich kniffelig, da diese Konstanten anscheinend nirgendwo + definiert werden. + + Die Lösung ist dafür zu sorgen, daß der cpp in Deinem Pfad erreichbar + ist, bevor make gestartet wird. + + Auf Redhat 5.1, ist cpp in /usr/lib/gcc-lib/i386-redhat-linux/2.7.2.3 + + Abschnitt 2: Hilfs- und Zusatzprogramme kompilieren + + 2.1) Der Linker findet die Bibliothek libX11 nicht, wenn pgtclsh kompiliert + werden soll. + + Füge folgende Zeile in src/Makefile.custom hinzu: +X11_LIBDIR = /usr/X11R6/lib + + Abschnitt 3: Laufzeit Probleme + + 3.1) Ich bekomme die Fehlermeldung _fUnKy_POSTPORT_sTuFf_ undefined, wenn + Skripts wie createuser laufen. + + Das ist ein Fehler in Versionen 1.06-1.07 und ist ab Version 1.08 und + höher behoben. + + 3.2) Nachdem ich postmaster starte, meldet das System Bad system call (Core + dumped) + + Diese Fehlermeldung deutet an, daß Du keinen Shared-Memory-Support in + den Kernel einkompiliert hast. Der Kernel muß mit dieser Option neu + kompiliert werden, um diese Eigenschaft hinzuzufügen. + + 3.3) Wenn ich versuche, den Postmaster zu starten, bekomme ich eine + Fehlermeldung wie: + Failed Assertion("!(file != 0):(null)", File: + "/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257) + !(file != 0) (0) + initdb: could not create template database + initdb: cleaning up. + + Deine Berechtigungen für die Datei /dev/null sind falsch gesetzt. ein + ls -l /dev/null sollte folgende Ausgabe zeigen: +crw-rw-rw- 1 root wheel 2, 2 Oct 8 18:41 /dev/null + + Korrigiere die Berechtigungen mit: +chmod a+rw /dev/null + + 3.4) Warum funktioniert createuser nicht? + + Es gibt ein Problem mit Version 2.5.3 des GNU flex und createuser. Die + Möglichkeiten, diesen Fehler zu beheben sind: Entweder auf die + flex-Version 2.5.3 zu gehen, auf Version 2.5.4 zu gehen, oder den + Patch nach doc/README.flex einzuspielen. + + Die Version 2.5.4. gibt es unter + ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz. + + 3.5) Wieso bekomme ich einen Fehler, wie: + IpcMemoryCreate: memKey=155356396 , size=760632 , + permission=384IpcMemoryCreate: shmget(..., create, ...) + failed: Invalid argument + + Du hast keine IPC-Unterstützung in Deinen Linux-Kernel einkompiliert. + Der Kernel muß mit dieser Option neu kompiliert werden, um diese + Eigenschaft hinzuzufügen. + + 3.6) Wieso scheitert der Aufruf von psql mit: psql: can't load library + 'libpq.so.1 + + Psql wurde mit dynamischen Zugriff auf die libpq-bibliothek + kompiliert. Um dieses Problem zu lösen, solltest Du Dich als root + anmelden und die Datei /etc/ld.so.conf editieren. Füge eine Zeile am + Ende hinzu, die den Namen des PostgreSQL-Bibliotheken-Verzeichnis + enthält (das lib-Verzeichnis im PostgreSQL-Installationsverzeichnis) + und rufe den Befehl /sbin/ldconfig -v auf. Alternativ (und falls Du + keinen root-Zugriff hast) kannst Du die LD_LIBRARY_PATH-Variable + benutzen. Die LD_LIBRARY_PATH-Variable enthält eine durch Doppelpunkt + getrennte Liste mit Suchpfaden für Shared-Bibliotheken. Diese Liste + wird durchsucht, bevor auf die Informationen von ldconfig zugegriffen + wird. Unter der bash sieht das ganze so aus: +export LD_LIBRARY_PATH='PathToPGSQL'/lib + + unter der tcsh so: +setenv LD_LIBRARY_PATH 'PathToPGSQL'/lib + + wobei 'PathToPGSQL' das Installationsverzeichnis von PostgreSQL ist. + Hinweis: der ldd-Befehl dient dazu, sich die dynamischen Bibliotheken + für eine bestimmte ausführbare Datei anzeigen zu lassen. + + 3.7) Andere seltsame Verhaltensweisen + + Ich bin mir nicht sicher, welche Symptome alle auftreten können, außer + daß gar nichts richtig funktioniert, aber es stellte sich heraus, daß + man sorgsam darauf achten sollte, daß die richtige Version der + libpq-Bibliothek geladen wird. Falls Du alte Versionen in Deinem + Bibliothekspfad hast (z.B. in /usr/lib) können diese statt der neueren + Version geladen werden. Schaffe diese alten Versionen beiseite und + siehe im übrigen Frage 3.6 für weitere Details bezüglich dem Laden von + Bibliotheken. + + 3.8) Wenn PostgreSQL beim Systemhalt lief, führt Linux beim Neustart + jedesmal einen Filesystemcheck (fsck) durch + + Es gab darüber einige Berichte und es scheint, daß dies passiert, wenn + PostgreSQL von der /etc/inittab gestartet wird, wie im + INSTALL-Dokument beschrieben. + + Deshalb wird Dir empfohlen, den postmaster von einem rc-Skript aus zu + starten. Unter einem Slackware-artigem System würdest Du + /etc/rc.d/rc.local modifizieren, um den postmaster zu starten. + + Unter RedHat-artigen Systemen würdest Du ein SysV-artiges Skript in + /etc/rc.d/rc3.d basierend auf der /etc/rc.d/init.d Schablonen-Datei + erstellen. + + Es gibt eine Beispieldatei unter dem Verzeichnis + contrib/linux/postgres.init. + + Hier ist noch ein anderes Beispiel von John Robinson welches Du + entsprechend anpassen kannst. +#!/bin/sh +# +# postgreSQL.init This shell script takes care of starting and stopping +# the PostgreSQL postmaster. +# + +# Source function library. +. /etc/rc.d/init.d/functions + +# Source networking configuration. +. /etc/sysconfig/network + +# Check that networking is up. +[ ${NETWORKING} = "no" ] && exit 0 + +# See how we were called. +case "$1" in + start) + # Start daemons. + echo -n "Starting postgres Postmaster daemon:" + if [ -z "`pidofproc postmaster`" ] + then + su postgres -c "/usr/local/pgsql/bin/postmaster -D /home/postgr +eSQL/data -p 5432 &" + echo -n " postmaster" + else + echo -n " (already running)" + fi + echo + touch /var/lock/subsys/postgres + ;; + stop) + # Stop daemons. + echo -n "Shutting down postgres Postmaster daemon: " + killall -TERM postmaster 2>/dev/null + killall -TERM postgres 2>/dev/null + echo + rm -f /var/lock/subsys/postgres + ;; + *) + echo "Usage: postgres {start|stop}" + exit 1 +esac + +exit 0 + + 3.9) Warum dauert Query 32 in den RegressionsTests so lange? + + Das passiert wegen eines Fehlers in den Regressions-Skripten auf + Linux-Kisten. Es gibt - soweit ich weiß - zwei Möglichkeiten, diese + Fehler zu umgehen (die Information stammt von Tatsuo Ishii): + + 1. ändere folgende Zeile in regress.sh: +time postgres -texecutor -tplanner -Q bench < bench.sql + + in +postgres -texecutor -tplanner -Q bench < bench.sql + + 2. nachdem der Test gelaufen ist, entferne eine Zeile ganz am Ende der + Datei bench.out, die ungefähr so aussieht: +85.86user 114.47system 4:49.20elapsed 69%CPU (0avgtext+0avgdata 0maxresident)k + + dann gib folgendes auf der Befehlszeile ein: +sh ./perquery < bench.out > & bench.out.perquery + + 3.10) Warum bekomme ich lustige Rundungsergebnisse in einigen + Datums/Zeit-Berechnungen, wie: + select '4 hours'::timespan; + liefert '3 hours 59 minutes 60 seconds'? + + Du benutzt neue glibc2-Bibliotheken in einer Version kleiner als + 2.0.7. Das ist ein mathematisches Rundungsproblem. Aktualisiere Deine + Bibliothek. + + 3.11) Wieso bekomme ich einen Fehler wie: IpcMemoryCreate: shmget failed + (Permission denied)? + + Im Detail erscheint der Fehler mit dieser Meldung: +In detail, a message like this may appear: +IpcMemoryCreate: shmget failed (Permission denied) +key=5432010, size=120, permission=700 +IpcMemoryAttach: shmat failed (Permission denied) id=0 +FATAL 1: AttachSLockMemory: could not attach segment + + Dieser Fehler wird durch nicht gelöschte Segmente im shared memory + verursacht. (Du kannst sie mit dem Programm ipcs sehen. Benutze das + Programm ipcrm, um sie zu löschen. + _________________________________________________________________ + + Author of the english version + Dr. Andrew C.R. Martin University College London + EMAIL: (Work) martin@biochem.ucl.ac.uk (Home) + andrew@stagleys.demon.co.uk + URL: http://www.biochem.ucl.ac.uk/~martin + Tel: (Work) +44(0)171 419 3890 (Home) +44(0)1372 275775 + + Translator of the german version + Karsten Schulz Linux Systemhaus Schulz + EMAIL: (Work) schulz@Linux-Systemhaus.de (Home) kaschu@t800.ping.de + URL: http://www.Linux-Systemhaus.de/ + Tel: (Work) +49 231 3944432 (Fax) +49 231 3944435 diff --git a/doc/FAQ_linux_italian b/doc/FAQ_linux_italian new file mode 100644 index 0000000000..ed9cc60262 --- /dev/null +++ b/doc/FAQ_linux_italian @@ -0,0 +1,695 @@ + +======================================================= +Frequently Asked Questions (FAQ) per PostgreSQL >= V6.1 +Specifiche per Linux Os +DA LEGGERE IN CONGIUNZIONE CON LE NORMALI FAQ +======================================================= +Ultimo aggiornamento: Lunedi' 18 Maggio 11:17:00 GMT 1998 + +Curatore corrente: Andrew C.R. Martin (martin@biochem.ucl.ac.uk) +Autore originale: Andrew C.R. Martin (martin@biochem.ucl.ac.uk) +Traduzione FAQ in italiano: Daniele Medri 'MaDriD' (madrid@darshan.org) + +Cambiamenti in questa versione (* = modificato, + = nuovo, - = rimosso): + ++1.21) Perche' ricevo strani risultati con i tempi di stampa (per esempio + nel test di regressione 'timespan'? +Questo file è diviso approsimativamente nel sequente modo: +1.*) Istallare PostgreSQL +2.*) Compilare programmi accessori +3.*) Problemi di esecuzione + + +Domande risposte: +1.1) Quali cambiamenti devo fare a src/Makefile.global o a src/Makefile.cust +om + e ci sono altri cambiamenti necessari? +1.2) Perche' ricevo problemi con missing libreadline? +1.3) [REDHAT] Perche' ricevo problemi di libdl e dlfcn.h perse? +1.4) [SLACKWARE 3.1] Perche' ricevo problemi di libdl e dlfcn.h perse? +1.5) La mia compilazione si arresta segnalando la mancanza dell'include file + dlfcn.h perso. +1.6) GCC reclama una ignorata opzione -fpic +1.7) Ricevo messaggi di warning (errore) del tipo + warning: cast from pointer to integer of different size +1.8) [SuSE-Linux 4.2-4.4] Dove sono curses e termcap? +1.9) Perche' ho problemi con ld.so? +1.10) Perche' ricevo errori del tipo `yy_flush_buffer undefined'? +1.11) Come posso compilare PostgreSQL su un sistema a.out? +1.12) Che cosa fallisce con: + yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y + make: /usr/bin/make: cannot execute binary file +1.13) Quali sono i riferimenti in X11_LIB a libsocket e libnsl in + src/Makefile.global? +1.14) [DEBIAN] Dov'e' libtermcap? +1.15) [REDHAT] Posso trovare PostgreSQL come RPM? +1.16) Quando tento di compilare una versione in sviluppo sotto Linux, la + compilazione fallisce con il seguente messaggio: + In file included from /usr/include/sys/sem.h:8, + from ipc.c:37: + /usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bi +t' + .... + make: *** [ipc.o] Error 1 +1.17) Quando sto' compilando postgres, gcc riporta un signal 11 e si interrom +pe. +1.18) Posso installare 6.1.1 su MkLinux? +1.19) Perche' esce o va in crash? +1.20) Come posso ottimizzarlo per un 486 o un processore pentium +1.21) Perche' ricevo strani risultati con i tempi di stampa (per esempio + nel test di regressione 'timespan'? +2.1) Il linker non trova libX11 quando sta' compilando pgtclsh +3.1) Ricevo un messaggio tipo _fUnKy_POSTPORT_sTuFf_ non definito quando + lancio uno script come createuser +3.2) Lancio postmaster e dopo il sistema dice 'Bad system call(Core + dumped)' +3.3) Quando tento di lanciare Postmaster, perche' ricevo un errore del tipo + Failed Assertion("!(file != 0):(null)", File: + "/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257) + !(file != 0) (0) + initdb: could not create template database + initdb: cleaning up. +3.4) Perche' createuser non funziona? +3.5) Perche' ricevo un errore del tipo: + IpcMemoryCreate: memKey=155356396 , size=760632 , + permission=384IpcMemoryCreate: shmget(..., create, ...) + failed: Invalid argument +3.6) Perche' psql fallisce con: + psql: can't load library 'libpq.so.1' +3.7) Altri comportamenti strani +3.8) Quando PostgreSQL e' attivo allo shutdown di sistema, Linux + esegue al reboot un fsck al disco. +3.9) Perche' la Query 32 nel test di regressione pretende molto tempo? +3.10) Perche' ricevo dei risultati arrotondati su date/time aritmetici, + come + select '4 hours'::timespan; + returning '3 hours 59 minutes 60 seconds'? + +---------------------------------------------------------------------- +Sezione 1: Compilare PostgreSQL +---------------------------------------------------------------------- + +1.1) Quali cambiamenti devo fare a src/Makefile.global o a + src/Makefile.custom e ci sono altri cambiamenti necessari? + + I cambiamenti ai makefiles sono piu'facilmente fatti usando + lo script di shell per la personalizzazione che si trova nella + directory src che scrive un file Makefile.custom appropriato. + + I soli altri cambiamenti che tu devi fare e rimpiazzare Flex se tu + hai una versione 2.5.3, la quale ha dei bug che si manifestano al + fallimento di createuser (Vedi domanda 3.4) + + Se tu modifichi i makefiles a mano, tu *devi* settare le seguenti + variabili: + PORTNAME= linux + + Tu devi anche cambiare quello che segue per settare la tua propria + installazione: + POSTGRESDIR + + Se tu cambi sull'opzione USE_TCL, devi settare questo: + TCL_INCDIR= + TCL_LIBDIR= + TCL_LIB= + TK_INCDIR= + TK_LIBDIR= + TK_LIB= + X11_INCDIR= + X11_LIBDIR= + X11_LIB= + + Sul mio sistema Slackware3.0 esse sono: + TCL_INCDIR= /usr/include/tcl + TCL_LIBDIR= /usr/lib + TCL_LIB= -ltcl + TK_INCDIR= /usr/include/tcl + TK_LIBDIR= /usr/lib + TK_LIB= -ltk + X11_INCDIR= /usr/include/X11 + X11_LIBDIR= /usr/X386/lib + X11_LIB= -lX11 + + Devi fare ogni altro cambiamento necessario come documentato nel + file INSTALL e in Makefile.global + + +1.2) Perche' ricevo problemi con missing libreadline? + + I sistemi Linux in genere non vengono distribuiti con la libreria + Gnu readline installata. Si può in ogni caso o disattivare l'opzione + di readline in src/Makefile.global o src/Makefile.custom, oppure + installare la libreria GNU stessa (readline). + + Nota che Linux Debian (come FreeBSD) esce con le readline installate. + +1.3) [REDHAT] Perche' ricevo problemi di libdl e dlfcn.h perse?? + + Questa manifestazione avvisa che non c'e' la capacita' di linkare + funzioni come dlopen(), dlclose(), etc. durante l'ultima fase di compil +azione. + + La libreria libdl e' usata per linkare in maniera dinamica le funzioni + e rendere flessibile l'avvio dell'applicativo. Per alcune ragioni quest +a + non era presente nella distribuzione Red Hat. La versione Redhat 4.0 + (Colgate) a colmato a questa mancanza. + + RedHat ha ora una nuova versione di ld.so in formato RPM nei propri sit +i FTP. + Scaricate: + + ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/ld.so-1.7. +14-4.i386.rpm + + Installa il file RPM nella maniera usuale e andra'! + + ATTENZIONE! Devi rilanciare nuovamente il file configure e fare un + make clean dopo aver installato la libreria e prima di ricompilare. + + C'e' stata una sola notizia di sistema corrotto da programmi che + accedevano a queste librerie mentre venivano aggiornate (nessun altra + sorpresa.) Conseguentemente e' una buona idea quella di fare un reboot + del sistema prima di installare le nuove librerie e avere pochi + processi attivi durante questo upgrade. Lanciare il sistema in + modalita' utente singolo (single-user) e' probabilmente una buona idea! + + Se tu vuoi fare la strada piu' dura, puoi ottenere la libreria e + l'header file da: + + ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.7.14.tar.gz + + Alternativamente puoi trovare i file binari precompilati in + distributions/debian/buzz/binary-i386/base/ld.so-1.7.14-4.deb + nel medesimo sito, o seguire le istruzioni date alla domanda 1.2 per + correggere lo stesso errore con le aggiornate versioni di Slackware 3.1 +. + Non scegliere questo metodo se non sai quello che stai facendo! + + + +1.4) [SLACKWARE 3.1] Perche' ricevo problemi di libdl e dlfcn.h perse?? + + Questa manifestazione avvisa che non c'e' la capacita' di linkare + funzioni come dlopen(), dlclose(), etc. durante l'ultima fase di compil +azione. + Guarda la risposta alla domanda 1.3. Slackware fino alla versione 3.0 + era provvista di questa libreria e degli include file e ritornarono nel +l'ultima + versione 3.1, ma la prima versione della 3.1 (prima del 9 settembre 199 +6) + non aveva queste e molte versioni su CD-ROM erano state stampate + con la prima edizione. + + C'e' stata una sola notizia di sistema corrotto da programmi che + accedevano a queste librerie mentre venivano aggiornate (nessun altra + sorpresa.) Conseguentemente e' una buona idea quella di fare un reboot + del sistema prima di installare le nuove librerie e avere pochi + processi attivi durante questo upgrade. Lanciare il sistema in + modalita' utente singolo (single-user) e' probabilmente una buona idea! + + Per fissare facilmente questo basta ottenere il file ldso.tgz dal quart +o + dischetto della piu' recente distribuzione Slackware e scompattarlo da + dalla directory di root (/) e poi lanciare + + sh install/doinst.sh + + per completare l'installazione. Successivamente lanciare + + ldconfig + + ATTENZIONE! Devi rilanciare nuovamente il file configure e fare un + make clean dopo aver installato la libreria e prima di ricompilare. + + Se vuoi installarla manualmente bisogna installare prima il file + dlfcn.h in /usr/include. + + Secondo, installa il file libdl.so.1.7.14 (o qualsiasi altra versione) + in /lib, e poi fai: + + cd /lib + ln -sf libdl.so.1.7.14 libdl.so.1 + ln -sf libdl.so.1 libdl.so + + Su certi sistemi (a seconda della personale configurazione di GCC) + e' necessario fare: + + cd /usr/lib + ln -sf /lib/libdl.so . + + Finalmente + + ldconfig + + ATTENZIONE! Devi rilanciare nuovamente il file configure e fare un + make clean dopo aver installato la libreria e prima di ricompilare. + + +1.5) La mia compilazione si arresta segnalando la mancanza dell'include file + dlfcn.h perso. + + Guarda la risposta 1.3/1.4. Non dimenticare che se stai usando un siste +ma + a.out devi prima avere installato il pacchetto dld (il quale non viene + fornito con molti sistemi a.out) per avere dlfcn.h e gli altri. + Guarda la domanda 1.11. + + +1.6) GCC reclama una ignorata opzione -fpic + + Le prime versioni di GCC accettavano entrambe -fpic o -£PIC. + Nelle piu' recenti versioni (V2.7.2?) richiede -£PIC. + Se tu stai usando una versione ELF di Linux, questa puo' per sicurezza + essere ignorata perche' -£PIC e' di default. + + Puoi correggere questa editando il file src/Makefile.global e cambiare + CFLAGS_SL + + +1.7) Ricevo messaggi di warning (errore) del tipo + warning: cast from pointer to integer of different size + + Questi appararivano nelle prime versione di Postgres95 e posso per sicu +rezza + essere ignorate. PostgreSQL V6.0 dovrebbe compilare senza warnings + ad eccezione di quelli relativi agli header file di sistema (i quali po +ssono + essere ignorati per sicurezza). + +1.8) [SuSE-Linux 4.2-4.4] Dove sono curses e termcap? + + SuSE-Linux 4.2 ha le ncurses ma non le curses. 4.4 ha entrambe. + SuSE-Linux ha anche le librerie termcap in /usr/lib/termcap + invece di essere in /usr/lib. + + PostgreSQL (fino alla V6.0) + ----------------------- + Setta il valore delle CURSES_LIB in src/Makefile.custom a -lncurses + (o fai questo attraverso lo script di personalizzazione). + Aggiundi la seguente riga al file src/Makefile.custom: + + LDADD_BE+= -L/usr/lib/termcap + + Devi editare il file src/bin/psql/Makefile e cambiare: + ifeq ($(PORTNAME), linux) + LD_ADD+= + con: + ifeq ($(PORTNAME), linux) + LD_ADD+= -ltermcap + + PostgreSQL (V6.1) + ----------------- + Lo script di configurazone non sa' di cercare nella directory + /usr/lib/termcap per le librerie termcap, percio' tu devi specificare + questo come una delle directory delle librerie dove cercare. + + Se non funziona (non ho SuSE per verificare che vada) + allora lancia configure, edita src/Makefile.global e aggiungi + -ltermcap alla linea LDFLAGS + (dopo -lreadline). (Alternativamente poi configurare + src/Makefile.custom prima di lanciare configure.) + + Alcune versioni di SuSE forniscono solo ncurses, percio' tu devi + forzare l'uso delle ncurses piuttosto che le curses cambiando + -lcurses con -lncurses. (dimostrato per SuSE 5.1) + + +1.9) Perche' ho problemi con ld.so? + + Se tu hai problemi con ld.so, un altra libreria richiesta sotto ELF + per il caricamento dinamico, allora hai creato disordine con la tua + installazione o fatto un upgrade di Linux. + + Guarda le risposte alle domande 1.3/1.4. Devi installare ld.so.x.y.z in + /lib e lanciare ldconfig. + + La piu' recente vesione stabile del pacchetto ld eì 1.7.14 + Mentre scrivo, la versione 1.8.x di ld e' sperimentale. + +1.10) Perche' ricevo errori del tipo `yy_flush_buffer undefined'? + + Questo non e' specifico per Linux, ma e' comune nelle vecchie istallazi +one + di Linux. Devi avere una versione recente di Flex (2.5.2 o superiore) + per compilare PostgreSQL. Nota che Flex 2.5.3 ha dei bug: guarda la + domanda 3.4. + +1.11) Come posso compilare PostgreSQL su un sistema a.out? + + Prima, devi installare la libreria dld. Puoi ottenere questa da Sunsite + come: + Linux/libs/dld.3.2.7.tar.gz + (ftp://sunsite.unc.edu/pub/Linux/libs/dld.3.2.7.tar.gz) + + Secondo, aggiungi la seguente linea al file src/Makefile.custom: + LINUX_ELF= + (o usa lo script di configurazione) + +1.12) Che cosa fallisce con: + yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y + make: /usr/bin/make: cannot execute binary file + + Questo e' un problema delle prime versioni di Postgres95. Il default + per PostgreSQL e' di usare bison -y piuttosto che yacc. + + yacc e' generalmente implementato come script che invoca bison -y + Per alcune ragioni (certe versioni di make? certe versioni di bash?) + make non puo' eseguire questo file di script. + + Per correggere questo, edita semplicemente src/mk/port/postgres.mk.linu +x + e alla fine del file cambia: + # YACC = bison -y + con + YACC = bison -y + +1.13) Quali sono i riferimenti in X11_LIB a libsocket e libnsl in + src/Makefile.global? + + Questo era un problema nella versione 1.08 (specifica per Sun Solaris) + E' stata fissata nella 1.09 e 6.0 + +1.14) [DEBIAN] Dov'e' libtermcap? + + Debian Linux viene distribuita senza librerie termcap e usa ncurses + (le quali usano terminfo all'interno). Non c'e' bisogno di cambiare la + variabile CURSES_LIB in src/bin/psql/Makefile peche' Debian provvede + con un link da libncurses a libcurses (diversamente da SuSE-Linux -- + Vedi domanda 1.8). + + Devi editare src/bin/psql/Makefile e commentare i cambiamenti: + ifeq ($(PORTNAME), linux) + LD_ADD+= -ltermcap + con: + ifeq ($(PORTNAME), linux) + LD_ADD+= + + +1.15) [REDHAT] Posso trovare PostgreSQL come RPM? + + Si! Michal Mosiewicz + (http://www.pdi.lodz.pl/~mimo) ha creato un RPM + per PostgreSQL V6.0 per architettura Intel uplodata a + ftp://ftp.redhat.org/pub/Incoming/Postgres-6.0-1.i386.rpm + + Questa e' una precompilata versione, le sorgenti RPM erano come + io ho scritto (3 Febbraio 1997). + +1.16) Quando tento di compilare una versione in sviluppo sotto Linux, la + compilazione fallisce con il seguente messaggio: + In file included from /usr/include/sys/sem.h:8, + from ipc.c:37: + /usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bi +t' + .... + make: *** [ipc.o] Error 1 + + Il problema e' che Linux non prevede prototipi per queste funzioni inli +ne. + La soluzione e' di andare dentro la directory .../src/backend/storage/i +pc + ed editare Makefile. + Cambia la linea + CFLAGS+=$(INCLUDE_OPT) + con + CFLAGS+=$(INCLUDE_OPT) -Wno-error + + Fai lo stesso con la directory ../src/backend/storage/lmgr. + +1.17) Quando sto' compilando postgres, gcc riporta un signal 11 e si interrom +pe. + Piu' specificatamente: + gcc: Internal compiler error: program cc1 got fatal + signal 11 + + Questo e' un problema di hardware/memoria. PostgreSQL e' un grande + programma, e una larga compilazione con gcc (come la compilazione + di PostgreSQL o la compilazione del kernel) stressa la memoria come + molti altri programmi, mostrando errori che non appaiono nelle normali + operazioni. Sistemi operativi inferiori non riescono a stressare l'hard +ware + in questo modo, per questo non vedrai mai questi errori sotto DOS/Windo +ws. + + Maggiori informazioni in merito: + http://www.bitwizard.nl/sig11 + + Da questo Sig11 FAQ, sembra essere un errore specifico con Redhat 5.0 + lanciando su un processore Cyrix. Guarda il link superiore per i dettag +li! + +1.18) Posso installare 6.1.1 su MkLinux? + + Tatsuo Ishii ha fatto questo su MkLinux DR2.1 update2 dopo una piccola + patch disponibile presso: + ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/mklinux.patch.gz + +1.19) Perche' esce o va in crash?? + + Ci sono state diverse segnalazioni di gmake, dove in tutte si usciva + subito e c'era una seg faulting. Il problema piu' marcato e' stato + riportato con gmake 3.74 - upgradandolo alla 3.76.1 si e' risolto. + Comunque, la versione 3.74 e' funzionante per altri tipi di setup. + In breve, prova ad upgradare gmake all'ultima versione che puoi trovare + prima di riportarlo come un problema. + +1.20) Come posso ottimizzarlo per un 486 o un processore pentium + + Le flags di compilazione per default non permettono l'optimizzazione pe +r 486 + o per processori Pentium. Per aggiungerla come ottimizzazione, edita + Makefile.custom e aggiungi: + + CFLAGS+= -m486 + + o (per i nuovi compilatori che molte persone non stanno usando) + + CFLAGS+= -mpentium + o + CFLAGS+= -mpentiumpro + +1.21) Perche' ricevo strani risultati con i tempi di stampa (per esempio + nel test di regressione 'timespan'? + Le ore appaiono come: '4 hours 59 mins 60.00 secs' + invece di '5 hours' + + Questo e' un problema con le librerie glibc2 le quali appaiono con + RedHat 5.0. Aggiorna le tue glibc con le ultime versioni di RedHat per + v5.0/hurricane. Tutto quello che e' anteriore alle glibc-2.0.7 ha + questi problemi. + +---------------------------------------------------------------------- +Sezione 2: Compilare programmi accessori +---------------------------------------------------------------------- + +2.1) Il linker non trova libX11 quando sta' compilando pgtclsh + + Aggiungi la seguente riga al file src/Makefile.custom + X11_LIBDIR = /usr/X11R6/lib + + +---------------------------------------------------------------------- +Sezione 3: Problemi di esecuzione +---------------------------------------------------------------------- + +3.1) Ricevo un messaggio tipo _fUnKy_POSTPORT_sTuFf_ non definito quando + lancio uno script come createuser + + Questo e' un bug nella V.1.06-V1.07 di Postgres ed e' fissata con la ve +rsione + 1.08 o superiore. + +3.2) Lancio postmaster e dopo il sistema dice 'Bad system call(Core + dumped)' + + Questo indica che non hai compilato il supporto per la memoria condivis +a nel + kernel. Devi ricompilare il kernel per aggiungere questa feature. + +3.3) Quando tento di lanciare Postmaster, perche' ricevo un errore del tipo + Failed Assertion("!(file != 0):(null)", File: + "/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257) + !(file != 0) (0) + initdb: could not create template database + initdb: cleaning up. + + I permessi sul file /dev/null sono sbagliati. + + ls -l /dev/null should give you something like: + + crw-rw-rw- 1 root wheel 2, 2 Oct 8 18:41 /dev/null + + Correggi i permessi con: + + chmod a+rw /dev/null + +3.4) Perche' createuser non funziona? + + C'e' un problema con la versione 2.5.3 di GNU Flex e createuser. + Le tue opzioni devono recedere a Flex V2.5.2, aggiornale alla V2.5.4 o + applica una patch alla V2.5.3 la quale e' fornita in doc/README.flex + Puoi ottenere la V.2.5.4 da: + ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz + +3.5) Perche' ricevo un errore del tipo: + IpcMemoryCreate: memKey=155356396 , size=760632 , + permission=384IpcMemoryCreate: shmget(..., create, ...) + failed: Invalid argument + + Non hai compilato il supporto IPC nel kernel di Linux. + Devi ricompilare il kernel con questa opzione. + +3.6) Perche' psql fallisce con: + psql: can't load library 'libpq.so.1' + + Psql e' stata compilata per linkarsi dinamicamente con la libreria libp +q. + + Per risolvere questo, devi accedere come root ed editare il file + /etc/ld.so.conf + Aggiungi una linea singola alla fine, la quale prende il nome della dir +ectory + delle librerie di PostgreSQL (la sottodirectory delle librerie + dell'installazione diPostgreSQL) e lancia + /sbin/ldconfig -v + + Alternativamente, (e se tu non hai accesso come root), devi usare la + variabile di ambiente LD_LIBRARY_PATH. + + La variabile LD_LIBRARY_PATH contiene una lista di paths per ricercare +le librerie + condivise. Questa lista e' ricercata prima delle librerie specificate d +a ldconfig. + + Percio' sotto Bash, devi fare qualcosa del tipo: + export LD_LIBRARY_PATH='PathToPGSQL'/lib + o, usando tcsh + setenv LD_LIBRARY_PATH 'PathToPGSQL'/lib + rimpiazzando 'PathToPGSQL' con l'appropriato path alla tua directory Po +stgreSQL + al top level. + Nota che il comando ldd puo' essere eseguito su un programma linkato di +namicamente + alla lista di paths a tutte le librerie condivise sopra, alle quali gli + eseguibili + dipendono. + + +3.7) Altri comportamenti strani + + Non sono sicuro quali siano i sintomi che non permettono la corretta es +ecuzione, + ma si puo' ipotizzare che le ragioni vadano oltre il regolare funzionam +ento del + loader dinamico nel caricare la corretta versione delle librerie libpq. + + Se hai una versione vecchia dai una occhiata al path delle librerie + (per esempio in /usr/lib) che dovrebbero caricare nelle nuove versioni +che intendi + far girare. Renditi sicuro di prendere queste nel percorso e guarda la +Domanda 3.6 + per i dettagli in merito al caricamento dinamico delle librerie. + +3.8) Quando PostgreSQL e' attivo allo shutdown di sistema, Linux + esegue al reboot un fsck al disco. + + Ci sono state alcune segnalazioni di questo e sembre essere il + risultato di lanciare PostgreSQL dal /etc/inittab come suggerito + nel file INSTALL. + + Si raccomanda percio' di lanciare il postmaster da un rc script. + Sotto una versione di tipo Slackware, devi modificare /etc/rc.d/rc.loca +l + per lanciare il postmaster. Sotto una versione in stile RedHat + devi creare uno script in stile SysV sotto /etc/rc.d/rc3.d basato + sul file /etc/rc.d/init.d. + + C'e' un esempio di file in contrib/linux/postgres.init + + Un altro file di esempio è proposto da John Robinson + il quale puo' essere modificato a seconda delle esigenze: + +#!/bin/sh +# +# postgreSQL.init This shell script takes care of starting and stopping +# the PostgreSQL postmaster. +# + +# Source function library. +. /etc/rc.d/init.d/functions + +# Source networking configuration. +. /etc/sysconfig/network + +# Check that networking is up. +[ ${NETWORKING} = "no" ] && exit 0 + +# See how we were called. +case "$1" in + start) + # Start daemons. + echo -n "Starting postgres Postmaster daemon:" + if [ -z "`pidofproc postmaster`" ] + then + su postgres -c "/usr/local/pgsql/bin/postmaster -D /home/postgr +eSQL/data -p 5432 &" + echo -n " postmaster" + else + echo -n " (already running)" + fi + echo + touch /var/lock/subsys/postgres + ;; + stop) + # Stop daemons. + echo -n "Shutting down postgres Postmaster daemon: " + killall -TERM postmaster 2>/dev/null + killall -TERM postgres 2>/dev/null + echo + rm -f /var/lock/subsys/postgres + ;; + *) + echo "Usage: postgres {start|stop}" + exit 1 +esac + +exit 0 + + + +3.9) Perche' la Query 32 nel test di regressione pretende molto tempo? + + Questo e' un bug nello script di regressione presente su Linux Os. + Ci sono due raggiri per evitarli (informazione di Tatsuo Ishii ): + + 1. cambia quello che segue in regress.sh: + time postgres -texecutor -tplanner -Q bench < bench.sql + a: + postgres -texecutor -tplanner -Q bench < bench.sql + + 2. dopo aver lanciato il test, rimuovi la linea finale di + bench.out, qualcosa del tipo: + 85.86user 114.47system 4:49.20elapsed 69%CPU (0avgtext+0avgdata + 0maxresident)k + poi digita: + sh ./perquery < bench.out > & bench.out.perquery + + + +3.10) Perche' ricevo dei risultati arrotondati su date/time aritmetici, + come + select '4 hours'::timespan; + returning '3 hours 59 minutes 60 seconds'? + + Stai usando le nuove librerie glibc2 e hai una versione precedene alla + 2.0.7. E' un problema di arrotondamento matematico nella libreria. + Aggiorna le tue librerie. +---------------------------------------------------------------------------- +Dr. Andrew C.R. Martin University College London +EMAIL: (Work) martin@biochem.ucl.ac.uk (Home) andrew@stagleys.demon.co.uk +URL: http://www.biochem.ucl.ac.uk/~martin +Tel: (Work) +44(0)171 419 3890 (Home) +44(0)1372 275775 +---------------------------------------------------------------------------- +Daniele Medri 'MaDriD' - e-mail: madrid@darshan.org web: www.darshan.org +----------------------------------------------------------------------------