次のページ
前のページ
目次へ
PostgreSQL >=V6.1 のためのよくある質問(FAQ)
Linux 特定
通常の FAQ と併せてお読み下さい
最終更新日: Fri Jun 19 13:35:00 BST 1998
日本語版作成日: 1998年06月22日
現在の維持管理者: Andrew C.R. Martin (martin@biochem.ucl.ac.uk)
元の著者: Andrew C.R. Martin (martin@biochem.ucl.ac.uk)
和訳者: 桑村潤(juk@rccm.co.jp)
[訳注:
この文書の最新版は、
http://www.biochem.ucl.ac.uk/~martin/pgsql/linux.faq
にあります。
日本語版は、
http://www.rccm.co.jp/~juk/pgsql/faq-linux-j.shtml
にあります。
]
Changes in this version (* = modified, + = new, - = removed):
* +1.23) コンパイルが F_BOOLIN, F_BOOLOUT および F_BYTEAIN が未定義である
とのメッセージで失敗するのはなぜですか?
このファイルはおおよそ次のように別れています:
* 1.*) PostgreSQL のインストール
* 2.*) 附属プログラムのコンパイル
* 3.*) 実行時の問題
------------------------------------------------------------------------
1.1) src/Makefile.global や src/Makefile.custom には何を変更すればよいでしょ
うか、また、その他に必要な変更はありますか?
1.2) libreadline が見つからないという問題はなぜ起こりますか?
1.3) [REDHAT] libdl と dlfcn.h が見つからないという問題はなぜ起こりますか?
1.4) [SLACKWARE 3.1] libdl と dlfcn.h が見つからないという問題はなぜ起こりま
すか?
1.5) backend のコンパイルがインクルードファイル dlfcn.h が見つからないという
ことで終ります。
1.6) GCC がオプション -fpic を無視したとぼやきます。
1.7) 次のような警告を受け取ります
warning: cast from pointer to integer of different size
1.8) [SuSE-Linux 4.2-4.4] curses と termcap はどこにありますか?
1.9) ld.so で問題が出るのはなぜでしょう?
1.10) `yy_flush_buffer undefined' というエラーが出るのはなぜでしょう?
1.11) a.out システムでは PostgreSQL をどのようにコンパイルしますか?
1.12) 次のように make が失敗するのはなぜですか:
yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y
make: /usr/bin/make: cannot execute binary file
1.13) src/Makefile.global の中で X11_LIB の libsocket と libnsl への参照は何
ですか?
1.14) [DEBIAN] libtermcap はどこにありますか?
1.15) [REDHAT] RPM での PostgreSQL は手に入りますか?
1.16) Linux で開発バージョンをコンパイルしようとしたら、次のようなメッセージ
で失敗しました:
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) postgres をコンパイルするとき、gcc が signal 11 を出して落っこちまし
た。
gcc: Internal compiler error: program cc1 got fatal
signal 11
1.18) MkLinux で 6.1.1 をインストールできますか?
1.19) メイクが終ったりクラッシュするのはどうして?
1.20) 486 や Pentium プロセッサ用の最適化はどのようにするのですか?
1.21) 時間を印刷しようとするとどうして変な結果になるのですか(例えば、
regression テストの 'timespan)?
1.22) 6.3.2 をコンパイルした時に libpq のための共有ライブラリができないのは
なぜですか?
1.23) コンパイルが F_BOOLIN, F_BOOLOUT および F_BYTEAIN が未定義であるとのメ
ッセージで失敗するのはなぜですか?
2.1) pgtclsh をコンパイルする時、リンカが libX11 を捜せません。
3.1) createuser などのスクリプトを走らせる時、 _fUnKy_POSTPORT_sTuFf_ が未定
義とのエラー報告を受け取ります。
3.2) postmaster を走らせた後、システムが 'Bad system call(Core dumped)' と言
います。
3.3) Postmaster を走らせようとする時、次のようなエラーを受け取るのはなぜです
か?
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) createuser が動かないのはなぜですか?
3.5) 次のようなエラーを受け取るのはなぜですか:
IpcMemoryCreate: memKey=155356396 , size=760632 ,
permission=384IpcMemoryCreate: shmget(..., create, ...)
failed: Invalid argument
3.6) どうして、psql が次のように失敗するのですか:
psql: can't load library 'libpq.so.1'
3.7) その他の奇妙な振舞。
3.8) PostgreSQL が走っている時にシステムをシャットダウンすると、
Linux はリブートの時にいつもディスクを fsck します。
3.9) regression テストの問い合わせ 32 にとても時間がかかるのはなぜですか?
3.10) ある date/time の演算で、以下のような妙な丸めとなるのはなぜですか?
select '4 hours'::timespan;
returning '3 hours 59 minutes 60 seconds'?
------------------------------------------------------------------------
Section 1: PostgreSQL のコンパイル
1.1) src/Makefile.global や src/Makefile.custom には何を変更すれば
よいでしょうか、また、その他に必要な変更はありますか?
makefile等への変更は、Makefile.custom を書き出す customize シェ
ルスクリプトを src ディレクトリで走らせることにより最も簡単にで
きます。
[訳注
customize コマンドは 6.1 以降なくなりました。
]
その他にやらなくてはならない変更は、もし Flex のバージョンがよ
く知られているバグのある 2.5.3 の場合は、createuser が失敗する
(質問3.4 を参照)ので、それを置き換えることです。
もし、makefile等を手で編集するのであれば、★必ず★次の変数をセッ
トしなくてはなりません:
PORTNAME= linux
また、次の変数もあなたのインストールを行なう場所に変更する必要
があります:
POSTGRESDIR
USE_TCL オプションを生かすならば、以下の変数をセットする必要が
あります:
TCL_INCDIR=
TCL_LIBDIR=
TCL_LIB=
TK_INCDIR=
TK_LIBDIR=
TK_LIB=
X11_INCDIR=
X11_LIBDIR=
X11_LIB=
筆者の Slackware3.0 システムでは、それらは:
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
INSTALL ファイルと Makefile.global ファイルにあるドキュメント
に従ってその他に必要な変更をしても構いません。
1.2) libreadline が見つからないという問題はなぜ起こりますか?
Linux システムは一般的にインストール済みの GNU readline ライブ
ラリを含んでいません。GNU readline ライブラリをインストールす
るか、または、src/Makefile.global あるいは src/Makefile.custom
で readline オプションを活性化しないようにしましょう。
Debian Linux では(FreeBSD のように) readline がインストールさ
れて来ることをここに記しておきます。
1.3) [REDHAT] libdl と dlfcn.h が見つからないという問題はなぜ起こりますか?
このこと自身が、コンパイルの最後のフェーズで dlopen() や
dlclose() などのような関数とリンクできないことを明示しています。
libdl ライブラリは ユーザ提供関数として実行時に動的結合されま
す。いくつかの理由のためにこのライブラリは Redhat の配給から洩
れました。最近の RedHat 4.0(Colgate) では直っています。
今は、新しい ld.so の RPM パッケージが RedHat の FTP サイトに
あります。簡単に入手するには:
ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/ld.so-1.7.14-4.i386.rpm
RPM ファイルを普通にインストールしてやり直してみて下さい。
注意! ライブラリのインストールの後に再コンパイルを行なう前に、
configure を走らせ直して make clean をしなければならないでしょう。
これらのライブラリを更新しているときにアクセスするプログラムの
ためにシステムが落ちたと言う報告が一つありました(驚くことでは
ありありませんが)。したがって、新しいライブラリをインストール
する前にシステムを再起動するのは良い考えで、なるべく更新中は走
らせるものを少なくしましょう。シングルユーザ・モードになるのが
良いでしょう。
もし、それを難しい方法でしたいのであれば、次の場所からライブラ
リとヘッダを取得することもできます:
ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.7.14.tar.gz
コンパイル済のバイナリを
distributions/debian/buzz/binary-i386/base/ld.so-1.7.14-4.deb
同じサイトで見つけるか、または、初期のころの Slackware パッケー
ジでは 1.2 の質問と同じ問題を直すかのどちらをしても構いま
せん。ただし後者方法は、自分でやっていることがおわかりでなけれ
ばやらないで下さい。
1.4) [SLACKWARE 3.1] libdl と dlfcn.h が見つからないという問題はなぜ起こりますか?
このこと自身が、コンパイルの最後のフェーズで dlopen() や
dlclose() などのような関数とリンクできないことを明示しています。
質問 1.3 の回答を御覧下さい。バージョン 3.0 までの Slackware
はこのライブラリとインクルードファイルが提供されましたが、初期
の 3.1 のリリース(1996年9月9日より前)では無くなってました。そ
して、多くの CD-ROM のバージョンがその最初の 3.1 のリリースを
入れているでしょう。
これらのライブラリを更新しているときにアクセスするプログラムの
ためにシステムが落ちたと言う報告が一つありました(驚くことでは
ありありませんが)。したがって、新しいライブラリをインストール
する前にシステムを再起動するのは良い考えで、なるべく更新中は走
らせるものを少なくしましょう。シングルユーザ・モードになるのが
良いでしょう。
最も簡単な修正は ldso.tgz を最新の Slackware 3.1 の配給の a4
disk から取り出してファイルをルート(/)ディレクトリから展開して、
そして、
sh install/doinst.sh
をしてインストールを完了して下さい。それに続けて、
ldconfig
注意! ライブラリのインストールの後に再コンパイルを行なう前に、
configure を走らせ直して make clean をしなければならないでしょう。
をします。もし、手でインストールしたければ、まず最初に dlfcn.h
ファイルをを /usr/include にインストールします。
次に、libdl.so.1.7.14 (あるいは、同様の最新のリリース)を /lib
にインストールし、そして、
cd /lib
ln -sf libdl.so.1.7.14 libdl.so.1
ln -sf libdl.so.1 libdl.so
を行ないます。あるシステム(GCC の設定によります)では、次のこと
を行なう必要があります:
cd /usr/lib
ln -sf /lib/libdl.so .
最後に、
ldconfig
します。
注意! ライブラリのインストールの後に再コンパイルを行なう前に、
configure を走らせ直して make clean をしなければならないでしょう。
1.5) backend のコンパイルがインクルードファイル dlfcn.h が見つからないということで終ります。
質問 1.3/1.4 の回答を御覧下さい。もし、a.out のシステムをお使
いでしたら、dlfcn.h を持つために、まず始めに dld パッケージ
(ほとんどの a.out のシステムに附属してない)をインストールし
なくてはならないことをお忘れにならないように。質問 1.11 を御覧
下さい。
1.6) GCC がオプション -fpic を無視したとぼやきます。
GCC の初期バージョンは、-fpic か -fPIC かのどちらかを受け入れ
ます。より最近のバージョン (V2.7.2?) では -fPIC を要求します。
ELF バージョンの Linux をお使いの場合は、-fPIC が既定値となり
ますので、このことは無視しても大丈夫です。
これは、src/Makefile.global を編集し、CFLAGS_SL を変更する
ことで訂正できます。
1.7) 次のような警告を受け取ります
warning: cast from pointer to integer of different size
これらは Postgres95 の初期バージョンで見受けられましたが、無視
しても大丈夫です。PostgreSQL V6.0 では、システムヘッダーファイ
ルに関する警告(これらも安全に無視できます)以外は、警告無しに
コンパイルできるはずです。
1.8) [SuSE-Linux 4.2-4.4] curses と termcap はどこにありますか?
SuSE-Linux 4.2 に ncurses はありますが curses はありません。
4.4 には両方あります。SuSE-Linux の termcap ライブラリもまた
/usr/lib の中ではなく /usr/lib/termcap の中にあります。
PostgreSQL (up to V6.0)
-----------------------
src/Makefile.custom の中で CURSES_LIB の値に -lncurses を設定
します(あるいはカスタマイズスクリプトを通して行ないます)。
次の行を src/Makefile.custom に加えます:
LDADD_BE+= -L/usr/lib/termcap
You may need to edit src/bin/psql/Makefile and change:
src/bin/psql/Makefile を編集して次の
ifeq ($(PORTNAME), linux)
LD_ADD+=
を
ifeq ($(PORTNAME), linux)
LD_ADD+= -ltermcap
に変更します。
PostgreSQL (V6.1)
-----------------
configure スクリプトは termcap ライブラリを /usr/lib/termcap の
中に捜す術を知りませんので、捜索する追加ディレクトリを尋ねられ
たときに、このディレクトリを指定するディレクトリの一つに含める
べきです。
もし、これでうまくゆかなければ(著者はそれを確かめるための
SuSE を持っていません)、configure を走らせた後に、
src/Makefile.global を編集して LDFLAGS の行(-lreadline の後ろ)
に -ltermcap を加えます。(あるいは、configure を走らせる前に、
src/Makefile.custom を修正することもできます。)
-lcurses を -lncurses に変えて、むしろ curses の代わりにあえ
て ncurses を使いたいと願うかも知れません
SuSE のいくつかのバージョンでは ncurses のみしか提供されません
ので、-lcurses を -lncurses に変えて curses の代わりに ncurses
を使う必要があるかもしれません。(SuSE 5.1 ではまさにそのことが
報告されてます。)
1.9) ld.so で問題が出るのはなぜでしょう?
ld.so で問題があれば、ELF の下でダイナミックローディングのた
めに別のライブラリが要求されます。それは、Linux のインストール
か(それに近い)アップグレードで変にしてしまったのです。
質問 1.3/1.4 の回答を御覧下さい。ld.so.x.y.z を /lib にインス
トールして ldconfig を走らせる必要があるかも知れません。
最も最近の ld のパッケージは 1.7.14 です。これを書いている時点
で ld の 1.8.x バージョンは実験版です。
1.10) `yy_flush_buffer undefined' というエラーが出るのはなぜでしょう?
これは本当に Linux に限ったことではありませんが、古い Linux
のインストーレションでは良くあります。PostgreSQL をコンパイル
するのにflex の最新版(2.5.2以降)を持っている必要があります。
ただし、flex 2.5.3 はバグがあります:質問 3.4 を参照下さい。
1.11) a.out システムでは PostgreSQL をどのようにコンパイルしますか?
最初に、dld ライブラリをインストールしなくてはなりません。これ
は、Sunsite:
LINUX/libs/dld.3.2.7.tar.gz
(ftp://sunsite.unc.edu/pub/Linux/libs/dld.3.2.7.tar.gz)
から入手できます。
Second, add the following line to src/Makefile.custom:
第二に、次の行:
LINUX_ELF=
を src/Makefile.custom に加えます。
(あるいはカスタマイズスクリプトを使います)
1.12) 次のように make が失敗するのはなぜですか:
yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y
make: /usr/bin/make: cannot execute binary file
これは、Postgres95 の初期バージョンの問題でした。PostgreSQL の
ための既定値は yacc ではなく bison -y を使うようになってます。
yacc は一般的に bison -y によって起動されるスクリプトとして実
装されています。ある理由で(make のあるバージョン?bash のある
バージョン?)make がこのスクリプトファイルを実行できません。
To correct this, simply edit src/mk/port/postgres.mk.linux
and, at the end of the file, change:
これを直すには、単純に src/mk/port/postgres.mk.linux を編集して、
そのファイルの終りの
# YACC = bison -y
を
YACC = bison -y
に変更します。
1.13) src/Makefile.global の中で X11_LIB の libsocket と libnsl への参照は何ですか?
これは 1.08 での(Sun Solaris に特有の)問題でした。1.09 と
6.0では直っています。
1.14) [DEBIAN] libtermcap はどこにありますか?
Debian Linux には termcap ライブラリは付いてこなくて、(その代
わりに terminfo を使う)ncurses を使います。Debian は
(SuSE-Linux とは違い --- 質問 1.8 を御覧下さい) libncurses
から libcurses へのリンクを用意してますので
src/bin/psql/Makefileの中の CURSES_LIB 変数は変更する必要はあ
りません。
src/bin/psql/Makefile を編集して、
ifeq ($(PORTNAME), linux)
LD_ADD+= -ltermcap
から
ifeq ($(PORTNAME), linux)
LD_ADD+=
へ変更をコメントで外す必要があるかもしれません。
1.15) [REDHAT] RPM での PostgreSQL は手に入りますか?
あります。Michal Mosiewicz さんが
(http://www.pdi.lodz.pl/~mimo) Intel 版の PostgreSQL V6.0 をご
親切に RPM にまとめてくれました。そして、
ftp://ftp.redhat.org/pub/Incoming/Postgres-6.0-1.i386.rpm
にアップロードされています。
これは、コンパイル済バージョンで、そこにあるソースの RPM は
著者が書きました。
1.16) Linux で開発バージョンをコンパイルしようとしたら、次のようなメッセージで失敗しました:
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
問題は Linux がこれらのインライン関数のためのプロトタイプを用
意していないことです。解決策は .../src/backend/storage/ipc
ディレクトリに行って Makefile を編集することです。
次の行、
CFLAGS+=$(INCLUDE_OPT)
を
CFLAGS+=$(INCLUDE_OPT) -Wno-error
に変更します。
../src/backend/storage/lmgr ディレクトリについても同様にします。
1.17) postgres をコンパイルするとき、gcc が signal 11 を出して落っこちました。
gcc: Internal compiler error: program cc1 got fatal
signal 11
これは、ハードウェア/メモリの問題です。PostgreSQL は大きなプ
ログラムですので、(PostgreSQL を構築したり、カーネルを構築し
たりするような)巨大な gcc のコンパイルにおいては、他の幾つか
のプログラムのようにメモリを圧迫し、その結果通常操作では起きな
いエラーに終ります。より小さな基本ソフトでもありますが、この
ような度合にまではハードウェアを圧迫しませんので、DOS/Windows
の下ではこのような問題に合うことは無いかも知れません。
より詳細な情報は:
http://www.bitwizard.nl/sig11
にあります。
この Sig11 FAQ によると、Cyrix プロセッサ上での Redhad 5.0 gcc
を走らせる時の特別な問題があるようです。詳細は上記の URL を御覧
下さい。
1.18) MkLinux で 6.1.1 をインストールできますか?
石井達夫さん が MkLinux DR2.1 update2 以降
で行ないました。小さなパッチは:
ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/mklinux.patch.gz
から入手できます。
[訳注
6.2 からはパッチは必要なくなりました。
]
1.19) メイクが終ったり、クラッシュするのはどうして?
gmake が早々に終ったり領域侵害で落ちたりすることが幾つか報告され
ています。後者の問題は gmake 3.74 で報告されたもので、3.76.1 に
アップグレードすることで解決されました。ところが、3.74 は他の人々
のセットアップでは正常に動いていることが知られています。とりあえ
ずは、この問題について報告を行なう前に、gmake を最新版にアップグ
レードしてみてください。
1.20) 486 や Pentium プロセッサ用の最適化はどのようにするのですか?
デフォルトのコンパイラ・フラグでは 486 や Pentium プロセッサー
のための最適化は行ないません。このような最適化を加えるには、
Makefile.custom を編集して:
CFLAGS+= -m486
または、(まだ、あまり走らせている人のいない新しいコンパイラでは)
CFLAGS+= -mpentium
または
CFLAGS+= -mpentiumpro
を加えます。
1.21) 時間を印刷しようとするとどうして変な結果になるのですか(例えば、 regression テストの 'timespan)?
時間は、'5 hours' のかわりに '4 hours 59 mins 60.00 secs' のように
なります。
この問題は Redhat 5.0 に含まれてくる glibc2 での問題です。glibc を
最新の v5.0/hurricane の RedHat バージョンにアップデートして下さい。
glibc-2.0.7 より前のものは問題がよくあるようです。
1.22) 6.3.2 をコンパイルした時に libpq のための共有ライブラリができないのはなぜですか?
v6.3.2 のための Linux コンフィグレーションは終る寸前で離脱をおこし
てました。ftp://postgresql.org/pub/patches/ に linux_elf パッチを
含む幾つかの修正が上がっていますので見て下さい。
1.23) コンパイルが F_BOOLIN, F_BOOLOUT および F_BYTEAIN が未定義であるとのメッセージで失敗するのはなぜですか?
実際のメッセージは以下のようなものです:
-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
これらの定数はどこにも定義されていそうも無いので、なぜそれが起こ
るかを知らなければ、これは奇妙なことです。
その答えは、メイクを始める前に cpp がパスにあることを確認すること
です。
Redhat 5.1 では、cpp は /usr/lib/gcc-lib/i386-redhat-linux/2.7.2.3
にあります。
------------------------------------------------------------------------
Section 2: 附属プログラムのコンパイル
2.1) pgtclsh をコンパイルする時、リンカが libX11 を捜せません。
次の行を src/Makefile.custom に加えて下さい。
X11_LIBDIR = /usr/X11R6/lib
------------------------------------------------------------------------
Section 3: 実行時の問題
3.1) createuser などのスクリプトを走らせる時、 _fUnKy_POSTPORT_sTuFf_
が未定義とのエラー報告を受け取ります。
これは、Postgres の V1.06-V1.07 でのバグで V1.08 以上では直っ
ています。
3.2) postmaster を走らせた後、システムが 'Bad system call(Core dumped)' と言います。
これは、共有メモリのサポートを組み込まないでカーネルのコンパイル
をしてしまったことを示します。Linux カーネルにこの機能を組み込ん
でコンパイルし直す必要があります。
3.3) Postmaster を走らせようとする時、次のようなエラーを受け取るのはなぜですか?
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.
/dev/null ファイルのアクセス権が間違っています。
ls -l /dev/null で次のように:
crw-rw-rw- 1 root wheel 2, 2 Oct 8 18:41 /dev/null
表示されるべきです。
次のコマンドで:
chmod a+rw /dev/null
アクセス権を訂正してください。
3.4) createuser が動かないのはなぜですか?
GNU flex の バージョン 2.5.3 と createuser で問題があります。
V2.5.2 にダウングレードするか、V2.5.4 にアップグレードするか、
あるいは、V2.5.3 に doc/README.flex で提供されるパッチを施して
下さい。V2.5.4 は:
ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz
から入手できます。
3.5) 次のようなエラーを受け取るのはなぜですか:
IpcMemoryCreate: memKey=155356396 , size=760632 ,
permission=384IpcMemoryCreate: shmget(..., create, ...)
failed: Invalid argument
Linux カーネルに IPC サポートの組み込みをしていません。この
オプションを生かして、カーネルを構築し直す必要があるでしょう。
3.6) どうして、psql が次のように失敗するのですか:
psql: can't load library 'libpq.so.1'
psql は libpq ライブラリに動的に結合するようにコンパイルされています。
これを解決するには、root でログインして、ファイル
/etc/ld.so.conf
を編集します。PostgreSQL ライブラリのディレクトリ(PostgreSQL
をインストールしたところの lib サブディレクトリ)の名前をそのファ
イルの終りに一行加えます。そうして、
/sbin/ldconfig -v
を走らせます。
あるいは、(もし、root になれなければ)、LD_LIBRARY_PATH 環境変
数を使っても構いません。
LD_LIBRARY_PATH 環境変数は、共有ライブラリが捜されるパスをコロ
ンで区切ったたリストです。このリストは、ldconfig により指定さ
れたライブラリの前に捜されます。
この指定は、bash では:
export LD_LIBRARY_PATH='PathToPGSQL'/lib
のようにし、また、tcsh を使っている場合は:
setenv LD_LIBRARY_PATH 'PathToPGSQL'/lib
として、'PathToPGSQL' を適切な PostgreSQL の最上部のパスに置き
換えます。
ldd コマンドは動的結合の実行モジュールにその実行モジュールが
依存しているすべての共有ライブラリのパスをリストするのに使うこ
とができることに注意して下さい。
3.7) その他の奇妙な振舞。
全く動作しない時以外にどんな兆候となるかはわかりませんが、動的
ローダが libpq ライブラリの正しいバージョンをロードすることに
注意を払う必要があることだけは明らかです。もし、古いバージョン
がライブラリパス(例えば、/usr/lib)のどこかにあると、ロードする
つもりの新しいバージョンのかわりにロードされてしまうかもしれま
せん。古いバージョンがパスにないのを確かめるとともに、Q3.6 の
ライブラリのロードについての詳細を見て下さい。
3.8) PostgreSQL が走っている時にシステムをシャットダウンすると、
Linux はリブートの時にいつもディスクを fsck します。
この事例が幾つか報告されていますが、それは INSTALL ドキュメン
トの提案に従って /etc/inittab から PostgreSQL を走らせた結果の
ように見受けられます。
ですので、postmaster を rc スクリプトから始動することをお勧め
します。Slackware系のリリースでは、/etc/rc.d/rc.local を修正し
て postmaster を始動すると良いでしょう。RedHat系のリリースでは、
SysV スタイルのスクリプトを /etc/rc.d/init.d 枠組ファイルを基
に /etc/rc.d/rc3.d に作るべきです。
ファイルの例が contrib/linux/postgres.init にあります。
ここにも、必要に応じて修正すべきですが、John Robinson
が提供する、もう一つのファイルの例が
あります。
#!/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
3.9) regression テストの問い合わせ 32 にとても時間がかかるのはなぜですか?
This is due to a bug in regression scripts which only happens
on linux boxes. There are two workarounds as far as I know
(information from Tatsuo Ishii ):
これは、linux マシンでのみ起きる regression スクリプトのバグに
よるものです。私の知る限りでは、(石井達夫さん
からの情報によると):
1. regress.sh の中で次の:
time postgres -texecutor -tplanner -Q bench < bench.sql
を
postgres -texecutor -tplanner -Q bench < bench.sql
に変える。
2. テストを走らせた後で、bench.out の終りに近い、たとえば次の
ような行:
85.86user 114.47system 4:49.20elapsed 69%CPU (0avgtext+0avgdata 0maxresident)k
を取り除いてから、
sh ./perquery < bench.out > & bench.out.perquery
を実行します。
3.10) ある date/time の演算で、以下のような妙な丸めとなるのはなぜですか?
2.0.7 よりも前の 新 glibc2 を走らせていますね。ライブラリをアップ
デートして下さい。
次のページ
前のページ
目次へ