[pgsql-jp: 33346] Re: Postgresql7.4.2 char列に対するmax関数の動作が7.3.3と異なる

ISHIDA Akio iakio @ mono-space.net
2004年 6月 23日 (水) 12:00:59 JST


こんにちは。石田@苫小牧市です。

On Wed, Jun 23, 2004 at 02:37:40AM +0900, aya wrote:
> PostgreSQL7.3.3で正常に動いていたecpgプログラムを
> PostgreSQL7.4.2にしてコンパイルしたところ動きが異なりました。
> 
> not null制約のあるchar(1)型の列に対し、max関数で問合せを実行したところ、
> 見つかるはずのデータがブランクの場合、ホスト変数にブランクが入りません。
> sqlcodeを見ると0が戻っているのでデータは1件とれていると思います。
> 
> Postgresql7.3.3の場合、ホスト変数に正常にブランクが入ります。
> 
> 仕様が変わったのかと思いバージョンがあがったときの
> 変更点を一通りみたのですが、見つけることが出来ませんでした、、
> char型の列に集計関数を使うのがおかしいと言われると
> 確かにそうかと思うのですが、スペース以外の場合は
> 値が戻ってくるので、動くようにも思えます。
> バグのように感じているのですが、どうでしょうか、、、

char(n)型での空白の扱いが 7.3 と 7.4 で違っていることが
原因かもしれません。

====7.3.6
=# SELECT '<' || ' '::char(5) || '>';
 ?column? 
 ----------
  <     >
  (1 row)

====7.4.2
=# SELECT '<' || ' '::char(5) || '>';
 ?column?
 ----------
  <>
  (1 row)

7.4のリリースノートでは、
http://www.postgresql.jp/document/pg743doc/html/release-7-4.html
====
char(n) から varchar(n) もしくは textへの変換時、最後の空白は除去される
ようになりました。 これは、ほとんどのユーザが常にそうなってほしいと期待
している動作です。 
====
とありますが、この辺の話なんでしょうか? > 識者の方



pgsql-jp メーリングリストの案内