PostgreSQL >=V6.1 のためのよくある質問(FAQ)

Anderw C.R. Martin

martin@biochem.ucl.ac.uk

桑村 潤 - 日本語訳

juk@rccm.co.jp

Jun 19 1998

PostgreSQL の FAQ Linux 特定版 - 通常の FAQ と併せてお読み下さい。


訳注: この文書の最新版は、 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. PostgreSQL のコンパイル

  2. 附属プログラムのコンパイル

  3. 実行時の問題

1. PostgreSQL のコンパイル
1.1. src/Makefile.globalsrc/Makefile.custom には何を変更すればよいでしょうか、また、その他に必要な変更は ありますか?
1.2. libreadline が見つからないという問題はなぜ起こりますか?
1.3. [REDHAT] libdldlfcn.h が見つからないという問題はなぜ起こりますか?
1.4. [SLACKWARE 3.1] libdldlfcn.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] cursestermcap はどこにありますか?
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_LIBlibsocketlibnsl への参照は 何ですか?
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)? 時間は、'5 hours' のかわりに ' 4 hours 59 mins 60.00 secs' のように なります。
1.22. 6.3.2 をコンパイルした時に libpq のための共有ライブラリ ができないのはなぜですか?
1.23. コンパイルが F_BOOLIN, F_BOOLOUT および F_BYTEAIN が未定義であるとのメッセージで失敗する のはなぜですか?
2. 附属プログラムのコンパイル
2.1. pgtclsh をコンパイルする時、リンカが libX11 を捜せません。
3. 実行時の問題
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 の演算で、以下のような妙な丸めと なるのはなぜですか?

1. PostgreSQL のコンパイル

1.1. src/Makefile.globalsrc/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.customreadline オプションを活性化しないように しましょう。

Debian Linux では(FreeBSD のように) readline が インストールさ れて来ることをここに記しておきます。

1.3. [REDHAT] libdldlfcn.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] libdldlfcn.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] cursestermcap はどこにありますか?

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

    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

から入手できます。

第二に、次の行:
  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 がこのスクリプトファイルを 実行できません。

これを直すには、単純に src/mk/port/postgres.mk.linux を編集して、 そのファイルの終りの
  # YACC = bison -y
  YACC = bison -y
に変更します。

1.13. src/Makefile.global の中で X11_LIBlibsocketlibnsl への参照は 何ですか?

これは 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 にあります。

2. 附属プログラムのコンパイル

2.1. pgtclsh をコンパイルする時、リンカが libX11 を捜せません。

次の行を src/Makefile.custom に加えて下さい。

  X11_LIBDIR = /usr/X11R6/lib

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 を走らせた結果の ように見受けられます。

ですので、postmasterrc スクリプトから始動することをお勧め します。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 にとても時間がかかるのはなぜですか?

これは、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 を走らせていますね。ライブラリをアップ デートして下さい。

(sgml conversion, y.senda, ysenda@pop01.odn.ne.jp, 2001/09)