[pgsql-jp: 34248] Re: 7.2.3から7.4.6 にバージョンアップした際にエラーになるSQLへの対応について

Takao Kato sirius @ jp.fujitsu.com
2004年 11月 5日 (金) 11:41:55 JST


加藤@川崎です。

> ●postgres7.2.3では
> # select count(*) from table1 where col1='';
>  count
> -------
>  0
> (1 row)
> #空文字列は0として評価されていた
> 
> ●postgres7.4.6
> # select count(*) from table1 where col1='';
> ERROR:  invalid input syntax for integer: ""

まぁ、数字(INT)なんですから空"文字列"と比較しても...って話があります。
どの本かは忘れましたが、

	NULLはNULLであり、文字列の ''(空) とか数字の 0 ではない!

なんて名言もありますし。



本題に戻りますが、SQL書き換え禁止でしょうか? 書き換え可能なら

=> select 〜 from table1 where col1 is not null;

でこと足りるかと思いますが。書き換え禁止となると.....思いつきません。 _o_

PHP上で数字/文字列操作すると言う条件で、SQLの視点だけで見た場合にcol1
を「文字列」として扱ってしまえるのであれば方法がないわけではないです。
かな〜り力業になりますけど....
# もちろんフルバックアップとってからですよ ^^;

・根っ子から書き換える方法
  1.pg_dumpall とかでバックアップをとる
  2.書き換える
  3.全部書き戻すなら =====> dropdb
    一部テーブルだけなら => drop table
  4.書き戻す

・ALTER TABLEで書き換える方法
  1.ALTER TABLE で col1 => b_col1 に変更
  2.ALTER TABLE で col1(CHAR/VARCHAR/TEXT)を追加
  3.UPDATE で b_col1 の値を to_char で変換して col1 に挿入(コピー)


他のエレガント(!?)なやり方があるなら...知りたいです(汗)

ではでは
-------------------------------------------------------------
加藤@川崎



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