Agenda

Warum?

Was?

Geschichte

Infrastruktur

Big Picture: Logical Replication

img/arch_logical.png

Big Picture: Multi-Master

img/arch_multimaster.png

Big Picture: Mesh

img/arch_interconnect.png

Sequences

Replikations-Konflikte

Konfliktauflösung

handler_fun(
  local_row TBLTYPE, remote_row TBLTYPE,
  command_tag TEXT, rel REGCLASS, event bdr.bdr_handler_types,
  OUT resolution_row TBLTYPE, OUT resolution bdr.bdr_conflict_handler_action)
bdr.bdr_create_conflict_handler(
  ch_rel NAME, ch_name TEXT, ch_proc NAME, ch_type TEXT)
bdr.bdr_drop_conflict_handler(ch_rel NAME, ch_name TEXT)

DDL-Replikation

DDL-Nicht-Replikation

Replication Sets

bdr.table_set_replication_sets(relation regclass, sets TEXT[])
bdr.table_get_replication_sets(relation regclass)

Setup

SELECT bdr.bdr_group_create('node1', 'host=node1 user=replusr dbname=thisdb');
SELECT bdr.bdr_group_join('node2', 'host=node2 user=replusr dbname=thisdb',
    'host=node1 user=replusr dbname=thisdb');

pglogical-Projekt

pglogical_output

JSON Output

pglogical=# SELECT * FROM pg_create_logical_replication_slot(
pglogical(#   'demo',
pglogical(#   'pglogical_output'
pglogical(# );
-[ RECORD 1 ]-+-----------
slot_name     | demo
xlog_position | 0/5D50FE30
(1 row)
pglogical=# INSERT INTO pgbench_tellers (tid, bid, tbalance) VALUES (1001, 0, 0);
INSERT 0 1

JSON Output(2)

pglogical=# SELECT data::json FROM pg_logical_slot_peek_changes(
pglogical(#   'demo', NULL, NULL,
pglogical(#   'min_proto_version', '1',
pglogical(#   'max_proto_version', '1',
pglogical(#   'startup_params_format', '1',
pglogical(#   'proto_format', 'json',
pglogical(#   'no_txinfo', 't')
pglogical-# WHERE (data::json->'action')::text = '"I"';
-[ RECORD 1 ]------------------------------------------------------
data | {"action":"I",
     |  "relation":["public","pgbench_tellers"],
     |  "newtuple":{"tid":1001,"bid":0,"tbalance":0,"filler":null}
     | }

pglogical Setup - Provider

srcdb=# CREATE EXTENSION pglogical;
CREATE EXTENSION
srcdb=# SELECT pglogical.create_provider('pg94');
-[ RECORD 1 ]---+----------
create_provider | 720775012

pglogical Setup - Subscriber

dstdb=# CREATE EXTENSION pglogical;
CREATE EXTENSION
dstdb=# SELECT pglogical.create_subscriber(
dstdb(#   subscriber_name := 'pg95',
dstdb(#   provider_name := 'pg94',
dstdb(#   local_dsn := 'host=dsthost user=repl dbname=dstdb',
dstdb(#   provider_dsn := 'host=srchost user=repl dbname=srcdb'
dstdb(# );
-[ RECORD 1 ]-----+-----------
create_subscriber | 3968884845

Upgrades

Fragen?

Danke