зеркало из
				https://github.com/iharh/notes.git
				synced 2025-11-04 15: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
 |