PostgreSQL で文字列カラムに文字列をアペンドする方法


PostgreSQL で文字列カラムに文字列をアペンドしているのに、エラーも出ないのに値が更新されない場合のチェックポイント。

基本の方法

PostgreSQLで文字列カラム(text など)に値をアペンドする時はこのような感じにする。

UPDATE mytable 
SET mycolumn = mycolumn || 'アペンドする文字列'
;

「||」が文字列連結を意味する。

これはいかにも問題が無さそうで、エラーも吐かず更新しました(UPDATED)と出るのだが、実際には値が更新されない事がある。なぜか?

NULL値の場合に空文字列を得る

カラムの元の値が NULL だとエラーも吐かないが更新もできないらしい。という事で、以下のように、カラムの内容が NULL だったら空文字列を返すように変更すると期待通りに動作する。

UPDATE mytable 
SET mycolumn = COALESCE(mycolumn, '') || 'アペンドする文字列'
;