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