рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдХ рдХрд╛рдлреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдпреЛрдЬрдирд╛, рдЬрдм рдореБрдЦреНрдп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрд░реНрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрд░рд▓рдВрдЧ) рдореЗрдВ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ, рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ (рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓)ред Erlang рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдИрдЯреАрдПрд╕ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рддреЗрдЬреА рдЖрдП рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рд▓реЛрдб рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдбреЗрдЯрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдПрдХ рдЕрд▓рдЧ (рд╕рдВрднрд╡рддрдГ рдмрд╛рд╣рд░реА) рд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред
рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдХреИрд╢реНрдб рдбреЗрдЯрд╛ рдХреЛ рдЕрджреНрдпрддрди рд░рдЦрдиреЗ рдХреА рдЪреБрдиреМрддреА рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ PostgreSQL рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
рд╕реНрдЯреНрд░реАрдо рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓
рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рддрд┐рдХреГрддрд┐ PostgreSQL рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PostgreSQL рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Wal Logs рдкрдврд╝рддрд╛ рд╣реИ, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдХреЗ рдФрд░ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рднреЗрдЬ рд░рд╣рд╛ рд╣реИред рдпрд╣ рддрдВрддреНрд░ рдПрдХ рднреМрддрд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдВрдбрдмрд╛рдп рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред
рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ:
- рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рджреЗрд░реА рдХреЗ рдмрд┐рдирд╛ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛;
- рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдФрд░ рд╕рдВрдЪрд╛рд▓рди (INSERT / DELETE / UPDATE) рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди;
- рдЧреНрд░рд╛рд╣рдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреА рдкреВрд░реНрдгрддрд╛ рдФрд░ рдЕрдЦрдВрдбрддрд╛ред рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╡реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣реЛрддреЗ рдереЗ;
- рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдЕрд╕реНрдерд╛рдпреА рд╕реНрдЯреЙрдк рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рдирд╣реАрдВред PostgreSQL рдпрд╛рдж рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд░рддрд┐рдХреГрддрд┐ рдмрдВрдж рд╣реЛ рдЧрдИ;
рдбреЗрдЯрд╛рдмреЗрд╕ рддреИрдпрд╛рд░реА
рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдкреНрд▓рдЧрдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рд╡рд╛рд▓ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбрд┐рдХреЛрдб рдХрд░рддрд╛ рд╣реИред
PostgreSQL 10 рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк / рдПрдХреНрд╕рдЯреЗрдВрд╢рди pglogical_output рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
PostgreSQL 10 pgoutput рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВред
рдпрд╣ рд▓реЗрдЦ pgoutput рдкреНрд▓рдЧрдЗрди рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛ред
PostgreSQL рдХреА рддрд░рдл, рдЖрдкрдХреЛ рдирд┐рдореНрди рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
рдореЗрдВ рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВ
postgresql.conf
wal_level = 'logical' max_replication_slots = 5 max_wal_senders = 5
рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рднреВрдорд┐рдХрд╛ рдмрдирд╛рдПрдБред рднреВрдорд┐рдХрд╛ рдХреА REPLICATION
рдпрд╛ рд╕рдорд░реНрдерди SUPERUSER
рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
CREATE USER epgl_test WITH REPLICATION PASSWORD 'epgl_test';
database = replication
рд╕рд╛рде pg_hba.conf рдореЗрдВ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрдВ
host replication epgl_test 127.0.0.1/32 trust
рдПрдХ рдкреНрд░рдХрд╛рд╢рди рдмрдирд╛рдПрдБред рдПрдХ рдкреНрд░рдХрд╛рд╢рди рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо рдЙрди рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдПрд░рд▓рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ
CREATE PUBLICATION epgl_test FOR TABLE public.test_table1, public.test_table3; ALTER PUBLICATION epgl_test ADD TABLE public.test_table2;
рдПрд░рд▓рдВрдЧ рднрд╛рдЧ
рдЕрднреА рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ , рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ EPGSQL рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдХрдкреНрд░рд┐рдп рдПрд░реНрд▓рд╛рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкреНрд░рддрд┐рдХреГрддрд┐ рдкреНрд░рддрд┐рдХреГрддрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдПрд░рд▓рд╛рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗред
рдЪреВрдВрдХрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ XlogData
рд╕рдВрджреЗрд╢ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд╕реАрдзреЗ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкреНрд▓рдЧ-рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, EPGSQL
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбреЗрдЯрд╛ рдХреЛ рдбреАрдХреЛрдб рдирд╣реАрдВ EPGSQL
, рд▓реЗрдХрд┐рди рдХреЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рд╕рдВрджреЗрд╢ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред
DB рдХрдиреЗрдХреНрд╢рди
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ replication
рдзреНрд╡рдЬ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЗ рднреАрддрд░, рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдХреГрддрд┐ рдЖрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, DROP_REPLICATION_SLOT, CREATE_REPLICATION_SLOT)ред
рдЖрдк рдЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ рдмрдирд╛рдПрдБ
рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╡рд╛рд▓ рд▓реЙрдЧ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ рдмрдирд╛рддреЗ рд╕рдордп, рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧ-рдЗрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
PostgreSQL 10 рдЕрд╕реНрдерд╛рдпреА рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣рд░ рдмрд╛рд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЕрд╕реНрдерд╛рдпреА рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдкрдХреЛ рдмрдирд╛рдП рдЧрдП рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯреНрд╕ (DROP_REPLICATION_SLOT) рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рд╣реЛрдЧреАред рдкреБрд░рд╛рдиреЗ / рдЕрдкреНрд░рдпреБрдХреНрдд рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯреНрд╕ рдХреЛ рд╣рдЯрд╛рдирд╛ рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ PostgreSQL рд╡рд╛рд▓ рд▓реЙрдЧ рдХреЛ рддрдм рддрдХ рдирд╣реАрдВ рд╣рдЯрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╕рднреА рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ рдХреЗ рдЧреНрд░рд╛рд╣рдХ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рд╡рд╛рд▓ рд▓реЙрдЧреНрд╕ рдЬрдорд╛ рд╣реЛрдиреЗ рд▓рдЧреЗрдВрдЧреЗ рдФрд░ рдЬрд▓реНрдж рд╣реА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдУрд╡рд░рдлреНрд▓реЛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ рдмрдирд╛рддреЗ рд╕рдордп (рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдХреЛ рджреЗрдЦреЗрдВ), рдПрдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕реНрд▓реЙрдЯ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдХреЗ рд╕рдордп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдерд╛ред
рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреЗрд╡рд▓ рддрдм рддрдХ рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрдиреЗрдХреНрд╢рди рдЬрд┐рд╕рдореЗрдВ CREATE_REPLICATION_SLOT
рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреАред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдирдпрд╛ рдирд┐рдпрдорд┐рдд / рдЧреИрд░-рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрдиреЗрдХреНрд╢рди рдкрд░ SELECT рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╕реНрдиреИрдкрд╢реЙрдЯ SET TRANSACTION SNAPSHOT SnapshotName
рдкрд░рд┐рд╡рд╣рди рд╕реНрдиреИрдкрд╢реЙрдЯ рд╕реНрдиреИрдкрд╢реЙрдЯ рдирд╛рдо SET TRANSACTION SNAPSHOT SnapshotName
рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓реЗрдВред
рдкреНрд░рддрд┐рдХреГрддрд┐ рд╢реБрд░реВ рдХрд░реЗрдВ
рд╣рдо рдирд┐рд░реНрдорд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреГрддрд┐ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдХреГрддрд┐ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, pgoutput рдХреЗ рд▓рд┐рдП рдпрд╣ рдирд┐рд░реНрдорд┐рдд рдкреНрд░рдХрд╛рд╢рди рдХрд╛ рдирд╛рдо рд╣реИред
рд╕рднреА рдХрджрдо рдПрдХ рд╕рд╛рде
start_replication() ->
EPGSQL
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХред рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА CallbackModule:handle_x_log_data
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧреА CallbackModule:handle_x_log_data
ред рдлрд╝рдВрдХреНрд╢рди рдХреЛ LastFlushedLSN, LastAppliedLSN рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PostgreSQL рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ;
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХред рдХреЙрд▓рдмреИрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА {epgsql, self(), {x_log_data, StartLSN, EndLSN, WALRecord}}
рдЬрд┐рд╕рдореЗрдВ рдлреЙрд░реНрдо {epgsql, self(), {x_log_data, StartLSN, EndLSN, WALRecord}}
рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗред рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдХ epgsql:standby_status_update(Conn, FlushedLSN, AppliedLSN)
рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд LSN рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП epgsql:standby_status_update(Conn, FlushedLSN, AppliedLSN)
;
рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ рдкреНрд▓рдЧ-рдЗрди рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдПрд░рд▓рд╛рдВрдЧ рдХреЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╛ GitHub рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рджреЛ рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд▓рд┐рдП рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред