зеркало из
https://github.com/iharh/notes.git
synced 2025-10-29 20:56:06 +02:00
99 строки
4.5 KiB
Plaintext
99 строки
4.5 KiB
Plaintext
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
|