diff options
author | Amit Kapila | 2024-09-04 03:25:21 +0000 |
---|---|---|
committer | Amit Kapila | 2024-09-04 03:25:21 +0000 |
commit | 6c2b5edecc0d6c936e27775c9451d32bb3141c90 (patch) | |
tree | a3717ebb364195cceaac32754aec901072531f98 /src/backend/replication | |
parent | 9626068f13338f79ba183b4cf3c975e22c98c575 (diff) |
Collect statistics about conflicts in logical replication.
This commit adds columns in view pg_stat_subscription_stats to show the
number of times a particular conflict type has occurred during the
application of logical replication changes. The following columns are
added:
confl_insert_exists:
Number of times a row insertion violated a NOT DEFERRABLE unique
constraint.
confl_update_origin_differs:
Number of times an update was performed on a row that was
previously modified by another origin.
confl_update_exists:
Number of times that the updated value of a row violates a
NOT DEFERRABLE unique constraint.
confl_update_missing:
Number of times that the tuple to be updated is missing.
confl_delete_origin_differs:
Number of times a delete was performed on a row that was
previously modified by another origin.
confl_delete_missing:
Number of times that the tuple to be deleted is missing.
The update_origin_differs and delete_origin_differs conflicts can be
detected only when track_commit_timestamp is enabled.
Author: Hou Zhijie
Reviewed-by: Shveta Malik, Peter Smith, Anit Kapila
Discussion: https://postgr.es/m/OS0PR01MB57160A07BD575773045FC214948F2@OS0PR01MB5716.jpnprd01.prod.outlook.com
Diffstat (limited to 'src/backend/replication')
-rw-r--r-- | src/backend/replication/logical/conflict.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/backend/replication/logical/conflict.c b/src/backend/replication/logical/conflict.c index a1437d4f770..5d9ff626bde 100644 --- a/src/backend/replication/logical/conflict.c +++ b/src/backend/replication/logical/conflict.c @@ -17,8 +17,9 @@ #include "access/commit_ts.h" #include "access/tableam.h" #include "executor/executor.h" +#include "pgstat.h" #include "replication/conflict.h" -#include "replication/logicalrelation.h" +#include "replication/worker_internal.h" #include "storage/lmgr.h" #include "utils/lsyscache.h" @@ -114,6 +115,8 @@ ReportApplyConflict(EState *estate, ResultRelInfo *relinfo, int elevel, Assert(!OidIsValid(indexoid) || CheckRelationOidLockedByMe(indexoid, RowExclusiveLock, true)); + pgstat_report_subscription_conflict(MySubscription->oid, type); + ereport(elevel, errcode_apply_conflict(type), errmsg("conflict detected on relation \"%s.%s\": conflict=%s", |