postgres=# show intervalstyle; IntervalStyle --------------- postgres (1 row) With Default setting: --------------------- Pub: CREATE TABLE tab1 (k interval PRIMARY KEY, v text); INSERT INTO tab1 VALUES (interval '-1 day -2 hours', 'a'), (interval '-3 days -4 hours', 'b'); CREATE PUBLICATION pub1 FOR TABLE tab1; Sub: CREATE TABLE tab1 (k interval PRIMARY KEY, v text); CREATE SUBSCRIPTION sub1 connection '...' publication pub1 WITH(conflict_log_destination='all'); -- after initial sync, make both rows "missing": SELECT * from tab1; k | v -------------------+--- -1 days -02:00:00 | a -3 days -04:00:00 | b (2 rows) DELETE FROM tab1; Pub: --this will cause conflict #1 UPDATE tab1 SET v = 'a2' WHERE k = interval '-1 day -2 hours'; Sub: --normal so far, RI value is correctly shown SELECT replica_identity->>'k' AS stored_text, (replica_identity->>'k')::interval AS read_by_default_reader, remote_commit_ts FROM pg_conflict.pg_conflict_log_16392 ORDER BY remote_commit_ts; With Changed setting: --------------------- Sub: ALTER SYSTEM SET intervalstyle = 'sql_standard'; SELECT pg_reload_conf(); Pub: --this will cause conflict #2 UPDATE tab1 SET v = 'b2' WHERE k = interval '-3 days -4 hours'; Sub: --The true key on the publisher was -3 days -4 hours (i.e. -3 days -04:00:00). --The CLT stored it as -3 4:00:00 in compact 'sql_standard' format where one sign ('-' here) is used for entire uniformly-negative value. --Reading that stored text back with the default 'postgres' style gives -3 days +04:00:00. (in 'postgres' style each value should be prefixed with sign, so lack of sign was read as '+', leading to correctness issue.) SET intervalstyle = postgres; SELECT replica_identity->>'k' AS stored_text, (replica_identity->>'k')::interval AS read_by_default_reader, remote_commit_ts FROM pg_conflict.pg_conflict_log_16392 ORDER BY remote_commit_ts; ====================== BEFORE FIX: (See second values in read_by_default_reader) SET intervalstyle = postgres; postgres=# SELECT replica_identity->>'k' AS stored_text, (replica_identity->>'k')::interval AS read_by_default_reader, remote_commit_ts FROM pg_conflict.pg_conflict_log_16392 ORDER BY remote_commit_ts; stored_text | read_by_default_reader | remote_commit_ts -------------------+------------------------+---------------------------------- -1 days -02:00:00 | -1 days -02:00:00 | 2026-10-13 15:33:55.853625+05:30 -3 4:00:00 | -3 days +04:00:00 | 2026-10-13 15:35:42.014081+05:30 (2 rows) AFTER fix: same steps, worker still at intervalstyle='sql_standard' when conflict #2 fires. The stored value is now correct regardless of the worker’s setting. postgres=# SET intervalstyle = postgres; SELECT replica_identity->>'k' AS stored_text, (replica_identity->>'k')::interval AS read_by_default_reader, remote_commit_ts FROM pg_conflict.pg_conflict_log_16392 ORDER BY remote_commit_ts; SET stored_text | read_by_default_reader | remote_commit_ts -------------------+------------------------+---------------------------------- -1 days -02:00:00 | -1 days -02:00:00 | 2026-10-13 15:45:40.467277+05:30 -3 days -04:00:00 | -3 days -04:00:00 | 2026-10-13 15:46:04.749876+05:30 (2 rows)