> За счет чего достигается durability в PostgreSQL? (Go)

Уровень: middle · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: InDrive

Стек: Go, PostgreSQL

> Пример ответа

Durability в PostgreSQL обеспечивается в первую очередь механизмом Write-Ahead Logging (WAL). Все изменения данных сначала записываются в журнал предзаписи (WAL) на диск, и только после этого фиксируются в самих таблицах (data pages). При сбое системы PostgreSQL при восстановлении (recovery) проигрывает WAL-записи, восстанавливая все завершённые транзакции, что гарантирует сохранность данных.

Ключевые элементы:

  • Синхронная фиксация WAL: По умолчанию параметр synchronous_commit = on заставляет сервер ждать, пока WAL-запись транзакции будет физически записана на диск (с помощью fsync), прежде чем вернуть клиенту подтверждение COMMIT.
  • Надёжное хранение: PostgreSQL использует fsync для сброса буферов ОС на диск, а также поддерживает контрольные суммы страниц (data checksums) для обнаружения повреждений.
  • Репликация: В кластерных конфигурациях (например, streaming replication) WAL передаётся на реплики, что добавляет дополнительный уровень защиты от потери данных.

Для Go-разработчика важно помнить: если вы используете database/sql с PostgreSQL, каждая успешная транзакция (COMMIT) гарантирует durability только при стандартных настройках. Отключение synchronous_commit ускоряет запись, но может привести к потере последних транзакций при сбое.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью