ベアキャッt’s diary

趣味、猫、たまに仕事の話

【日記】【技術】20231016_PostgreSQL-UNLOGGEDテーブルにご用心

今日は短め

 

PostgreSQLには、UNLOGGEDというオプションが存在するが、これを使うときは確固たる意志を持って使うべき、という話。

 

UNLOGGEDオプションを使う理由として、高速化が第一に挙げられると思いますが、大体の場合、テンポラリーテーブル的な勢いで使うのがほとんどだと思います。

が、稀に業務用テーブルに利用していると、痛い目を見るのでご用心という話。

 

公式には下記のように書いている。

UNLOGGED

指定された場合、テーブルはログを取らないテーブルとして作成されます。 ログを取らないテーブルに書き出されたデータは先行書き込みログ(第30章参照)には書き出されません。 このため通常のテーブルより相当高速になります。 しかしこれらはクラッシュ時に安全ではありません。 クラッシュまたは異常停止の後、ログを取らないテーブルは自動的に切り詰められます。 またログを取らないテーブルの内容はスタンバイサーバにコピーされません。 ログを取らないテーブル上に作成されたインデックスはすべて同様に、ログを取らないようになります。

これを指定すると、(ID列またはシリアル列用の)ログを取らないテーブルと一緒に作成されたシーケンスも、ログを取らないものとして作成されます。

https://www.postgresql.jp/document/15/html/sql-createtable.html

 

かなり乱暴な短縮形ですが

・ログを取らないので早いです!

・データベースがクラッシュしたときはTruncateされますw

クラスタ構成を取っていても、スタンバイ側にはデータをコピーしません

 

データベースがクラッシュした際のTruncate、結構怖いですよねw

テンポラリーテーブルとして使っているなら問題ナッシングですが、普通に業務テーブルでUNLOGGEDであると、相当危険なので採用しないのが良いと思います。

 

そんなところです。