1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
|
<HTML>
<HEAD>
<TITLE>Linux PostgreSQL FAQ (german)</TITLE>
<META NAME="Author" CONTENT="Karsten Schulz">
<META NAME="GENERATOR" CONTENT="all pages hand-made by Karsten Schulz, using NEdit (Linux)">
<META http-equiv="content-type" CONTENT="text/html;CHARSET=iso8859-1">
<META NAME="robots" CONTENT="index">
<META NAME="robots" CONTENT="follow">
<META NAME="description" CONTENT="Die deutsche Übersetzung der Linux-spezifischen FAQ zum Datenbanksystem PostgreSQL">
<META NAME="keywords" CONTENT="Linux, FAQ, DB, PostgreSQL, SQL, deutsch, german">
<LINK REV=MADE HREF="mailto:schulz@Linux-Systemhaus.de" TITLE="Karsten Schulz">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER><H1>Häufig gestellte Fragen (FAQ) zu PostgreSQL >= V6.1, Linux-spezifisch</H1>
<STRONG>Bitte Zusammen mit der normalen FAQ lesen!</STRONG></CENTER>
<HR>
<TABLE BORDER=0>
<TR>
<TD>Letztes Update des Originals:</TD>
<TD>Tue Aug 10 11:15:00 BST 1999</TD>
</TR>
<TR>
<TD>Original-FAQ gepflegt durch:</TD>
<TD>Andrew C.R. Martin (<A HREF="mailto:martin@biochem.ucl.ac.uk">martin@biochem.ucl.ac.uk</A>)</TD>
</TR>
<TR>
<TD>Original Autor:</TD>
<TD>Andrew C.R. Martin (<A HREF="mailto:martin@biochem.ucl.ac.uk">martin@biochem.ucl.ac.uk</A>)</TD>
</TR>
<TR>
<TD COLSPAN=2> </TD>
</TR>
<TR>
<TD>Letztes Update der Übersetzung:</TD>
<TD>Mo, 23. August 1999, 10:00 CEST</TD>
</TR>
<TR>
<TD>Übersetzer:</TD>
<TD>Karsten Schulz (<A HREF="mailto:schulz@linux-systemhaus.de">schulz@linux-systemhaus.de</A>)</TD>
</TR>
</TABLE>
<HR>
<P>
Änderungen in dieser Version (* = geändert, + = neu, - = entfernt)
<P>
<A HREF="#3.11">+3.11)</A> Wieso bekomme ich einen Fehler wie: <EM>IpcMemoryCreate: shmget failed (Permission denied)</EM>?<BR>
<H2>Diese Datei ist ungefähr wie folgt unterteilt:</H2>
<A HREF="#1.">1.*)</A> PostgreSQL kompilieren<BR>
<A HREF="#2.">2.*)</A> Hilfs- und Zusatzprogramme kompilieren<BR>
<A HREF="#3.">3.*)</A> Laufzeit Probleme<BR>
<P><BR>
<H2>Beantwortete Fragen:</H2>
<A NAME="1."> </A><H3><A HREF="#Sec1">PostgreSQL kompilieren</A></H3>
<A HREF="#1.1">1.1)</A> Welche Anpassungen müssen in src/Makefile.global oder src/Makefile.custom gemacht werden
und gibt es weitere notwendige Änderungen?<BR>
<A HREF="#1.2">1.2)</A> Warum habe ich Probleme mit der fehlenden Bibliothek libreadline?<BR>
<A HREF="#1.3">1.3)</A> [REDHAT] Warum habe ich Probleme mit der fehlenden Bibliothek libdl und der fehlenden dlfcn.h?<BR>
<A HREF="#1.4">1.4)</A> [SLACKWARE 3.1] Warum habe ich Probleme mit der fehlenden Bibliothek libdl und der fehlenden dlfcn.h?<BR>
<A HREF="#1.5">1.5)</A> Die Kompilierung des Backends schlägt mit der Meldung fehl, daß die Include-Datei dlfcn.h fehlen würde.<BR>
<A HREF="#1.6">1.6)</A> GCC meldet, daß er die Option -fpic ignorieren würde.<BR>
<A HREF="#1.7">1.7)</A> Ich bekomme Warnungen, wie: <EM>warning: cast from pointer to integer of different size</EM><BR>
<A HREF="#1.8">1.8)</A> [SuSE-Linux 4.2-5.3] Wo sind curses und termcap?<BR>
<A HREF="#1.9">1.9)</A> Warum bekomme ich Probleme mit ld.so?<BR>
<A HREF="#1.10">1.10)</A> Wieso bekomme ich <EM>yy_flush_buffer undefined</EM> Fehler?<BR>
<A HREF="#1.11">1.11)</A> Wie kompiliere ich PostgreSQL auf einem a.out System?<BR>
<A HREF="#1.12">1.12)</A> Warum scheitert make mit der Meldung:<BR><EM>
yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y
make: /usr/bin/make: cannot execute binary file</EM><BR>
<A HREF="#1.13">1.13)</A> Was sind die Bezüge in der Bibliothek X11_LIB zu libsocket und libnsl in der Datei src/Makefile.global?<BR>
<A HREF="#1.14">1.14)</A> [DEBIAN] Wo ist die Bibliothek libtermcap?<BR>
<A HREF="#1.15">1.15)</A> [REDHAT] Kann ich PostgreSQL als RPM-Archiv bekommen?<BR>
<A HREF="#1.16">1.16)</A> Während ich versuche eine Entwickler-Version unter Linux zu kompilieren, bricht der Vorgang mit folgender
Fehlermeldung ab:<BR><EM>
In file included from /usr/include/sys/sem.h:8,<BR>
from ipc.c:37:<BR>
/usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit'<BR>
....<BR>
make: *** [ipc.o] Error 1</EM><BR>
<A HREF="#1.17">1.17)</A> Beim Kompilieren von PostgreSQL bricht der gcc mit einer Signal 11 Meldung ab.<BR>
<A HREF="#1.18">1.18)</A> Kann ich Version 6.1.1 unter MkLinux installieren?<BR>
<A HREF="#1.19">1.19)</A> Warum stoppt make oder bricht sonstwie ab?<BR>
<A HREF="#1.20">1.20)</A> Wie kann ich für die Prozessoren 486 oder Pentium optimieren?<BR>
<A HREF="#1.21">1.21)</A> Wieso bekomme ich seltsame Ergebnisse beim Drucken von Zeiten (z.B. beim Regressionstest 'timespan')?<BR>
<A HREF="#1.22">1.22)</A> Warum bekomme ich keine shared libraries für libpq, wenn ich Version 6.3.2 kompiliere?<BR>
<A HREF="#1.23">1.23)</A> Warum scheitert der Kompilierungslauf mit Nachrichten, daß F_BOOLIN, F_BOOLOUT und F_BYTEAIN nicht deklariert seien?<BR>
<P>
<A NAME="2."> </A><H3><A HREF="#Sec2">Hilfs- und Zusatzprogramme kompilieren</A></H3>
<A HREF="#2.1">2.1)</A> Der Linker findet die Bibliothek libX11 nicht, wenn pgtclsh kompiliert werden soll.<BR>
<A NAME="3."> </A><H3><A HREF="#Sec3">Laufzeit Probleme</A></H3>
<A HREF="#3.1">3.1)</A> Ich bekomme die Fehlermeldung <EM>_fUnKy_POSTPORT_sTuFf_ undefined</EM>, wenn Skripts wie createuser laufen.<BR>
<A HREF="#3.2">3.2)</A> Nachdem ich postmaster starte, meldet das System <EM>Bad system call (Core dumped)</EM><BR>
<A HREF="#3.3">3.3)</A> Wenn ich versuche, den Postmaster zu starten, bekomme ich eine Fehlermeldung wie:<BR><EM>
Failed Assertion("!(file != 0):(null)", File:<BR>
"/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257)<BR>
!(file != 0) (0)<BR>
initdb: could not create template database<BR>
initdb: cleaning up.</EM><BR>
<A HREF="#3.4">3.4)</A> Warum funktioniert createuser nicht?<BR>
<A HREF="#3.5">3.5)</A> Wieso bekomme ich einen Fehler, wie:<BR><EM>
IpcMemoryCreate: memKey=155356396 , size=760632 ,<BR>
permission=384IpcMemoryCreate: shmget(..., create, ...)<BR>
failed: Invalid argument</EM><BR>
<A HREF="#3.6">3.6)</A> Wieso scheitert der Aufruf von psql mit: <EM>psql: can't load library 'libpq.so.1</EM><BR>
<A HREF="#3.7">3.7)</A> Andere seltsame Verhaltensweisen<BR>
<A HREF="#3.8">3.8)</A> Wenn PostgreSQL beim Systemhalt lief, führt Linux beim Neustart jedesmal einen Filesystemcheck (fsck) durch<BR>
<A HREF="#3.9">3.9)</A> Warum dauert Query 32 in den RegressionsTests so lange?<BR>
<A HREF="#3.10">3.10)</A> Warum bekomme ich lustige Rundungsergebnisse in einigen Datums/Zeit-Berechnungen, wie:<BR><EM>
select '4 hours'::timespan;<BR>
liefert '3 hours 59 minutes 60 seconds'</EM>?<BR>
<A HREF="#3.11">+3.11)</A> Wieso bekomme ich einen Fehler wie: <EM>IpcMemoryCreate: shmget failed (Permission denied)</EM>?<BR>
<P>
<H3><A NAME="Sec1">Abschnitt 1: PostgreSQL kompilieren</A></H3>
<H4><A NAME="1.1">1.1)</A> Welche Anpassungen müssen in src/Makefile.global oder src/Makefile.custom gemacht werden
und gibt es weitere notwendige Änderungen?</H4>
Änderungen an den Makefiles werden am einfachsten dadurch gemacht, indem das <EM>customize shellscript</EM>
im src-Verzeichnis aufgerufen wird, das ein Makefile.custom erzeugt.
<P>
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 <A HREF="#3.4">Frage 3.4</A>).
<P>
Falls Du die Makefiles manuell änderst, <STRONG>musst</STRONG> Du die
folgende Variable setzen:<BR><BR>
<PRE>
PORTNAME= linux
</PRE>
Du musst auch die folgende Variable ändern, damit sie auf Deine
Installation passt:
<PRE>
POSTGRESDIR
</PRE>
Falls Du die <EM>USE_TCL</EM>-Option aktivierst, musst Du folgende Variablen setzen:<BR><BR>
<PRE>
TCL_INCDIR=
TCL_LIBDIR=
TCL_LIB=
TK_INCDIR=
TK_LIBDIR=
TK_LIB=
X11_INCDIR=
X11_LIBDIR=
X11_LIB=
</PRE>
Auf meinem Slackware 3.0 System sind das:
<PRE>
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
</PRE>
<P>
Du solltest auch alle weiteren Änderungen durchführen, die in der
Datei INSTALL und in Makefile.global dokumentiert sind.
<H4><A NAME="1.2">1.2)</A> Warum habe ich Probleme mit der fehlenden Bibliothek libreadline?</H4>
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.<BR>
Hinweis: Debian Linux (wie FreeBSD) kommt mit einer installierten GNU readline Bibliothek.
<H4><A NAME="1.3">1.3)</A> [REDHAT] Warum habe ich Probleme mit der fehlenden Bibliothek libdl und der fehlenden dlfcn.h?</H4>
Das Problem erscheint dadurch, daß in der letzten Phase des Kompilierungsvorgangs Funktionen wie
dlopen(), dlclose(), etc. nicht gelinkt werden können.
<P>
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.
<P>
RedHat hat nun ein neues ld.so RPM-Archiv auf ihrem ftp-Server. Hole Dir einfach:
<P>
<A HREF="ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/">ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/ld.so-1.7.14-4.i386.rpm</A>
<P>
Installiere das RPM-Archiv wie üblich und gut ist!
<P>
Hinweis: Du mußt <EM>configure</EM> und <EM>make clean</EM> nach der Installation
der Bibliothek und vor dem erneuten Kompilieren laufen lassen.
<P>
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!
<P>
Wenn Du lieber den harten Weg gehen willst, kannst Du die Bibliothek und
die Header-Dateien von:
<P>
<A HREF="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/">ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.7.14.tar.gz</A>
<P>
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 <A HREF="#1.2">Frage 1.2</A>, die den gleichen Fehler
für Slackware 3.1 behandelt.
<P>
Mache es aber nur auf diese Weise, wenn Du weißt, was Du tust!
<H4><A NAME="1.4">1.4)</A> [SLACKWARE 3.1] Warum habe ich Probleme mit der fehlenden Bibliothek libdl und der fehlenden dlfcn.h?</H4>
Das Problem erscheint dadurch, daß in der letzten Phase des Kompilierungsvorgangs Funktionen wie
dlopen(), dlclose(), etc. nicht gelinkt werden können.
<P>
Siehe die Antwort zu <A HREF="#1.3">Frage 1.3</A>.
<P>
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.
<P>
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!
<P>
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
<PRE>sh install/doinst.sh</PRE>
durchzuführen. Danach ein <PRE>ldconfig</PRE>durchführen.
<P>
Hinweis: Du mußt <EM>configure</EM> und <EM>make clean</EM> nach der Installation
der Bibliothek und vor dem erneuten Kompilieren laufen lassen.
<P>
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:
<PRE>
cd /lib
ln -sf libdl.so.1.7.14 libdl.so.1
ln -sf libdl.so.1 libdl.so
</PRE>
Auf manchen Systemen (je nach Deiner gcc-Konfiguration) können noch folgende
Befehle notwendig sein:
<PRE>
cd /usr/lib
ln -sf /lib/libdl.so .
</PRE>
Und zum Schluß noch ein <PRE>ldconfig</PRE>
<P>
Hinweis: Du mußt <EM>configure</EM> und <EM>make clean</EM> nach der Installation
der Bibliothek und vor dem erneuten Kompilieren laufen lassen.
<H4><A NAME="1.5">1.5)</A> Die Kompilierung des Backends schlägt mit der Meldung fehl, daß die Include-Datei dlfcn.h fehlen würde.</H4>
Siehe die Antworten zu den Fragen <A HREF="#1.3">1.3</A> und <A HREF="#1.4">1.4</A>.
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 <A HREF="#1.11">Frage 1.11</A>.
<H4><A NAME="1.6">1.6)</A> GCC meldet, daß er die Option -fpic ignorieren würde.</H4>
Frühere Versionen des gcc nahmen entweder <CODE>-fpic</CODE> oder <CODE>-fPIC</CODE> an.
Es scheint, daß neuere Versionen (V2.7.2?) <CODE>-fPIC</CODE> erfordern.
Falls Du ein ELF-System benutzt, kannst das alles ignoriert werden, da <CODE>-fPIC</CODE>
als Standardvorgabe voreingestellt ist.
Du kannst diese Angabe korrigieren, indem Du CFLAGS_SL in der Datei src/Makefile.global
änderst.
<H4><A NAME="1.7">1.7)</A> Ich bekomme Warnungen, wie: <EM>warning: cast from pointer to integer of different size</EM></H4>
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).
<H4><A NAME="1.8">1.8)</A> [SuSE-Linux 4.2-5.3] Wo sind curses und termcap?</H4>
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.
<H5>PostgreSQL (bis Version V6.0)</H5>
Setze den Wert für CURSES_LIB in src/Makefile.custom auf -lncurses (oder erledige das durch das <EM>customize script</EM>.
Füge folgende Zeile zur Datei src/Makefile.custom hinzu:
<PRE>
LDADD_BE+= -L/usr/lib/termcap
</PRE>
Möglicherweise mußt Du in der Datei src/bin/psql/Makefile folgende Änderung durchführen:
<PRE>
ifeq ($(PORTNAME), linux)
LD_ADD+=
</PRE>
ändern in:
<PRE>
ifeq ($(PORTNAME), linux)
LD_ADD+= -ltermcap
</PRE>
<H5>PostgreSQL (V6.1)</H5>
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.
<P>
Falls das nicht funkitoniert (Ich habe SuSE nicht, um das zu testen), dann solltest Du nach dem <EM>./configure</EM>-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 <EM>./configure</EM> aufrufst.)
<P>
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)
<P>
<H5>PostgreSQL (V6.4)</H5>
In PostgreSQL V6.4 überprüft <CODE>configure</CODE> sowohl das Vorhandensein von
curses, als auch das von ncurses.
In der Zwischenzeit kannst Du den patch von <A HREF="mailto:ke@suse.de">Karl Eichwalder (ke@suse.de)</A>
anwenden:
<P>
<A HREF="http://www.PostgreSQL.ORG/mhonarc/pgsql-patches/msg00407.html">http://www.PostgreSQL.ORG/mhonarc/pgsql-patches/msg00407.html</A><BR>
oder (mit deutschen Bemerkungen):<BR>
<A HREF="http://www.suse.de/Support/sdb/ke_postgresql-632.html">http://www.suse.de/Support/sdb/ke_postgresql-632.html</A>
<P>
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:
<PRE>
cd /usr/lib
ln -s libtermcap.so.2.0.8 libtermcap.so
</PRE>
<H4><A NAME="1.9">1.9)</A> Warum bekomme ich Probleme mit ld.so?</H4>
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 <A HREF="#1.3">1.3</A>/<A HREF="#1.4">1.4</A>. 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.
<H4><A NAME="1.10">1.10)</A> Wieso bekomme ich <EM>yy_flush_buffer undefined</EM> Fehler?</H4>
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 <A HREF="3.4">Frage 3.4</A>.
<H4><A NAME="1.11">1.11)</A> Wie kompiliere ich PostgreSQL auf einem a.out System?</H4>
Als erstes mußt Du die dld-Bibliothek installieren. Diese gibt es auf Sunsite unter
Linux/libs/dld.3.2.7.tar.gz (<A HREF="ftp://sunsite.unc.edu/pub/Linux/libs/">ftp://sunsite.unc.edu/pub/Linux/libs/dld.3.2.7.tar.gz</A>).
<P>
Dann füge folgende Zeile in src/Makefile.custom hinzu:
<PRE>
LINUX_ELF=
</PRE>
oder benutze das <EM>customize Skript</EM>
<H4><A NAME="1.12">1.12)</A> Warum scheitert make mit der Meldung:<BR><EM>
yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y
make: /usr/bin/make: cannot execute binary file</EM></H4>
Das war ein Problem in frühreren Versionen von Postgres95. Standardmäßig benutzt PostgreSQL <CODE>bison -y</CODE>
anstatt <CODE>yacc</CODE>.
<P>
yacc ist normalerweise als Skript implementiert, das <CODE>bison -y</CODE> aufruft. Aus verschiedenen Gründen ist
<EM>make</EM> nicht in der Lage, das Skript auszuführen (verschiedene Versionen von make? Verschiedene Versionen der bash?)
<P>
Um das zu beheben, ändere einfach die Datei src/mk/port/postgres.mk.linux am Ende. Die Zeile:
<PRE>
# YACC = bison -y
</PRE>
wird zu:
<PRE>
YACC = bison -y
</PRE>
<H4><A NAME="1.13">1.13)</A> Was sind die Bezüge in der Bibliothek X11_LIB zu libsocket und libnsl in der Datei src/Makefile.global?</H4>
Das war ein Problem in Version 1.08 (Sun Solaris spezifisch). Sie sind behoben in 1.09 und 6.0
<H4><A NAME="1.14">1.14)</A> [DEBIAN] Wo ist die Bibliothek libtermcap?</H4>
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 <A HREF="1.8">Frage 1.8</A>)
<P>
Du kannst die Datei src/bin/psql/Makefile wie folgt ändern:
<PRE>
ifeq ($(PORTNAME), linux)
LD_ADD+= -ltermcap
</PRE>
in
<PRE>
ifeq ($(PORTNAME), linux)
LD_ADD+=
</PRE>
<H4><A NAME="1.15">1.15)</A> [REDHAT] Kann ich PostgreSQL als RPM-Archiv bekommen?</H4>
Ja! <A HREF="mailto:mimo@lodz.pdi.net">Michal Mosiewicz</A> (<A HREF="http://www.pdi.lodz.pl/~mimo">http://www.pdi.lodz.pl/~mimo</A>)
hat ein RPM für PostgreSQL V6.0 auf Intel Architekturen zusammengestellt,
welches er nach <A HREF="ftp://ftp.redhat.org/pub/Incoming/">ftp://ftp.redhat.org/pub/Incoming/Postgres-6.0-1.i386.rpm</A>
hochgeladen hat.
<P>
Das ist eine vorkompilierte Version, das Quelltext-RPM stammt vom 03.02.1997.
<H4><A NAME="1.16">1.16)</A> Während ich versuche eine Entwickler-Version unter Linux zu kompilieren, bricht der Vorgang mit folgender
Fehlermeldung ab:<BR><EM>
In file included from /usr/include/sys/sem.h:8,<BR>
from ipc.c:37:<BR>
/usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit'<BR>
....<BR>
make: *** [ipc.o] Error 1</EM></H4>
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:
<PRE>
CFLAGS+=$(INCLUDE_OPT)
</PRE>
in
<PRE>
CFLAGS+=$(INCLUDE_OPT) -Wno-error
</PRE>
Mache dasselbe dann im ../src/backend/storage/lmgr Verzeichnis.
<H4><A NAME="1.17">1.17)</A> Beim Kompilieren von PostgreSQL bricht der gcc mit einer Signal 11 Meldung ab.</H4>
Oder genauer: <EM>gcc: Internal compiler error: program cc1 got fatal signal 11</EM>
<P>
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.
<P>
Mehr Information zu diesem Problem gibt es unter <A HREF="http://www.BitWizard.nl/sig11/">http://www.BitWizard.nl/sig11/</A> und
in deutsch unter <A HREF="http://www.suse.de/sdb/de/html/kfr_58.html">http://www.suse.de/sdb/de/html/kfr_58.html</A>.
<P>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.
<H4><A NAME="1.18">1.18)</A> Kann ich Version 6.1.1 unter MkLinux installieren?</H4>
<A HREF="mailto:t-ishii@sra.co.jp">Tatsuo Ishii</A> hat das unter MkLinux DR2.1 update2 geschafft, nachdem der kleine Patch
von <A HREF="ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/">ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/mklinux.patch.gz</A>
eingespielt wurde.
<H4><A NAME="1.19">1.19)</A> Warum stoppt make oder bricht sonstwie ab?</H4>
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.
<H4><A NAME="1.20">1.20)</A> Wie kann ich für die Prozessoren 486 oder Pentium optimieren?</H4>
Die Standard-Compilerflags führen keine Optimierung für den 486er oder den Pentium-Prozessor durch.
Um diese Optimierung zu aktivieren, füge wahlweise <U>eine</U> der folgenden Zeilen
der Datei Makefile.custom hinzu:
<PRE>
CFLAGS+= -m486
</PRE>
oder
<PRE>
CFLAGS+= -mpentium
</PRE>
oder
<PRE>
CFLAGS+= -mpentiumpro
</PRE>
<H4><A NAME="1.21">1.21)</A> Wieso bekomme ich seltsame Ergebnisse beim Drucken von Zeiten (z.B. beim Regressionstest 'timespan')?</H4>
Die Zeit erscheint z.B. als: "4 hours 59 mins 60.00 secs" und nicht als "5 hours"
<P>
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.
<H4><A NAME="1.22">1.22)</A> Warum bekomme ich keine shared libraries für libpq, wenn ich Version 6.3.2 kompiliere?</H4>
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 <A HREF="ftp://postgresql.org/pub/patches/">ftp://postgresql.org/pub/patches/</A> nach.
<H4><A NAME="1.23">1.23)</A> Warum scheitert der Kompilierungslauf mit Nachrichten, daß F_BOOLIN, F_BOOLOUT und F_BYTEAIN nicht deklariert seien?</H4>
Die komplette Meldung sieht ungefähr so aus:
<PRE>
-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
</PRE>
Solange Du nicht weißt, warum das passiert, ist dieses Problem ziemlich kniffelig, da diese
Konstanten anscheinend nirgendwo definiert werden.
<P>
Die Lösung ist dafür zu sorgen, daß der cpp in Deinem Pfad erreichbar ist, bevor
make gestartet wird.
<P>
Auf Redhat 5.1, ist cpp in /usr/lib/gcc-lib/i386-redhat-linux/2.7.2.3
<H3><A NAME="Sec2">Abschnitt 2: Hilfs- und Zusatzprogramme kompilieren</A></H3>
<H4><A NAME="2.1">2.1)</A> Der Linker findet die Bibliothek libX11 nicht, wenn pgtclsh kompiliert werden soll.</H4>
Füge folgende Zeile in src/Makefile.custom hinzu:
<PRE>
X11_LIBDIR = /usr/X11R6/lib
</PRE>
<H3><A NAME="Sec3">Abschnitt 3: Laufzeit Probleme</A></H3>
<H4><A NAME="3.1">3.1)</A> Ich bekomme die Fehlermeldung <EM>_fUnKy_POSTPORT_sTuFf_ undefined</EM>, wenn Skripts wie createuser laufen.</H4>
Das ist ein Fehler in Versionen 1.06-1.07 und ist ab Version 1.08 und höher behoben.
<H4><A NAME="3.2">3.2)</A> Nachdem ich postmaster starte, meldet das System <EM>Bad system call (Core dumped)</EM></H4>
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.
<H4><A NAME="3.3">3.3)</A> Wenn ich versuche, den Postmaster zu starten, bekomme ich eine Fehlermeldung wie:<BR><EM>
Failed Assertion("!(file != 0):(null)", File:<BR>
"/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257)<BR>
!(file != 0) (0)<BR>
initdb: could not create template database<BR>
initdb: cleaning up.</EM></H4>
Deine Berechtigungen für die Datei /dev/null sind falsch gesetzt.
ein <CODE>ls -l /dev/null</CODE> sollte folgende Ausgabe zeigen:
<PRE>
crw-rw-rw- 1 root wheel 2, 2 Oct 8 18:41 /dev/null
</PRE>
Korrigiere die Berechtigungen mit:
<PRE>
chmod a+rw /dev/null
</PRE>
<H4><A NAME="3.4">3.4)</A> Warum funktioniert createuser nicht?</H4>
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.
<P>
Die Version 2.5.4. gibt es unter <A HREF="ftp://prep.ai.mit.edu/pub/gnu/">ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz</A>.
<H4><A NAME="3.5">3.5)</A> Wieso bekomme ich einen Fehler, wie:<BR><EM>
IpcMemoryCreate: memKey=155356396 , size=760632 ,<BR>
permission=384IpcMemoryCreate: shmget(..., create, ...)<BR>
failed: Invalid argument</EM></H4>
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.
<H4><A NAME="3.6">3.6)</A> Wieso scheitert der Aufruf von psql mit: <EM>psql: can't load library 'libpq.so.1</EM></H4>
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 <CODE>/sbin/ldconfig -v</CODE> 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:
<PRE>
export LD_LIBRARY_PATH='PathToPGSQL'/lib
</PRE>
unter der tcsh so:
<PRE>
setenv LD_LIBRARY_PATH 'PathToPGSQL'/lib
</PRE>
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.
<H4><A NAME="3.7">3.7)</A> Andere seltsame Verhaltensweisen</H4>
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
<A HREF="3.6">Frage 3.6</A> für weitere Details bezüglich dem Laden von Bibliotheken.
<H4><A NAME="3.8">3.8)</A> Wenn PostgreSQL beim Systemhalt lief, führt Linux beim Neustart jedesmal einen Filesystemcheck (fsck) durch</H4>
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.
<P>
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.
<P>
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.
<P>
Es gibt eine Beispieldatei unter dem Verzeichnis contrib/linux/postgres.init.
<P>
Hier ist noch ein anderes Beispiel von <A HREF="mailto:john@intelligent.co.uk">John Robinson</A>
welches Du entsprechend anpassen kannst.
<PRE>
#!/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/postgreSQL/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
</PRE>
<H4><A NAME="3.9">3.9)</A> Warum dauert Query 32 in den RegressionsTests so lange?</H4>
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 <A HREF="mailto:t-ishii@sra.co.jp">Tatsuo Ishii</A>):
<P>
1. ändere folgende Zeile in regress.sh:
<PRE>
time postgres -texecutor -tplanner -Q bench < bench.sql
</PRE>
in
<PRE>
postgres -texecutor -tplanner -Q bench < bench.sql
</PRE>
2. nachdem der Test gelaufen ist, entferne eine Zeile ganz am Ende der Datei bench.out,
die ungefähr so aussieht:
<PRE>
85.86user 114.47system 4:49.20elapsed 69%CPU (0avgtext+0avgdata 0maxresident)k
</PRE>
dann gib folgendes auf der Befehlszeile ein:
<PRE>
sh ./perquery < bench.out > & bench.out.perquery
</PRE>
<H4><A NAME="#3.10">3.10)</A> Warum bekomme ich lustige Rundungsergebnisse in einigen Datums/Zeit-Berechnungen, wie:<BR><EM>
select '4 hours'::timespan;<BR>
liefert '3 hours 59 minutes 60 seconds'</EM>?</H4>
Du benutzt neue glibc2-Bibliotheken in einer Version kleiner als 2.0.7. Das ist ein mathematisches Rundungsproblem.
Aktualisiere Deine Bibliothek.
<H4><A NAME="3.11">3.11)</A> Wieso bekomme ich einen Fehler wie: <EM>IpcMemoryCreate: shmget failed (Permission denied)</EM>?</H4>
Im Detail erscheint der Fehler mit dieser Meldung:<BR>
<PRE>
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
</PRE>
Dieser Fehler wird durch nicht gelöschte Segmente im <EM>shared memory</EM> verursacht.
(Du kannst sie mit dem Programm <EM>ipcs</EM> sehen.
Benutze das Programm <EM>ipcrm</EM>, um sie zu löschen.
<HR>
<P><BR>
<P><BR>
<CENTER>
<TABLE BORDER=0 CELLSPACING=2 CELLPADDING=2>
<TR>
<TH COLSPAN=2>Author of the english version</TH>
</TR>
<TR>
<TD ALIGN=LEFT>Dr. Andrew C.R. Martin</TD>
<TD ALIGN=RIGHT>University College London</TD>
</TR>
<TR>
<TD ALIGN=LEFT>EMAIL: (Work) martin@biochem.ucl.ac.uk</TD>
<TD ALIGN=RIGHT>(Home) andrew@stagleys.demon.co.uk</TD>
</TR>
<TR>
<TD ALIGN=CENTER COLSPAN=2>URL: http://www.biochem.ucl.ac.uk/~martin</TD>
</TR>
<TR>
<TD ALIGN=LEFT>Tel: (Work) +44(0)171 419 3890</TD>
<TD ALIGN=RIGHT>(Home) +44(0)1372 275775</TD>
</TR>
</TABLE>
<P>
<TABLE BORDER=0 CELLSPACING=2 CELLPADDING=2>
<TR>
<TH COLSPAN=2>Translator of the german version</TH>
</TR>
<TR>
<TD ALIGN=LEFT>Karsten Schulz</TD>
<TD ALIGN=RIGHT>Linux Systemhaus Schulz</TD>
</TR>
<TR>
<TD ALIGN=LEFT>EMAIL: (Work) schulz@Linux-Systemhaus.de</TD>
<TD ALIGN=RIGHT>(Home) kaschu@t800.ping.de</TD>
</TR>
<TR>
<TD ALIGN=CENTER COLSPAN=2>URL: http://www.Linux-Systemhaus.de/</TD>
</TR>
<TR>
<TD ALIGN=LEFT>Tel: (Work) +49 231 3944432</TD>
<TD ALIGN=RIGHT>(Fax) +49 231 3944435</TD>
</TR>
</TABLE>
</CENTER>
</BODY>
</HTML>
|