Dear Amit, > > Right, and code comments [a] should be also updated. > > > > So, leaving aside update_delete, copying commit_ts could be helpful to > detect some other conflicts. You may want to once test the same and > show it here as part of use case establishment.
I confirmed that {update|delete}_origin_differs could be detected with the
following steps.
0.
Constructed pub-sub replication system. track_commit_timestamp=on was set on the
subscriber, and the table below was defined on both clusters
```
Table "public.employee"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | not null |
salary | integer | | |
Indexes:
"employee_pkey" PRIMARY KEY, btree (id)
```
1.
Inserted a tuple on the publisher
```
pub=# INSERT INTO employee VALUES (1, 100);
INSERT 0 1
```
2.
UPDATEd the replicated tuple on the subscriber. Confirmed that commit timestamps
were stored.
```
sub=# SELECT * FROM pg_last_committed_xact();
xid | timestamp | roident
-----+-------------------------------+---------
738 | 2026-02-23 13:17:19.263146+09 | 1
(1 row)
sub=# UPDATE employee SET salary = 10 WHERE id = 1;
UPDATE 1
sub=# SELECT * FROM pg_last_committed_xact();
xid | timestamp | roident
-----+-------------------------------+---------
739 | 2026-02-23 13:17:33.230773+09 | 0
(1 row)
```
3.
Ran pg_upgrade to upgrade the subscriber. The new cluster must also set
track_commit_timestamp to on.
4.
Confirmed commit timestamps could be migrated.
```
new=# SELECT * FROM pg_xact_commit_timestamp_origin('739');
timestamp | roident
-------------------------------+---------
2026-02-23 13:17:33.230773+09 | 0
(1 row)
```
5.
UPDATEd the tuple on the publisher.
```
pub=# UPDATE employee SET salary = 200 WHERE id = 1;
UPDATE 1
```
6.
update_origin_differs conflict was detected on the new subscriber.
```
LOG: conflict detected on relation "public.employee":
conflict=update_origin_differs
DETAIL: Updating the row that was modified locally in transaction 739 at
2026-02-23 13:17:33.230773+09: local row (1, 10), remote row (1, 200), replica
identity (id)=(1).
CONTEXT: processing remote data for replication origin "pg_16402" during
message type "UPDATE" for replication target relation "public.employee" in
transaction 745, finished at 0/018A4C6
```
One debatable point is whether we should include this in the TAP test.
Personally
It's not necessary to simplify the test; either one is OK.
Not sure it is OK, but I created updated patches and considered a commit
message.
0001 was not changed from the original, and 0002 addressed comments from you and
contained the commit message. For now I added my name as one of the author, but
OK to be listed as reviewer. Most of parts were written by Sergey.
Best regards,
Hayato Kuroda
FUJITSU LIMITED
v9-0001-Migration-of-the-pg_commit_ts-directory.patch
Description: v9-0001-Migration-of-the-pg_commit_ts-directory.patch
v9-0002-pg_upgrade-transfer-commit-timestamps-to-the-new-.patch
Description: v9-0002-pg_upgrade-transfer-commit-timestamps-to-the-new-.patch
