--- /dev/null
+
+ Häufig gestellte Fragen (FAQ) zu PostgreSQL
+
+ Last updated: Sat Jul 10 00:37:57 EDT 1999
+
+
+
+ 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
+ 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.
+
+ PostgreSQL betreffende Themen vorbehalten. Um sich anzumelden, sende
+ eine Email mit folgenden Zeilen im Text (nicht in der Betreffzeile):
+
+ subscribe
+ end
+
+
+ Es gibt auch eine Digest-Liste (Eine Liste, die Mails zusammengefasst
+ sendet). Um sich an dieser Digestliste anzumelden, sende eine Email
+
+ 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,
+
+
+ subscribe
+ end
+
+ Es gibt ebenfalls eine Entwickler-Diskussionsliste. Um sich an dieser
+ 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
+
+ Ü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
+
+ 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.
--- /dev/null
+
+ 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
+
+ Letztes Update der Übersetzung: Mo, 23. August 1999, 10:00 CEST
+ _________________________________________________________________
+
+ Ä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
+
+ 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
+ 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
+ URL: http://www.Linux-Systemhaus.de/
+ Tel: (Work) +49 231 3944432 (Fax) +49 231 3944435
--- /dev/null
+
+=======================================================
+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
+
+
+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
+URL: http://www.biochem.ucl.ac.uk/~martin
+Tel: (Work) +44(0)171 419 3890 (Home) +44(0)1372 275775
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------