Сервер базы данных PostgreSQL хранит «данные изменения» в файле журнала WAL, и я хотел проанализировать файл журнала архива на sql, например mysqlbinlog
, разбить файл binlog на sql, чтобы я мог найти приложение выполнить sql. У кого-нибудь есть такой инструмент?Как разобрать файл журнала postgresql wal на sql
ответ
Вы не можете. Это изменения фактических блоков диска.
Вы можете настроить сервер для записи всех операторов SQL в файл, если хотите. Не уверен, что вы сможете воспроизвести их, не зная о границах транзакций.
Если вы чувствуете приключения, xlogdump может помочь вам частично извлечь данные из ваших сегментов WAL. Если вам действительно нужен только SQL, который выполняется в вашем кластере, установите для log_min_duration_statement = 0
все записи.
Эта функция в настоящее время находится в разработке. (Ищите патчи «логической репликации» Андреса Фрейнда.) Это проект огромный, поэтому не задерживайте дыхание. Короткий ответ: в настоящее время это невозможно.
Логическое декодирование было зафиксировано в 9.4, так что теперь все готово, и есть инструменты, которые его используют. Но вы можете использовать его только для декодирования после настройки, вы не можете ретроактивно декодировать WAL, созданный в какой-то момент в прошлом. (Я знаю, что вы знаете, что Петр, в интересах других, которые находят этот вопрос). –
Имеет ли запись wal какую-либо информацию о схеме его отношения? Что произойдет, если отношение, соответствующее записи, будет изменено до декодирования? –
Теперь вы можете реплицировать с помощью SQL. Посмотрите на pglogical
. Однако он не охватывает изменения схемы.
Теперь это встроенный модуль 'pg_xlogdump' в' contrib'. Кстати. –