Synchronizace dat
pomocí pgsync

Každý vývojář občas obdrží požadavek na synchronizaci produkční databáze se stage prostředím pro účely testování nad reálnými daty. Pgsync umí tenhle nudný proces vyřešit v okamžiku. Krom toho za nás může řešit i anonymizaci citlivých dat.

Pgsync je opensource nástroj pro synchronizaci dat z jedné Postgres databáze do druhé. Nahrazuje jedním příkazem repetitivní pg_dump a pg_restore, které ještě navíc předčí svým výkonem. Přenáší se pouze rozdíl dvou databází a tabulky jsou synchronizovány paralelně.

Článek rozhodně nemá obsáhnout celou dokumentaci, pouze ukazuje nejčastější užití. Pro rozšiřující informace navštivte dokumentaci.

Instalace

Pgsync je teoreticky možné nainstalovat na libovolný server, ale z hlediska bezpečnosti a rychlosti je optimální stage prostředí.

V příkazové řádce spustíme:

gem install pgsync

Pokud příkaz skončí chybou, pravděpodobně nemáte nainstalované Ruby https://github.com/ankane/pgsync#dependencies.

Úspěšnou instalaci ověříte spuštěním příkazu pgsync -v, který vypíše současnou verzi programu.

Konfigurace

Spuštěním pgsync --init v adresáři projektu zde vygenerujeme konfigurační soubor .pgsync.yml. Tento bychom měli uvést do .gitignore, abychom v repozitáři nevystavovali citlivá data.

Níže uvádím typické nastavení. Nejedná se o kompletní výčet, pro další možnosti nahlédněte do dokumentace.

1 - source database

from: postgres://username:password@productionHost:5432/db-name?sslmode=verify-full

2 - destination database

to: postgres://username:password@localhost:5432/db-name

3 - exclude tables

exclude: - log

4 - protect sensitive information

data_rules:

email: unique_email

api_token: unique_secret

phone: unique_phone

patient_age:

statement: "(RANDOM() * 100)::int"


/// 1 – source database
Zdrojová databáze (produkční), ze které chceme brát data. Z důvodu bezpečnosti je nutné mezi servery komunikovat přes SSH či VPN, případně použít SSL mód. Pokud se rozhodnete pro poslední možnost, do query stringu připojte na konec *?sslmode=verify-full&sslrootcert=/var/**/cert.pem*. Je samozřejmě nutné mít na stage tento certifikát k dispozici.

/// 2 – destination database
Cílová databáze (stage), kam chceme zdrojová data přenést. Aby nedošlo omylem k záměně, pgsysc zde dovoluje uvést pouze hosta localhost či 127.0.0.1.

/// 3 – exclude tables
Často není nutné přenášet všechny tabulky, typicky půjde o logy. Tabulky uvedené v této sekci budou vynechány.

/// 4 – protect sensitive information
Další běžný požadavek je nepřenášet na stage citlivé informace jako třeba email. Vyhneme se tím velkým problémům při chybném nastavení SMP serveru na stage. Není totiž úplně vhodné posílat ostrým uživatelům maily při testování :)

Spuštění

Nyní již zbývá jen pgsync spustit. Tímto příkazem se provede synchronizace struktury i samotných dat:

pgsync

Je pravděpodobné, že příkaz vám nedoběhne kvůli definovaným constraints. V takovém případě je buď nutné uvést v příkazu jednotlivé tabulky tak jak mají jít za sebou a nebo jednoduše udělat deffer (constraints kontrolovány až po celé transakci):

pgsync --defer-constraints-v2

V případě, že chcete synchronizovat pouze některé tabulky.

pgsync table1,table2

Čtěte dál Tyto články vám nesmí uniknout

Publikace

Sharing datasets of the COVID-19 epidemic in the Czech Republic

8 minut čtení

Design

Config 2022 Novinky z konferencie

5 minut čtení

Vývoj

Open data transformer pro automatické zpracování dat

8 minut čtení

ZAUJALI JSME VÁS? Napište nám

Tým webstudia