このリリースは 7.4.13 からの修正リリース(2006/10/16リリース)です。
これは前バージョンからの累積的な修正をまとめたリリースで、細かい問題が多数修正されています。いわゆるセキュリティリリースではありませんが、中には特殊ケースでクラッシュする可能性など、大きな問題となりうる修正もあるためアップグレードをお勧めします。
以下に変更点をまとめます。各項目の末尾に適用されるバージョンを記載しております。本ドキュメントは PostgreSQL のリリースノート/HISTORY ファイルを元に作成しています。
PostgreSQL 7.4.13 から 7.4.14 への変更点
8.1.5、8.0.9、7.4.14、7.3.16 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。
-
UPDATE 文の中に集約関数を記述できないようになりました。このような構文は SQL 標準で許されていない上、予期しない挙動を招くことがありました。特に 8.1 における mix/max のようなインデックス検索に展開されるケースではクラッシュを発生させます。(8.0)(8.1)
tanida=# begin;update branches set bbalance=max(bbalance) ; BEGIN UPDATE 1 tanida=# select * from branches ; bid | bbalance | filler -----+------------+-------- 6 | 1001561116 |<-ここだけが更新されている 4 | 971722696 | 5 | 985001213 | 2 | 1001561116 | 9 | 985002475 | 3 | 989076505 | 8 | 990823296 | 7 | 991785852 | 10 | 492277598 | 1 | 491236539 | (10 rows) tanida=# begin;update branches set bid=max(bid)+1 ; BEGIN server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.
- JDBC等で利用している拡張問い合わせプロトコル(extended query protocol)で、COMMITやROLLBACKの実行時間を取得するときにクラッシュする問題を修正しました。(8.1)
- AFTER を指定したトリガと、複数行返す関数が関連する場合に、間違ったタイミングでトリガが発生する問題を修正しました。(8.1)(9.0)
- unknown 型から anyarray 型にキャストされるときに、クラッシュする可能性のある問題を修正しました。(8.1)(8.0)(7.4)
- ALTER TABLE ... TYPE 構文で、NOT NULL 制約を再チェックするようになりました。USING 句による変換によって、NOT NULL 制約の例外を作ることが可能でした。(8.1)(8.0)
- ルールの WHERE 句上に NEW(新しい行)の値を指定した場合にクラッシュする問題が修正されました。(8.0)
- string_to_array() 関数で、分割のための文字列が重なってマッチする場合にエラーになってしまう問題が修正されました。(8.1)(8.0)(7.4)
(8.1.4) tanida=# select string_to_array('123xx456xxx789', 'xx'); ERROR: negative substring length not allowed
- to_timestamp() 関数のAM/PMを含むフォーマットが正しく変換されない問題が修正されました。(8.1)
- autovacuum で、内部で vacuum(analyze無し)を実行した後、analyze を実行するタイミングが狂う問題が修正されました。(8.1)
-
psql の d コマンドのパターンマッチングで、'^foo|bar$' のような指定をした場合 ^foo が対象にかかってしまい、結果が正しくない問題が修正されました。(8.1)(8.0)(7.4)(7.3)
tanida-# d '^branches|accounts$' Table "public.accounts" (snip) Table "public.branches" (snip) Index "public.branches_pkey" <- これは要らないはず (snip)
- ecpg でいくつかクラッシュするケースが修正されました。(8.1)(8.0)
- contrib/dblink で、実行時のカーソル数カウントのリセット処理が入りました。(8.1)(8.0)(7.4)(7.3)
- contrib/ltree でインデックスが破損する問題が修正されました。(8.1)(8.0)(7.4)(7.3)
- contrib/dbmirror でバックスラッシュのエスケープが不適当な問題が修正されました。(8.1)(8.0)(7.4)(7.3)
- Win32pg_dump で、一部フォーマットにおいて 'X:¥'(各ドライブのルート)に書き込み権限がないときにダンプできない問題を修正しました。(8.1)(8.0)
- win32 の stats collector が高負荷時にクラッシュしてしまう問題が修正されました。(8.1)(8.0)
- Win32 の statement_timeout の精度が100マイクロ秒から1マイクロ秒になりました。(8.1)(8.0)
- オンメモリのハッシュテーブルのメモリ消費量が減少しました。(8.1)
- ビットマップスキャンの性能改善が行われました。(8.1)
- 各種 "CREATE OR REPLACE" 文が複数回実行したときに失敗することがある問題が修正されました。 (8.1)(8.0)(7.4)(7.3)
-
plpgsql で "return" という単語を使っていた場合、勝手に他の単語に置き換えられてしまうことがある問題を修正しました。(8.1)(8.0)(7.4)(7.3)
tanida=# create or replace function foo() returns void language plpgsql as ' tanida'# begin tanida'# perform return foo bar; tanida'# end'; ERROR: syntax error at or near "foo" at character 13 QUERY: SELECT foo foo bar
- Borland C++,MSVC/Windows のコンパイル時に必要な修正が入りました。(8.1)
- Intel cc,AIX xlc で適切なコンパイラのコマンドオプションが選ばれるように修正されました。(8.1)(8.0)
- SSL 使用時のメモリリーク問題が解消されました。(7.3)
不具合の修正
tanida=# create table hoge (i int not null); CREATE TABLE tanida=# insert into hoge select generate_series(1,3); INSERT 0 3 tanida-# d hoge Table "public.hoge" Column | Type | Modifiers --------+------+----------- i | text | not null tanida=# select i is null from hoge; ?column? ---------- t t t (3 rows)