PostgreSQLグローバルデベロップメントグループは2月14日(米国時間)、「PostgreSQL: PostgreSQL 11.2, 10.7, 9.6.12, 9.5.16, and 9.4.21 Released!」において、PostgreSQL最新版の公開を伝えた。今回のリリースでは、過去3カ月で報告された70以上のバグが修正されているほか、fsync()システムコールを利用する時の挙動が変更されている。

公開されたプロダクトおよびバージョンは次のとおり。

  • PostgreSQL 11.2
  • PostgreSQL 10.7
  • PostgreSQL 9.6.12
  • PostgreSQL 9.5.16
  • PostgreSQL 9.4.21
  • PostgreSQL - The world's most advanced open sorce database

    PostgreSQL - The world's most advanced open sorce database

fsync()システムコールが提供されているオペレーティングシステムで設定なども含めて利用可能な状況になっている場合、PostgreSQLはfsync()システムコールを使って確実にデータを書き込もうとするタイミングがある。しかし、これまでの振る舞いではfsync()が書き込みに失敗した後のハンドリングに問題があったとされている。

これまでの振る舞いではfsync()が書き込みできなかった場合、失敗したことを返すとともにバッファデータから書き込まれる予定だったデータがフラッシュされるケースがあった。この状態で再度PostgreSQLがfsync()を呼び出すと、fsync()は成功を返すことになるが、実際にはデータが書き込まれていないためデータが整合性の取れない状態になる危険性があるとしている。

今回のバージョンからfsync()の処理に失敗した場合、次の処理でfsync()をコールせずにパニックするように処理が変更されたと説明がある。こうした処理を行うことで、PostgreSQLはWAL (Write-Ahead Log; ログ先行書き込み)からデータを復元して書き込みを実施できるようになる。

今回の修正はベストな代替案とは言えないものの、現在のところほかに選択肢がなく、現在のところ、この実装で問題が発生することはほとんどないとしている。