From a594fb6f551ee545f66182c7f2098c73e196416c Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 17 Apr 2020 14:10:35 +1200 Subject: [PATCH v2 4/6] Add pg_clobber_current_snapshot_timestamp(). --- contrib/old_snapshot/old_snapshot--1.0.sql | 5 +++++ contrib/old_snapshot/time_mapping.c | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/contrib/old_snapshot/old_snapshot--1.0.sql b/contrib/old_snapshot/old_snapshot--1.0.sql index 9ebb8829e3..aacf1704b5 100644 --- a/contrib/old_snapshot/old_snapshot--1.0.sql +++ b/contrib/old_snapshot/old_snapshot--1.0.sql @@ -11,4 +11,9 @@ RETURNS SETOF record AS 'MODULE_PATHNAME', 'pg_old_snapshot_time_mapping' LANGUAGE C STRICT; +CREATE FUNCTION pg_clobber_current_snapshot_timestamp(now timestamptz) +RETURNS VOID +AS 'MODULE_PATHNAME', 'pg_clobber_current_snapshot_timestamp' +LANGUAGE C STRICT; + -- XXX. Do we want REVOKE commands here? diff --git a/contrib/old_snapshot/time_mapping.c b/contrib/old_snapshot/time_mapping.c index 37e0055a00..8728c4ddb5 100644 --- a/contrib/old_snapshot/time_mapping.c +++ b/contrib/old_snapshot/time_mapping.c @@ -36,6 +36,7 @@ typedef struct PG_MODULE_MAGIC; PG_FUNCTION_INFO_V1(pg_old_snapshot_time_mapping); +PG_FUNCTION_INFO_V1(pg_clobber_current_snapshot_timestamp); static OldSnapshotTimeMapping *GetOldSnapshotTimeMapping(void); static TupleDesc MakeOldSnapshotTimeMappingTupleDesc(void); @@ -157,3 +158,15 @@ MakeOldSnapshotTimeMappingTuple(TupleDesc tupdesc, OldSnapshotTimeMapping *mappi return heap_form_tuple(tupdesc, values, nulls); } + +Datum +pg_clobber_current_snapshot_timestamp(PG_FUNCTION_ARGS) +{ + TimestampTz new_current_timestamp = PG_GETARG_TIMESTAMPTZ(0); + + LWLockAcquire(OldSnapshotTimeMapLock, LW_EXCLUSIVE); + oldSnapshotControl->current_timestamp = new_current_timestamp; + LWLockRelease(OldSnapshotTimeMapLock); + + PG_RETURN_NULL(); +} -- 2.20.1