зеркало из
				https://github.com/iharh/notes.git
				synced 2025-10-31 13:46:08 +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
 | 
