Ihar Hancharenka 904f05a3a3 m
2025-04-20 12:13:32 +03:00

99 строки
4.5 KiB
Plaintext
Исходник Ответственный История

Этот файл содержит невидимые символы Юникода

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

https://github.com/eulerto/wal2json
**************************************************
🤖 Конвертируем записи WAL в JSON (расширение wal2json).
Продолжаем вчерашнюю тему логического декодирования в PostgreSQL. В этой заметке посмотрим на полезное расширение wal2json.
Wal2json - это расширение для PostgreSQL, которое позволяет преобразовывать данные из Write-Ahead Log (WAL) в удобочитаемый JSON-формат. Это мощный инструмент для отслеживания изменений в базе данных, который особенно полезен для систем репликации и аудита.
Основные возможности расширения:
* Преобразование WAL-записей в JSON-формат;
* Фильтрация изменений по таблицам;
* Включение/исключение определенных типов операций (INSERT, UPDATE, DELETE)!
* Возможность включать в вывод схемы таблиц;
* Поддержка различных форматов вывода.
Официальный GitHub расширения:
➡️ https://github.com/eulerto/wal2json
Установка wal2json:
1⃣ Устанавливаем необходимые пакеты для сборки расширения:
# sudo apt-get install postgresql-server-dev-XX make gcc
Здесь XX - ваша версия PostgreSQL.
2⃣ Скачиваем исходный код wal2json:
# git clone https://github.com/eulerto/wal2json.gitcd wal2json
3⃣ Собираем и устанавливаем:
# make && make install
4⃣ Добавляем wal2json в shared_preload_libraries в postgresql.conf:
shared_preload_libraries = 'wal2json'
После этого нужно перезапустить службу PostgreSQL.
5⃣ Создаем расширение в нужной базе данных:
CREATE EXTENSION wal2json;
Использование wal2json:
1⃣ Создаем слот репликации:
SELECT * FROM pg_create_logical_replication_slot('wal2json_slot', 'wal2json');
2⃣ Проверяем изменения:
SELECT * FROM pg_logical_slot_get_changes('wal2json_slot', NULL, NULL);
Пример вывода:
{
"change": [
{
"kind": "insert",
"schema": "public",
"table": "users",
"columnnames": ["id", "name", "email"],
"columntypes": ["integer", "character varying(100)", "character varying(255)"],
"columnvalues": [1, "John Doe", "john@example.com"]
}
]
}
Wal2json поддерживает различные параметры для настройки вывода:
SELECT * FROM pg_logical_slot_get_changes(
'wal2json_slot',
NULL,
NULL,
'include-pk', '1',
'pretty-print', '1',
'include-schemas', '0'
);
Т. е. мы можем регулировать какие объекты мы ходим видеть в нашем выходном JSON.
Как видите, установка, настройка и применение расширения не представляет особых сложностей, но возможности его применения широкий. Вот несколько примеров:
* Отслеживание изменений данных для интеграции с другими системами;
* Аудит: Логирование всех изменений для соответствия требованиям;
* Синхронизация данных: Репликация данных в другие хранилища или поисковые системы;
* Восстановление данных: Анализ изменений для точечного восстановления.
Подводя итог, можно сказать, что wal2json - это мощный инструмент для работы с изменениями данных в PostgreSQL, который предоставляет удобный JSON-интерфейс к WAL. Он открывает широкие возможности для интеграции, мониторинга и анализа данных.
За более подробной информацией идем в официальную документацию.
На этом все! До связи!
#pgext