3日連続Postgres小ネタ。別にひとりアドベントカレンダーをやっているわけではない。 TL;DR 論理削除は本質的にリレーショナルモデルと相性が悪い 論理削除の一実現手法として削除済テーブル(=履歴テーブル)がある PostgresならRETURNING+CTEでできる 履歴テーブル リレーショナルデータベースにおいて、「データが削除」を表現する方法として、物理削除と論理削除と呼ばれる2つの方法がある。物理削除は、文字どおり「レコード自体を物理的に削除する」ことを指し、論理削除は、「実際には削除しないが、削除されたということをデータを使って表現する」こと。例えば、is_deleted という削除フラグをカラムとして持たせ、これが true になっているレコードは削除済とみなす。 長い歴史を積み重ね成熟してきたリレーショナルデータベースにおいて、いまなお論理削除が議論の種になる。なぜか。