[ Postgres ] 文字列と NULL は比較演算子で比較できない ( is null )

Pocket

今まで 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 は使わずにデータベースやテーブルも作成していましたが、なぜかレコードのデータの更新が全くできません。

調べてみると、主キーが設定されていればレコードの追加や更新ができるとのことです。テーブルを右クリックして、[新規オブジェクト] – [新しい主キー] から主キーを設定すると、あっさり追加や更新ができるようになりました。

pgAdmin Ⅲ主キーを設定してデータを修正

pgAdmin Ⅲ主キーを設定してデータを修正

スポンサーリンク


Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>