Skip to content

Commit a6f5c93

Browse files
committed
update docs
1 parent d5a1b66 commit a6f5c93

File tree

5 files changed

+52
-17
lines changed

5 files changed

+52
-17
lines changed

Makefile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,14 @@ psqlt: ## Connect to target
4242
.PHONY: pginitpub
4343
pginitpub: ## Init pgbench and publication in source
4444
docker exec -it $${CONTAINER_NAME_PREFIX}-source /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) pgbench -i -I dtvp -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB}"
45+
docker exec -it $${CONTAINER_NAME_PREFIX}-source /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) psql -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB} < /opt/sql/pgbench_alter.sql"
4546
docker exec -it $${CONTAINER_NAME_PREFIX}-source /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) psql -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB} < /opt/sql/pgbench_init_pub.sql"
4647
docker exec -it $${CONTAINER_NAME_PREFIX}-source /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) psql -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB} < /opt/sql/repl_pub.sql"
4748

4849
.PHONY: pginitsub
4950
pginitsub: ## Init pgbench and subscription in target
5051
docker exec -it $${CONTAINER_NAME_PREFIX}-target /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) pgbench -i -I dtvp -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB}"
52+
docker exec -it $${CONTAINER_NAME_PREFIX}-target /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) psql -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB} < /opt/sql/pgbench_alter.sql"
5153
docker exec -it $${CONTAINER_NAME_PREFIX}-target /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) psql -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB} < /opt/sql/pgbench_init_sub.sql"
5254
docker exec -it $${CONTAINER_NAME_PREFIX}-target /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) psql -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB} < /opt/sql/repl_sub.sql"
5355

@@ -93,3 +95,16 @@ validate: ## Validate replication
9395

9496
.PHONY: reset
9597
reset: pgsubdrop pgpubdrop pgdatadrop ## Reset everything
98+
99+
.PHONY: conflict
100+
conflict: ## Simulate primary key constraint conflict
101+
docker exec -it $${CONTAINER_NAME_PREFIX}-source /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) pgbench -i -I dtvp -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB}"
102+
docker exec -it $${CONTAINER_NAME_PREFIX}-source /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) psql -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB} < /opt/sql/pgbench_alter.sql"
103+
docker exec -it $${CONTAINER_NAME_PREFIX}-target /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) pgbench -i -I dtvp -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB}"
104+
docker exec -it $${CONTAINER_NAME_PREFIX}-target /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) psql -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB} < /opt/sql/pgbench_alter.sql"
105+
docker exec -it ${CONTAINER_NAME_PREFIX}-target /bin/bash \
106+
-c "PGPASSWORD=$(echo $POSTGRES_PASSWORD) psql -h localhost -p 5432 -U ${POSTGRES_USER} ${POSTGRES_DB} -c 'INSERT INTO pgbench_branches(bid) VALUES (1)'"
107+
docker exec -it $${CONTAINER_NAME_PREFIX}-source /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) psql -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB} < /opt/sql/pgbench_init_pub.sql"
108+
docker exec -it $${CONTAINER_NAME_PREFIX}-target /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) psql -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB} < /opt/sql/pgbench_init_sub.sql"
109+
docker exec -it $${CONTAINER_NAME_PREFIX}-source /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) psql -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB} < /opt/sql/repl_pub.sql"
110+
docker exec -it $${CONTAINER_NAME_PREFIX}-target /bin/bash -c "PGPASSWORD=$$(echo $$POSTGRES_PASSWORD) psql -h localhost -p 5432 -U $${POSTGRES_USER} $${POSTGRES_DB} < /opt/sql/repl_sub.sql"

README.md

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ As primary key and row filter for the logical replication, we use the criteria `
88

99
## Important files
1010

11-
- [sql/pgbench_init_pub.sql](./sql/pgbench_init_pub.sql), [sql/pgbench_init_sub.sql](./sql/pgbench_init_sub.sql): Init pgbench tables `pgbench_branches`, `pgbench_tellers`, and `pgbench_accounts` with entries where the primary keys follow the even/odd pattern for the source and the target. Additionally extend the primary keys in the tables `pgbench_accounts` and `pgbench_tellers` to contain `bid` as well. _The scale factor of 50 is applied as static value in these files and needs to be adjusted if the environment variable `PGBENCH_SCALE` is modified._
11+
- [sql/pgbench_alter.sql](./sql/pgbench_alter.sql): Extend the primary keys in the tables `pgbench_accounts` and `pgbench_tellers` to contain `bid` as well.
12+
- [sql/pgbench_init_pub.sql](./sql/pgbench_init_pub.sql), [sql/pgbench_init_sub.sql](./sql/pgbench_init_sub.sql): Init pgbench tables `pgbench_branches`, `pgbench_tellers`, and `pgbench_accounts` with entries where the primary keys follow the even/odd pattern for the source and the target. _The scale factor of 50 is applied as static value in these files and needs to be adjusted if the environment variable `PGBENCH_SCALE` is modified._
1213
- [sql/repl_pub.sql](./sql/repl_pub.sql): Create publication for all pgbench tables using the row filter criteria `bid = 1` on the source.
1314
- [sql/repl_sub.sql](./sql/repl_sub.sql): Create subscription for the publication in the target.
1415
- [bench/pub.bench](./bench/pub.bench), [bench/sub.bench](./bench/sub.bench): Benchmark scripts to use with modified identifiers following the even/odd pattern for the source and the target.
@@ -349,7 +350,7 @@ Configuration Settings
349350
First prepare tables and generate traffic.
350351

351352
```shell
352-
make preapre -j 2
353+
make prepare -j 2
353354
make run -j 2
354355
```
355356

@@ -407,7 +408,30 @@ The final `make validate` shows that the data is still consistent afterwards.
407408

408409
### Violation of constraints
409410

410-
_tbw._
411+
- Create pgbench schema
412+
- Insert conflicting entry in target
413+
- Create pgbench base data
414+
- Setup publication and subscription
415+
416+
```shell
417+
make conflict
418+
```
419+
420+
The logs for the target look similar to these.
421+
422+
```text
423+
LOG: logical replication table synchronization worker for subscription "sub_bid_1", table "pgbench_branches" has started
424+
ERROR: duplicate key value violates unique constraint "pgbench_branches_pkey"
425+
DETAIL: Key (bid)=(1) already exists.
426+
CONTEXT: COPY pgbench_branches, line 1
427+
LOG: background worker "logical replication worker" (PID 10848) exited with exit code 1
428+
```
429+
430+
As long as the subscription is enabled, the logical replication is retried.
431+
432+
```shell
433+
make reset -j 3
434+
```
411435

412436
### Target goes down during replication
413437

sql/pgbench_alter.sql

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
BEGIN;
2+
3+
-- drop primary key constraints and update them
4+
ALTER TABLE pgbench_accounts DROP CONSTRAINT pgbench_accounts_pkey;
5+
ALTER TABLE pgbench_accounts ADD PRIMARY KEY (aid, bid);
6+
7+
ALTER TABLE pgbench_tellers DROP CONSTRAINT pgbench_tellers_pkey;
8+
ALTER TABLE pgbench_tellers ADD PRIMARY KEY (tid, bid);
9+
10+
COMMIT;

sql/pgbench_init_pub.sql

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,3 @@ INSERT INTO pgbench_accounts(aid, bid, abalance, filler)
2424
FROM generate_series(1, 100000 * 50) AS aid;
2525

2626
COMMIT;
27-
28-
-- drop primary key constraints and update them
29-
ALTER TABLE pgbench_accounts DROP CONSTRAINT pgbench_accounts_pkey;
30-
ALTER TABLE pgbench_accounts ADD PRIMARY KEY (aid, bid);
31-
32-
ALTER TABLE pgbench_tellers DROP CONSTRAINT pgbench_tellers_pkey;
33-
ALTER TABLE pgbench_tellers ADD PRIMARY KEY (tid, bid);

sql/pgbench_init_sub.sql

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,3 @@ INSERT INTO pgbench_accounts(aid, bid, abalance, filler)
2424
FROM generate_series(1, 100000 * 50) AS aid;
2525

2626
COMMIT;
27-
28-
-- drop primary key constraints and update them
29-
ALTER TABLE pgbench_accounts DROP CONSTRAINT pgbench_accounts_pkey;
30-
ALTER TABLE pgbench_accounts ADD PRIMARY KEY (aid, bid);
31-
32-
ALTER TABLE pgbench_tellers DROP CONSTRAINT pgbench_tellers_pkey;
33-
ALTER TABLE pgbench_tellers ADD PRIMARY KEY (tid, bid);

0 commit comments

Comments
 (0)