電子書籍の厳選無料作品が豊富!

PostgreSQL の 7 から8 へマイグレーション作業をしている者です。

int型で not null制約のあるカラム「id」 の値から、''(空)であることを判定する時、
version7 では、
$sql = "select * from tbl_name where id <> ''";
のSQL文で動いていたようですが、
version8 では、
型の扱いが厳しくなった訳か、syntax error となります。

この場合version8 では、
$sql = "select * from tbl_name where id <> 0";
が、
''(空)であることを判定するSQL文と考えてよいでしょうか?

ご教授よろしくお願いします。

A 回答 (2件)

>PostgreSQL の 7 から8 へ



7とか8とかでは、範囲が広すぎます。もっと具体的に、バージョンを明記しましょう。

>型の扱いが厳しくなった訳か、syntax error となります。

型の扱いの問題なら、syntax errorでなく、別のエラーになるように感じます。
具体的なSQLの記述、エラーメッセージの内容といったものを示せませんか?
予約語の追加といったものなら、syntax errorも考えられますけど。

ともかく、記載内容が具体的でなく、根拠の疑わしい推測だけなので、他人が適切に回答するのは困難です。

この回答への補足

versionは、7.2.2 から 8.1.11 への移行です。

エラーは、
ERROR: invalid input syntax for integer: ""
でした。

よろしくお願い致します。

補足日時:2009/03/18 10:43
    • good
    • 0
この回答へのお礼

大変失礼しました。
書き直します。

お礼日時:2009/03/18 10:42

ver7.3で、整数フィールドへの入力に空文字列を指定することが出来なくなったようです。

それ以前は空文字列は0と解釈されていたそうです。
参考URLのページの「バージョン 7.3 への移行」節に説明が有ります。

したがって、元のver7.2.2のDBでは、SQLでは空文字列を格納するように記述されていても実際には0が格納されていたのだと思います。
おっしゃる通り、ver8.1.1ではWHERE句で「[数値項目] <> 0」とすることで元と同じ動作をすると思われます。

参考URL:http://www.postgresql.jp/document/pg837doc/html/ …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。参考URLもつけて頂いてありがとうございます。

お礼日時:2009/03/19 14:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!