PostgreSQL 7.0.2 パッチについて 石井達夫 このディレクトリには PostgreSQL 7.0.2 (http://www.postgresql.org/) のパッ チが格納されています.インターネット上では, ftp://ftp.sra.co.jp/pub/cmd/postgres/7.0.2/patches/ から入手できます. ********* 方法1: 個々のパッチを当てる 自分で必要なパッチを当てるのが「通」なのですが:-),全部のパッチを当て るための shell script "PATCH" が用意されていますので,とにかく全部パッ チを当てたい,という方はご利用下さい. postgresql-7.0.2 のソースを展開し,そこ(postgresql-7.0.2 ディレクトリの 一つ上,すなわち postgresql-7.0.2 が見えている状態)で,以下を実行します. % sh /foo/bar/PATCH もちろん /foo/bar は PATCH のあるフルパスに置き換えて下さい. *注意* 1. PATCH スクリプトは,PATCH とパッチファイルが同じディレクトリ内にあ ることを前提としています. 2. Solaris 付属の patch コマンドは使えません.GNU patch を入手して下さい. ********* 方法2: パッチを1個にまとめた "jumbo.patch" を適用する 方法1が面倒な人は,個々のパッチを1つにまとめた "jumbo.patch" を適用す ることができます.ソースディレクトリ(postgresql-7.0.2/)があるところで, gunzip -c jumbo.patch.gz|patch -p0 として下さい.もしくは, cd postgresql-7.0.2 gunzip -c jumbo.patch.gz|patch -p1 です.jumbo.patch.gz は jumbo-日付.patch.gz にリンクしており,常に最新 のパッチを指すようになっています. 取得したファイルの内容が壊れていないかどうかは jumbo.pach.gz.md5 の中 に書かれている md5 チェックサムの値で分かります.FreeBSD なら md5, Linux なら md5sum コマンドで確認できます.ファイルサイズが合っているに も関わらず,ダウンロードしたファイルをうまく展開できない場合は,チェッ クサム (= の右側の暗号のような文字列)が一致するかどうか確認して下さい. 一致していなければファイルが壊れています.お使いのブラウザの設定などを 確認して下さい.(何件か Internet Explorer を使ってダウンロードした際の 障害が報告されています) ********* 方法3: パッチが適用済のソース一式を持って行く 方法2すら面倒な人はパッチが適用済のソースを持って行って下さい.ファイル名は postgresql-7.0.2-patched.tar.gz です.postgresql-7.0.2-patched.tar.gz は postgresql-7.0.2-patched-日付. tar.gz にリンクしており,常に最新のファイルを指すようになっています. 取得したファイルの内容が壊れていないかどうかは postgresql-7.0.2.patched.tar.gz.md5 の中に書かれている md5 チェックサ ムの値で分かります.FreeBSD なら md5, Linux なら md5sum コマンドで確認 できます.ファイルサイズが合っているにも関わらず,ダウンロードしたファ イルをうまく展開できない場合は,チェックサム (= の右側の暗号のような文 字列)が一致するかどうか確認して下さい.一致していなければファイルが壊 れています.お使いのブラウザの設定などを確認して下さい.(何件か Internet Explorer を使ってダウンロードした際の障害が報告されています) ------------------------------------------------------------------------ 改定履歴: 2000/10/25: to_char.patchtch.gz を追加 2000/09/02: recount.patch.gz を追加 2000/08/20: identifier.patch.gz, pgaccess.patch.gz を追加 2000/07/10: select_for_update.patch.gz を追加 2000/06/26: 本ファイル新規作成, vacuum.patch.gz, lobj.patch.gz を追加 ------------------------------------------------------------------------ 個々のパッチの説明です. 1. vacuum.patch.gz vacuum しながらデータを更新すると,不可解なエラーメッセージが出る. たとえば, ERROR: Function ' p(int4)' does not exist Unable to identify a function that satisfies the given argument types You may need to add explicit typecasts 更に,場合によってはバックエンドが落ちる.この問題を解決するパッチ. 本家の Tom Lane が作成. 2. lobj.patch.gz large objectに対してlo_seek しながら部分書き換えを行うと結果がおか しくなる.この問題を解決するパッチ.本家の Tom Lane が作成. 3. select_for_update.patch.gz select for update しながら insert すると,primary key or unique 指 定があるにも関わらず重複データが挿入できてしまうバグを修正するパッチ. 井上さん作成.[pgsql-jp 15605][pgsql-jp 15933]参照. 4. identifier.patch.gz 長すぎるテーブル名,シーケンス名,カラム名は31バイトに縮められるが, そのときにマルチバイト文字を考慮していないバグを修正.石井が作成. [pgsql-jp 16436]参照. 5. pgaccess.patch.gz pgaccess のテーブルブラウザで,kinput2を使って日本語入力を可能にする パッチ.石井が作成.[pgsql-jp 16781]参照. 6. refcount.patch.gz バックエンドが終了するときに,トランザクションをアボートさせないため, 共有メモリのバッファのリファレンスカウントが残ってしまうバグを修正. この場合,vacuum 実行時に NOTICE: FlushRelationBuffers(all_flows, 500237): block 171439 is referenced (private 0, global 1) FATAL 1: VACUUM (vc_repair_frag): FlushRelationBuffers returned -2 のようなエラーが出るのが典型的な症状.本家の Tom Lane が作成. 7. psql.patch.gz psqlの"\l+"コマンドでコアダンプするバグを修正. [pgsql-jp 17297]参照.大田さんの指摘で石井がパッチを作成. 8. plpgsql.patch.gz PL/pgSQLで日本語の列名などのidentifierが使えないバグを修正. [pgsql-jp 17317]参照.石井が作成. 9. to_char.patch.gz n が float/4/8, numericなど,pass-by-reference 型かつsum(n)がNULL を返す場合,select to_char(sum(n),'999') from t1; でバックエンドが落ちるバグを修正.本家 Karel Zak 氏 作成. ------------------------------------------------------------------------ このパッチに関する質問などは pgsql-jp ML でお願いします. また,http://www.sra.co.jp/people/t-ishii/PostgreSQL/ でも情報が提供さ れています.