次のページ 前のページ 目次へ

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

次のページ 前のページ 目次へ