PostgreSQL で文字列カラムに文字列をアペンドしているのに、エラーも出ないのに値が更新されない場合のチェックポイント。
基本の方法
PostgreSQLで文字列カラム(text など)に値をアペンドする時はこのような感じにする。
UPDATE mytable
SET mycolumn = mycolumn || 'アペンドする文字列'
;
「||」が文字列連結を意味する。
これはいかにも問題が無さそうで、エラーも吐かず更新しました(UPDATED)と出るのだが、実際には値が更新されない事がある。なぜか?
NULL値の場合に空文字列を得る
カラムの元の値が NULL だとエラーも吐かないが更新もできないらしい。という事で、以下のように、カラムの内容が NULL だったら空文字列を返すように変更すると期待通りに動作する。
UPDATE mytable
SET mycolumn = COALESCE(mycolumn, '') || 'アペンドする文字列'
;