【日記】【技術】20231016_PostgreSQL-UNLOGGEDテーブルにご用心
今日は短め
PostgreSQLには、UNLOGGEDというオプションが存在するが、これを使うときは確固たる意志を持って使うべき、という話。
UNLOGGEDオプションを使う理由として、高速化が第一に挙げられると思いますが、大体の場合、テンポラリーテーブル的な勢いで使うのがほとんどだと思います。
が、稀に業務用テーブルに利用していると、痛い目を見るのでご用心という話。
公式には下記のように書いている。
UNLOGGED
指定された場合、テーブルはログを取らないテーブルとして作成されます。 ログを取らないテーブルに書き出されたデータは先行書き込みログ(第30章参照)には書き出されません。 このため通常のテーブルより相当高速になります。 しかしこれらはクラッシュ時に安全ではありません。 クラッシュまたは異常停止の後、ログを取らないテーブルは自動的に切り詰められます。 またログを取らないテーブルの内容はスタンバイサーバにコピーされません。 ログを取らないテーブル上に作成されたインデックスはすべて同様に、ログを取らないようになります。
これを指定すると、(ID列またはシリアル列用の)ログを取らないテーブルと一緒に作成されたシーケンスも、ログを取らないものとして作成されます。
https://www.postgresql.jp/document/15/html/sql-createtable.html
かなり乱暴な短縮形ですが
・ログを取らないので早いです!
・データベースがクラッシュしたときはTruncateされますw
・クラスタ構成を取っていても、スタンバイ側にはデータをコピーしません
データベースがクラッシュした際のTruncate、結構怖いですよねw
テンポラリーテーブルとして使っているなら問題ナッシングですが、普通に業務テーブルでUNLOGGEDであると、相当危険なので採用しないのが良いと思います。
そんなところです。