postgresql/doc/FAQ_Linux_German

753 lines
29 KiB
Plaintext
Raw Normal View History

H<>ufig gestellte Fragen (FAQ) zu PostgreSQL >= V6.1, Linux-spezifisch
Bitte Zusammen mit der normalen FAQ lesen!
_________________________________________________________________
Letztes Update des Originals: Tue Aug 10 11:15:00 BST 1999
Original-FAQ gepflegt durch: Andrew C.R. Martin
(martin@biochem.ucl.ac.uk)
Original Autor: Andrew C.R. Martin (martin@biochem.ucl.ac.uk)
Letztes Update der <20>bersetzung: Mo, 23. August 1999, 10:00 CEST
<20>bersetzer: Karsten Schulz (schulz@linux-systemhaus.de)
_________________________________________________________________
<20>nderungen in dieser Version (* = ge<67>ndert, + = neu, - = entfernt)
+3.11) Wieso bekomme ich einen Fehler wie: IpcMemoryCreate: shmget
failed (Permission denied)?
Diese Datei ist ungef<65>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
<20>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<68>gt mit der Meldung fehl, da<64>
die Include-Datei dlfcn.h fehlen w<>rde.
1.6) GCC meldet, da<64> 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<65>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<64>
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
<20>nderungen?
<20>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 <20>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 <20>u<EFBFBD>ert.
(siehe dazu auch Frage 3.4).
Falls Du die Makefiles manuell <20>nderst, musst Du die folgende Variable
setzen:
PORTNAME= linux
Du musst auch die folgende Variable <20>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 <20>nderungen durchf<68>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<64> 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<64> 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<47>nden
wurde diese Bibliothek mit der RedHat-Distribution nicht ausgeliefert.
Anscheinend ist dies in der letzten RedHat 4.0 (Colgate) ge<67>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 <20>blich und gut ist!
Hinweis: Du mu<6D>t configure und make clean nach der Installation der
Bibliothek und vor dem erneuten Kompilieren laufen lassen.
Es gab einen Bericht <20>ber ein zerst<73>rtes System, weil Programme auf
diese Bibliothek w<>hrend des Updates zugegriffen haben (alles in allem
nicht weiter <20>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<65>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<64> 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<73>ten 3.1er-Versionen scheinen sie
auch wieder da zu sein. Aber in fr<66>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 <20>ber ein zerst<73>rtes System, weil Programme auf
diese Bibliothek w<>hrend des Updates zugegriffen haben (alles in allem
nicht weiter <20>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<75>hren. Danach ein
ldconfig
durchf<68>hren.
Hinweis: Du mu<6D>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<6C> noch ein
ldconfig
Hinweis: Du mu<6D>t configure und make clean nach der Installation der
Bibliothek und vor dem erneuten Kompilieren laufen lassen.
1.5) Die Kompilierung des Backends schl<68>gt mit der Meldung fehl, da<64> 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<64> Du das dld-Paket installiert
haben mu<6D> (welches bei den meisten a.out-Systemen nicht dabei ist), um
dlfcn.h zu haben. Siehe Frage 1.11.
1.6) GCC meldet, da<64> er die Option -fpic ignorieren w<>rde.
Fr<46>here Versionen des gcc nahmen entweder -fpic oder -fPIC an. Es
scheint, da<64> 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
<20>nderst.
1.7) Ich bekomme Warnungen, wie: warning: cast from pointer to integer of
different size
Diese Warnungen wurden in fr<66>heren Versionen von Postgres95 gesichtet
und k<>nnen ignoriert werden. PostgreSQL V6.0 sollte ohne Warnungen
kompiliert werden, au<61>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<61>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<6D>t Du in der Datei src/bin/psql/Makefile folgende
<20>nderung durchf<68>hren:
ifeq ($(PORTNAME), linux)
LD_ADD+=
<20>ndern in:
ifeq ($(PORTNAME), linux)
LD_ADD+= -ltermcap
PostgreSQL (V6.1)
Das Konfigurationsscript wei<65> nicht, da<64> es auch in /usr/lib/termcap
nach der termcap-Bibliothek schauen soll. Du solltest dieses
Verzeichnis angeben, wenn es nach zus<75>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 <20>ndern und in die LDFLAGS-Zeile den Eintrag
-ltermcap (nach -lreadline) hinzuf<75>gen. (Alternativ kannst Du auch die
Datei src/Makefile.custom <20>ndern, bevor Du ./configure aufrufst.)
Einige SuSE-Versionen liefern nur ncurses, deshalb kann es sein, da<64>
Du die Benutzung von ncurses statt curses erzwingen mu<6D>t, indem Du
-lcurses in -lncurses <20>nderst. (best<73>tigt f<>r SuSE 5.1)
PostgreSQL (V6.4)
In PostgreSQL V6.4 <20>berpr<70>ft configure sowohl das Vorhandensein von
curses, als auch das von ncurses. In der Zwischenzeit kannst Du den
patch von Karl Eichwalder (ke@suse.de) anwenden:
http://www.PostgreSQL.ORG/mhonarc/pgsql-patches/msg00407.html
oder (mit deutschen Bemerkungen):
http://www.suse.de/Support/sdb/ke_postgresql-632.html
Es gab au<61>erdem einen Bericht, da<64> 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<65>tigt wird - dann hast Du Deine
Systeminstallation oder wahrscheinlicher ein Linux-Update
durcheinandergebracht Siehe die Fragen 1.3/1.4. M<>glicherweise mu<6D>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<64> 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<6D>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<66>hreren Versionen von Postgres95.
Standardm<64><6D>ig benutzt PostgreSQL bison -y anstatt yacc.
yacc ist normalerweise als Skript implementiert, das bison -y aufruft.
Aus verschiedenen Gr<47>nden ist make nicht in der Lage, das Skript
auszuf<75>hren (verschiedene Versionen von make? Verschiedene Versionen
der bash?)
Um das zu beheben, <20>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<65>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 <20>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 <20>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<64> Linux keine Prototypen f<>r diese
Inline-Funktionen bereith<74>lt. Die L<>sung liegt darin, das Makefile in
.../src/backend/storage/ipc/ zu <20>ndern: <20>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<72>es
Programm und gro<72>e gcc-Kompilierungsl<73>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<4D>e, deshalb kann es sein, da<64>
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<61>ber, da<64> gmake zu fr<66>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-<2D>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<64> F_BOOLIN,
F_BOOLOUT und F_BYTEAIN nicht deklariert seien?
Die komplette Meldung sieht ungef<65>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<65>t, warum das passiert, ist dieses Problem
ziemlich kniffelig, da diese Konstanten anscheinend nirgendwo
definiert werden.
Die L<>sung ist daf<61>r zu sorgen, da<64> 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<64> Du keinen Shared-Memory-Support in
den Kernel einkompiliert hast. Der Kernel mu<6D> mit dieser Option neu
kompiliert werden, um diese Eigenschaft hinzuzuf<75>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<73>tzung in Deinen Linux-Kernel einkompiliert.
Der Kernel mu<6D> mit dieser Option neu kompiliert werden, um diese
Eigenschaft hinzuzuf<75>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<74>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<74>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<73>hrbare Datei anzeigen zu lassen.
3.7) Andere seltsame Verhaltensweisen
Ich bin mir nicht sicher, welche Symptome alle auftreten k<>nnen, au<61>er
da<64> gar nichts richtig funktioniert, aber es stellte sich heraus, da<64>
man sorgsam darauf achten sollte, da<64> 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 <20>brigen Frage 3.6 f<>r weitere Details bez<65>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<61>ber einige Berichte und es scheint, da<64> 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<65> - zwei M<>glichkeiten, diese
Fehler zu umgehen (die Information stammt von Tatsuo Ishii):
1. <20>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<65>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<65>schte Segmente im shared memory
verursacht. (Du kannst sie mit dem Programm ipcs sehen. Benutze das
Programm ipcrm, um sie zu l<>schen.
_________________________________________________________________
Author of the english version
Dr. Andrew C.R. Martin University College London
EMAIL: (Work) martin@biochem.ucl.ac.uk (Home)
andrew@stagleys.demon.co.uk
URL: http://www.biochem.ucl.ac.uk/~martin
Tel: (Work) +44(0)171 419 3890 (Home) +44(0)1372 275775
Translator of the german version
Karsten Schulz Linux Systemhaus Schulz
EMAIL: (Work) schulz@Linux-Systemhaus.de (Home) kaschu@t800.ping.de
URL: http://www.Linux-Systemhaus.de/
Tel: (Work) +49 231 3944432 (Fax) +49 231 3944435