строки в таблицу? Сразу или через файл лога? Или это происходит паралельно?
Сам бэкенд (процесс к которому подключен пользователь) пишет в память(shared buffers), где лежат куски таблицы, и в журанал. При этом запись в журнал уходит на диск и бэкенд дожидается fsync-а. После этого изменения есть в памяти, откуда другие будут читать новое значение, и в журнале из которого они восстановятся при сбое. Из памяти в файл таблицы данные уезжают в нормальном случае асинхронно и разными способами: есть bgwriter, есть checkpointer.
>А где хранятся версии строк не подтвержденных транзакций?
В постгресе все хранится в таблице, undo сегмента/лога нет. Читающие транзакции проверяют все строки которые читают на соответствие снапшоту и на то что эти строки были созданы незаабоченой транзакцией.
Спасибо. А с какой версии постгрес научился определять аномальные транзакции? Или это всегда было?
Обсуждают сегодня