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