今まで Postgres を使用したことは一度もありませんでしたが、文字列と null の比較は Postgres のバージョンによって違うようです。
スポンサーリンク
削除フラグの判定
ある機能の移植作業を行ったときですが、よくある削除フラグのようなもので、削除されているレコードには 1 が、 そうでない場合には、1 以外という仕様のテーブルが定義されていました。
移植前のソースコードには 削除フラグ <> ‘1’ のように条件が付いていましたが、移植前のデータベースも同じ Postgres なのに動作しません。動作しないバージョンは Postgres 9.3 です。
デバッグすると、値が null の場合にうまく動かないようです。以下のように SQL を変更すると期待する動作となりました。文字列と null を比較しても真とはならないようです。どこかで聞いた話のような気もします。
-- 期待通りに動作しないSQL select * from table1 where (削除フラグ <> '1') -- 期待通りに動作するSQL select * from table1 where (削除フラグ is null or 削除フラグ <> '1')
pgAdmin Ⅲ でテーブルの内容を修正する
もう1つ小ネタです。おそらく知っている方のほうが多いとは思いますが。。。
今回、pgAdmin Ⅲ を始めて使用しましたが、とても使い易かったです。そして、このツールで SQL は使わずにデータベースやテーブルも作成していましたが、なぜかレコードのデータの更新が全くできません。
調べてみると、主キーが設定されていればレコードの追加や更新ができるとのことです。テーブルを右クリックして、[新規オブジェクト] – [新しい主キー] から主キーを設定すると、あっさり追加や更新ができるようになりました。