diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml
index dca24fc0705790bd760ef6b298f232df1316d85c..908f947f81ab1e3da884921b726369cfe1195751 100644
--- a/doc/src/sgml/catalogs.sgml
+++ b/doc/src/sgml/catalogs.sgml
@@ -5244,7 +5244,7 @@
 
      <row>
       <entry><structfield>restart_lsn</structfield></entry>
-      <entry><type>text</type></entry>
+      <entry><type>pg_lsn</type></entry>
       <entry></entry>
       <entry>The address (<literal>LSN</literal>) of oldest WAL which still
       might be required by the consumer of this slot and thus won't be
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index be548d79826b4ca7c6b35bd692dc19edad89ccc5..a6396620fe736a41ad726da8011eebf2ca60a7c8 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -15884,35 +15884,35 @@ SELECT set_config('log_statement_stats', 'off', false);
        <entry>
         <literal><function>pg_create_restore_point(<parameter>name</> <type>text</>)</function></literal>
         </entry>
-       <entry><type>text</type></entry>
+       <entry><type>pg_lsn</type></entry>
        <entry>Create a named point for performing restore (restricted to superusers)</entry>
       </row>
       <row>
        <entry>
         <literal><function>pg_current_xlog_insert_location()</function></literal>
         </entry>
-       <entry><type>text</type></entry>
+       <entry><type>pg_lsn</type></entry>
        <entry>Get current transaction log insert location</entry>
       </row>
       <row>
        <entry>
         <literal><function>pg_current_xlog_location()</function></literal>
         </entry>
-       <entry><type>text</type></entry>
+       <entry><type>pg_lsn</type></entry>
        <entry>Get current transaction log write location</entry>
       </row>
       <row>
        <entry>
         <literal><function>pg_start_backup(<parameter>label</> <type>text</> <optional>, <parameter>fast</> <type>boolean</> </optional>)</function></literal>
         </entry>
-       <entry><type>text</type></entry>
+       <entry><type>pg_lsn</type></entry>
        <entry>Prepare for performing on-line backup (restricted to superusers or replication roles)</entry>
       </row>
       <row>
        <entry>
         <literal><function>pg_stop_backup()</function></literal>
         </entry>
-       <entry><type>text</type></entry>
+       <entry><type>pg_lsn</type></entry>
        <entry>Finish performing on-line backup (restricted to superusers or replication roles)</entry>
       </row>
       <row>
@@ -15933,26 +15933,26 @@ SELECT set_config('log_statement_stats', 'off', false);
        <entry>
         <literal><function>pg_switch_xlog()</function></literal>
         </entry>
-       <entry><type>text</type></entry>
+       <entry><type>pg_lsn</type></entry>
        <entry>Force switch to a new transaction log file (restricted to superusers)</entry>
       </row>
       <row>
        <entry>
-        <literal><function>pg_xlogfile_name(<parameter>location</> <type>text</>)</function></literal>
+        <literal><function>pg_xlogfile_name(<parameter>location</> <type>pg_lsn</>)</function></literal>
         </entry>
        <entry><type>text</type></entry>
        <entry>Convert transaction log location string to file name</entry>
       </row>
       <row>
        <entry>
-        <literal><function>pg_xlogfile_name_offset(<parameter>location</> <type>text</>)</function></literal>
+        <literal><function>pg_xlogfile_name_offset(<parameter>location</> <type>pg_lsn</>)</function></literal>
         </entry>
        <entry><type>text</>, <type>integer</></entry>
        <entry>Convert transaction log location string to file name and decimal byte offset within file</entry>
       </row>
       <row>
        <entry>
-        <literal><function>pg_xlog_location_diff(<parameter>location</> <type>text</>, <parameter>location</> <type>text</>)</function></literal>
+        <literal><function>pg_xlog_location_diff(<parameter>location</> <type>pg_lsn</>, <parameter>location</> <type>pg_lsn</>)</function></literal>
        </entry>
        <entry><type>numeric</></entry>
        <entry>Calculate the difference between two transaction log locations</entry>
@@ -16107,7 +16107,7 @@ postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
        <entry>
         <literal><function>pg_last_xlog_receive_location()</function></literal>
         </entry>
-       <entry><type>text</type></entry>
+       <entry><type>pg_lsn</type></entry>
        <entry>Get last transaction log location received and synced to disk by
         streaming replication. While streaming replication is in progress
         this will increase monotonically. If recovery has completed this will
@@ -16121,7 +16121,7 @@ postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
        <entry>
         <literal><function>pg_last_xlog_replay_location()</function></literal>
         </entry>
-       <entry><type>text</type></entry>
+       <entry><type>pg_lsn</type></entry>
        <entry>Get last transaction log location replayed during recovery.
         If recovery is still in progress this will increase monotonically.
         If recovery has completed then this value will remain static at
@@ -16335,7 +16335,7 @@ postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
         <literal><function>pg_create_physical_replication_slot(<parameter>slotname</parameter> <type>text</type>, <parameter>plugin</parameter> <type>text</type>)</function></literal>
        </entry>
        <entry>
-        (<parameter>slotname</parameter> <type>text</type>, <parameter>xlog_position</parameter> <type>text</type>)
+        (<parameter>slotname</parameter> <type>text</type>, <parameter>xlog_position</parameter> <type>pg_lsn</type>)
        </entry>
        <entry>
         Creates a new physical replication slot named
diff --git a/src/backend/access/transam/xlogfuncs.c b/src/backend/access/transam/xlogfuncs.c
index 9133179a954ee0b13903fa37c17892c44d4d6a82..5f8d65514c13116b63b236aae270c4a9c15e6603 100644
--- a/src/backend/access/transam/xlogfuncs.c
+++ b/src/backend/access/transam/xlogfuncs.c
@@ -30,11 +30,10 @@
 #include "utils/builtins.h"
 #include "utils/numeric.h"
 #include "utils/guc.h"
+#include "utils/pg_lsn.h"
 #include "utils/timestamp.h"
 #include "storage/fd.h"
 
-static void validate_xlog_location(char *str);
-
 
 /*
  * pg_start_backup: set up for taking an on-line backup dump
@@ -52,7 +51,6 @@ pg_start_backup(PG_FUNCTION_ARGS)
 	bool		fast = PG_GETARG_BOOL(1);
 	char	   *backupidstr;
 	XLogRecPtr	startpoint;
-	char		startxlogstr[MAXFNAMELEN];
 
 	backupidstr = text_to_cstring(backupid);
 
@@ -63,9 +61,7 @@ pg_start_backup(PG_FUNCTION_ARGS)
 
 	startpoint = do_pg_start_backup(backupidstr, fast, NULL, NULL);
 
-	snprintf(startxlogstr, sizeof(startxlogstr), "%X/%X",
-			 (uint32) (startpoint >> 32), (uint32) startpoint);
-	PG_RETURN_TEXT_P(cstring_to_text(startxlogstr));
+	PG_RETURN_LSN(startpoint);
 }
 
 /*
@@ -85,7 +81,6 @@ Datum
 pg_stop_backup(PG_FUNCTION_ARGS)
 {
 	XLogRecPtr	stoppoint;
-	char		stopxlogstr[MAXFNAMELEN];
 
 	if (!superuser() && !has_rolreplication(GetUserId()))
 		ereport(ERROR,
@@ -94,9 +89,7 @@ pg_stop_backup(PG_FUNCTION_ARGS)
 
 	stoppoint = do_pg_stop_backup(NULL, true, NULL);
 
-	snprintf(stopxlogstr, sizeof(stopxlogstr), "%X/%X",
-			 (uint32) (stoppoint >> 32), (uint32) stoppoint);
-	PG_RETURN_TEXT_P(cstring_to_text(stopxlogstr));
+	PG_RETURN_LSN(stoppoint);
 }
 
 /*
@@ -106,7 +99,6 @@ Datum
 pg_switch_xlog(PG_FUNCTION_ARGS)
 {
 	XLogRecPtr	switchpoint;
-	char		location[MAXFNAMELEN];
 
 	if (!superuser())
 		ereport(ERROR,
@@ -124,9 +116,7 @@ pg_switch_xlog(PG_FUNCTION_ARGS)
 	/*
 	 * As a convenience, return the WAL location of the switch record
 	 */
-	snprintf(location, sizeof(location), "%X/%X",
-			 (uint32) (switchpoint >> 32), (uint32) switchpoint);
-	PG_RETURN_TEXT_P(cstring_to_text(location));
+	PG_RETURN_LSN(switchpoint);
 }
 
 /*
@@ -138,7 +128,6 @@ pg_create_restore_point(PG_FUNCTION_ARGS)
 	text	   *restore_name = PG_GETARG_TEXT_P(0);
 	char	   *restore_name_str;
 	XLogRecPtr	restorepoint;
-	char		location[MAXFNAMELEN];
 
 	if (!superuser())
 		ereport(ERROR,
@@ -169,9 +158,7 @@ pg_create_restore_point(PG_FUNCTION_ARGS)
 	/*
 	 * As a convenience, return the WAL location of the restore point record
 	 */
-	snprintf(location, sizeof(location), "%X/%X",
-			 (uint32) (restorepoint >> 32), (uint32) restorepoint);
-	PG_RETURN_TEXT_P(cstring_to_text(location));
+	PG_RETURN_LSN(restorepoint);
 }
 
 /*
@@ -185,7 +172,6 @@ Datum
 pg_current_xlog_location(PG_FUNCTION_ARGS)
 {
 	XLogRecPtr	current_recptr;
-	char		location[MAXFNAMELEN];
 
 	if (RecoveryInProgress())
 		ereport(ERROR,
@@ -195,9 +181,7 @@ pg_current_xlog_location(PG_FUNCTION_ARGS)
 
 	current_recptr = GetXLogWriteRecPtr();
 
-	snprintf(location, sizeof(location), "%X/%X",
-			 (uint32) (current_recptr >> 32), (uint32) current_recptr);
-	PG_RETURN_TEXT_P(cstring_to_text(location));
+	PG_RETURN_LSN(current_recptr);
 }
 
 /*
@@ -209,7 +193,6 @@ Datum
 pg_current_xlog_insert_location(PG_FUNCTION_ARGS)
 {
 	XLogRecPtr	current_recptr;
-	char		location[MAXFNAMELEN];
 
 	if (RecoveryInProgress())
 		ereport(ERROR,
@@ -219,9 +202,7 @@ pg_current_xlog_insert_location(PG_FUNCTION_ARGS)
 
 	current_recptr = GetXLogInsertRecPtr();
 
-	snprintf(location, sizeof(location), "%X/%X",
-			 (uint32) (current_recptr >> 32), (uint32) current_recptr);
-	PG_RETURN_TEXT_P(cstring_to_text(location));
+	PG_RETURN_LSN(current_recptr);
 }
 
 /*
@@ -234,16 +215,13 @@ Datum
 pg_last_xlog_receive_location(PG_FUNCTION_ARGS)
 {
 	XLogRecPtr	recptr;
-	char		location[MAXFNAMELEN];
 
 	recptr = GetWalRcvWriteRecPtr(NULL, NULL);
 
 	if (recptr == 0)
 		PG_RETURN_NULL();
 
-	snprintf(location, sizeof(location), "%X/%X",
-			 (uint32) (recptr >> 32), (uint32) recptr);
-	PG_RETURN_TEXT_P(cstring_to_text(location));
+	PG_RETURN_LSN(recptr);
 }
 
 /*
@@ -256,16 +234,13 @@ Datum
 pg_last_xlog_replay_location(PG_FUNCTION_ARGS)
 {
 	XLogRecPtr	recptr;
-	char		location[MAXFNAMELEN];
 
 	recptr = GetXLogReplayRecPtr(NULL);
 
 	if (recptr == 0)
 		PG_RETURN_NULL();
 
-	snprintf(location, sizeof(location), "%X/%X",
-			 (uint32) (recptr >> 32), (uint32) recptr);
-	PG_RETURN_TEXT_P(cstring_to_text(location));
+	PG_RETURN_LSN(recptr);
 }
 
 /*
@@ -279,13 +254,9 @@ pg_last_xlog_replay_location(PG_FUNCTION_ARGS)
 Datum
 pg_xlogfile_name_offset(PG_FUNCTION_ARGS)
 {
-	text	   *location = PG_GETARG_TEXT_P(0);
-	char	   *locationstr;
-	uint32		hi,
-				lo;
 	XLogSegNo	xlogsegno;
 	uint32		xrecoff;
-	XLogRecPtr	locationpoint;
+	XLogRecPtr	locationpoint = PG_GETARG_LSN(0);
 	char		xlogfilename[MAXFNAMELEN];
 	Datum		values[2];
 	bool		isnull[2];
@@ -299,20 +270,6 @@ pg_xlogfile_name_offset(PG_FUNCTION_ARGS)
 				 errmsg("recovery is in progress"),
 				 errhint("pg_xlogfile_name_offset() cannot be executed during recovery.")));
 
-	/*
-	 * Read input and parse
-	 */
-	locationstr = text_to_cstring(location);
-
-	validate_xlog_location(locationstr);
-
-	if (sscanf(locationstr, "%X/%X", &hi, &lo) != 2)
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("could not parse transaction log location \"%s\"",
-						locationstr)));
-	locationpoint = ((uint64) hi) << 32 | lo;
-
 	/*
 	 * Construct a tuple descriptor for the result row.  This must match this
 	 * function's pg_proc entry!
@@ -359,12 +316,8 @@ pg_xlogfile_name_offset(PG_FUNCTION_ARGS)
 Datum
 pg_xlogfile_name(PG_FUNCTION_ARGS)
 {
-	text	   *location = PG_GETARG_TEXT_P(0);
-	char	   *locationstr;
-	uint32		hi,
-				lo;
 	XLogSegNo	xlogsegno;
-	XLogRecPtr	locationpoint;
+	XLogRecPtr	locationpoint = PG_GETARG_LSN(0);
 	char		xlogfilename[MAXFNAMELEN];
 
 	if (RecoveryInProgress())
@@ -373,17 +326,6 @@ pg_xlogfile_name(PG_FUNCTION_ARGS)
 				 errmsg("recovery is in progress"),
 		 errhint("pg_xlogfile_name() cannot be executed during recovery.")));
 
-	locationstr = text_to_cstring(location);
-
-	validate_xlog_location(locationstr);
-
-	if (sscanf(locationstr, "%X/%X", &hi, &lo) != 2)
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("could not parse transaction log location \"%s\"",
-						locationstr)));
-	locationpoint = ((uint64) hi) << 32 | lo;
-
 	XLByteToPrevSeg(locationpoint, xlogsegno);
 	XLogFileName(xlogfilename, ThisTimeLineID, xlogsegno);
 
@@ -481,82 +423,17 @@ pg_is_in_recovery(PG_FUNCTION_ARGS)
 	PG_RETURN_BOOL(RecoveryInProgress());
 }
 
-/*
- * Validate the text form of a transaction log location.
- * (Just using sscanf() input allows incorrect values such as
- * negatives, so we have to be a bit more careful about that).
- */
-static void
-validate_xlog_location(char *str)
-{
-#define MAXLSNCOMPONENT		8
-
-	int			len1,
-				len2;
-
-	len1 = strspn(str, "0123456789abcdefABCDEF");
-	if (len1 < 1 || len1 > MAXLSNCOMPONENT || str[len1] != '/')
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
-				 errmsg("invalid input syntax for transaction log location: \"%s\"", str)));
-
-	len2 = strspn(str + len1 + 1, "0123456789abcdefABCDEF");
-	if (len2 < 1 || len2 > MAXLSNCOMPONENT || str[len1 + 1 + len2] != '\0')
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
-				 errmsg("invalid input syntax for transaction log location: \"%s\"", str)));
-}
-
 /*
  * Compute the difference in bytes between two WAL locations.
  */
 Datum
 pg_xlog_location_diff(PG_FUNCTION_ARGS)
 {
-	text	   *location1 = PG_GETARG_TEXT_P(0);
-	text	   *location2 = PG_GETARG_TEXT_P(1);
-	char	   *str1,
-			   *str2;
-	XLogRecPtr	loc1,
-				loc2;
-	Numeric		result;
-	uint64		bytes1,
-				bytes2;
-	uint32		hi,
-				lo;
-
-	/*
-	 * Read and parse input
-	 */
-	str1 = text_to_cstring(location1);
-	str2 = text_to_cstring(location2);
-
-	validate_xlog_location(str1);
-	validate_xlog_location(str2);
+	Datum	result;
 
-	if (sscanf(str1, "%X/%X", &hi, &lo) != 2)
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-		   errmsg("could not parse transaction log location \"%s\"", str1)));
-	loc1 = ((uint64) hi) << 32 | lo;
-
-	if (sscanf(str2, "%X/%X", &hi, &lo) != 2)
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-		   errmsg("could not parse transaction log location \"%s\"", str2)));
-	loc2 = ((uint64) hi) << 32 | lo;
-
-	bytes1 = (uint64) loc1;
-	bytes2 = (uint64) loc2;
-
-	/*
-	 * result = bytes1 - bytes2.
-	 *
-	 * XXX: this won't handle values higher than 2^63 correctly.
-	 */
-	result = DatumGetNumeric(DirectFunctionCall2(numeric_sub,
-			DirectFunctionCall1(int8_numeric, Int64GetDatum((int64) bytes1)),
-		  DirectFunctionCall1(int8_numeric, Int64GetDatum((int64) bytes2))));
+	result = DirectFunctionCall2(pg_lsn_mi,
+								 PG_GETARG_DATUM(0),
+								 PG_GETARG_DATUM(1));
 
 	PG_RETURN_NUMERIC(result);
 }
diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql
index f02efeca974ef58b83a1b3a52aa8b3d35485cd47..a7c6a4e094b19e4901998ba76c9e0fb4372458ea 100644
--- a/src/backend/catalog/system_views.sql
+++ b/src/backend/catalog/system_views.sql
@@ -810,7 +810,7 @@ COMMENT ON FUNCTION ts_debug(text) IS
 
 CREATE OR REPLACE FUNCTION
   pg_start_backup(label text, fast boolean DEFAULT false)
-  RETURNS text STRICT VOLATILE LANGUAGE internal AS 'pg_start_backup';
+  RETURNS pg_lsn STRICT VOLATILE LANGUAGE internal AS 'pg_start_backup';
 
 CREATE OR REPLACE FUNCTION
   json_populate_record(base anyelement, from_json json, use_json_as_text boolean DEFAULT false)
diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c
index 98a860e5288cbbe20ccb071cfb569c7eb74297bc..761c0f536fbacc55e4d73e81285e4b2460b22163 100644
--- a/src/backend/replication/slotfuncs.c
+++ b/src/backend/replication/slotfuncs.c
@@ -17,6 +17,7 @@
 #include "miscadmin.h"
 #include "access/htup_details.h"
 #include "utils/builtins.h"
+#include "utils/pg_lsn.h"
 #include "replication/slot.h"
 
 Datum		pg_create_physical_replication_slot(PG_FUNCTION_ARGS);
@@ -141,8 +142,6 @@ pg_get_replication_slots(PG_FUNCTION_ARGS)
 		bool		active;
 		Oid			database;
 		const char *slot_name;
-
-		char		restart_lsn_s[MAXFNAMELEN];
 		int			i;
 
 		SpinLockAcquire(&slot->mutex);
@@ -164,9 +163,6 @@ pg_get_replication_slots(PG_FUNCTION_ARGS)
 
 		memset(nulls, 0, sizeof(nulls));
 
-		snprintf(restart_lsn_s, sizeof(restart_lsn_s), "%X/%X",
-				 (uint32) (restart_lsn >> 32), (uint32) restart_lsn);
-
 		i = 0;
 		values[i++] = CStringGetTextDatum(slot_name);
 		if (database == InvalidOid)
@@ -180,7 +176,7 @@ pg_get_replication_slots(PG_FUNCTION_ARGS)
 		else
 			nulls[i++] = true;
 		if (restart_lsn != InvalidTransactionId)
-			values[i++] = CStringGetTextDatum(restart_lsn_s);
+			values[i++] = LSNGetDatum(restart_lsn);
 		else
 			nulls[i++] = true;
 
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index cd1afc842dfb10794243ddc6e34716ea0a311774..1789eb357d505d10e0fcc6e38902f56307ddb6af 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -53,6 +53,6 @@
  */
 
 /*							yyyymmddN */
-#define CATALOG_VERSION_NO	201402191
+#define CATALOG_VERSION_NO	201402192
 
 #endif
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index ac726462e46ac77518e19f669f57728c7ef6d67a..11c1e1abc10d6634f4f3f0524b0b6dfdb3438cb1 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -2971,28 +2971,28 @@ DATA(insert OID = 2171 ( pg_cancel_backend		PGNSP PGUID 12 1 0 0 0 f f f f t f v
 DESCR("cancel a server process' current query");
 DATA(insert OID = 2096 ( pg_terminate_backend		PGNSP PGUID 12 1 0 0 0 f f f f t f v 1 0 16 "23" _null_ _null_ _null_ _null_ pg_terminate_backend _null_ _null_ _null_ ));
 DESCR("terminate a server process");
-DATA(insert OID = 2172 ( pg_start_backup		PGNSP PGUID 12 1 0 0 0 f f f f t f v 2 0 25 "25 16" _null_ _null_ _null_ _null_ pg_start_backup _null_ _null_ _null_ ));
+DATA(insert OID = 2172 ( pg_start_backup		PGNSP PGUID 12 1 0 0 0 f f f f t f v 2 0 3220 "25 16" _null_ _null_ _null_ _null_ pg_start_backup _null_ _null_ _null_ ));
 DESCR("prepare for taking an online backup");
-DATA(insert OID = 2173 ( pg_stop_backup			PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 25 "" _null_ _null_ _null_ _null_ pg_stop_backup _null_ _null_ _null_ ));
+DATA(insert OID = 2173 ( pg_stop_backup			PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 3220 "" _null_ _null_ _null_ _null_ pg_stop_backup _null_ _null_ _null_ ));
 DESCR("finish taking an online backup");
 DATA(insert OID = 3813 ( pg_is_in_backup		PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 16 "" _null_ _null_ _null_ _null_ pg_is_in_backup _null_ _null_ _null_ ));
 DESCR("true if server is in online backup");
 DATA(insert OID = 3814 ( pg_backup_start_time		PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 1184 "" _null_ _null_ _null_ _null_ pg_backup_start_time _null_ _null_ _null_ ));
 DESCR("start time of an online backup");
-DATA(insert OID = 2848 ( pg_switch_xlog			PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 25 "" _null_ _null_ _null_ _null_ pg_switch_xlog _null_ _null_ _null_ ));
+DATA(insert OID = 2848 ( pg_switch_xlog			PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 3220 "" _null_ _null_ _null_ _null_ pg_switch_xlog _null_ _null_ _null_ ));
 DESCR("switch to new xlog file");
-DATA(insert OID = 3098 ( pg_create_restore_point	PGNSP PGUID 12 1 0 0 0 f f f f t f v 1 0 25 "25" _null_ _null_ _null_ _null_ pg_create_restore_point _null_ _null_ _null_ ));
+DATA(insert OID = 3098 ( pg_create_restore_point	PGNSP PGUID 12 1 0 0 0 f f f f t f v 1 0 3220 "25" _null_ _null_ _null_ _null_ pg_create_restore_point _null_ _null_ _null_ ));
 DESCR("create a named restore point");
-DATA(insert OID = 2849 ( pg_current_xlog_location	PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 25 "" _null_ _null_ _null_ _null_ pg_current_xlog_location _null_ _null_ _null_ ));
+DATA(insert OID = 2849 ( pg_current_xlog_location	PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 3220 "" _null_ _null_ _null_ _null_ pg_current_xlog_location _null_ _null_ _null_ ));
 DESCR("current xlog write location");
-DATA(insert OID = 2852 ( pg_current_xlog_insert_location	PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 25 "" _null_ _null_ _null_ _null_ pg_current_xlog_insert_location _null_ _null_ _null_ ));
+DATA(insert OID = 2852 ( pg_current_xlog_insert_location	PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 3220 "" _null_ _null_ _null_ _null_ pg_current_xlog_insert_location _null_ _null_ _null_ ));
 DESCR("current xlog insert location");
-DATA(insert OID = 2850 ( pg_xlogfile_name_offset	PGNSP PGUID 12 1 0 0 0 f f f f t f i 1 0 2249 "25" "{25,25,23}" "{i,o,o}" "{wal_location,file_name,file_offset}" _null_ pg_xlogfile_name_offset _null_ _null_ _null_ ));
+DATA(insert OID = 2850 ( pg_xlogfile_name_offset	PGNSP PGUID 12 1 0 0 0 f f f f t f i 1 0 2249 "3220" "{3220,25,23}" "{i,o,o}" "{wal_location,file_name,file_offset}" _null_ pg_xlogfile_name_offset _null_ _null_ _null_ ));
 DESCR("xlog filename and byte offset, given an xlog location");
-DATA(insert OID = 2851 ( pg_xlogfile_name			PGNSP PGUID 12 1 0 0 0 f f f f t f i 1 0 25 "25" _null_ _null_ _null_ _null_ pg_xlogfile_name _null_ _null_ _null_ ));
+DATA(insert OID = 2851 ( pg_xlogfile_name			PGNSP PGUID 12 1 0 0 0 f f f f t f i 1 0 25 "3220" _null_ _null_ _null_ _null_ pg_xlogfile_name _null_ _null_ _null_ ));
 DESCR("xlog filename, given an xlog location");
 
-DATA(insert OID = 3165 ( pg_xlog_location_diff		PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 1700 "25 25" _null_ _null_ _null_ _null_ pg_xlog_location_diff _null_ _null_ _null_ ));
+DATA(insert OID = 3165 ( pg_xlog_location_diff		PGNSP PGUID 12 1 0 0 0 f f f f t f i 2 0 1700 "3220 3220" _null_ _null_ _null_ _null_ pg_xlog_location_diff _null_ _null_ _null_ ));
 DESCR("difference in bytes, given two xlog locations");
 
 DATA(insert OID = 3809 ( pg_export_snapshot		PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 25 "" _null_ _null_ _null_ _null_ pg_export_snapshot _null_ _null_ _null_ ));
@@ -3001,9 +3001,9 @@ DESCR("export a snapshot");
 DATA(insert OID = 3810 (  pg_is_in_recovery		PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 16 "" _null_ _null_ _null_ _null_ pg_is_in_recovery _null_ _null_ _null_ ));
 DESCR("true if server is in recovery");
 
-DATA(insert OID = 3820 ( pg_last_xlog_receive_location	PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 25 "" _null_ _null_ _null_ _null_ pg_last_xlog_receive_location _null_ _null_ _null_ ));
+DATA(insert OID = 3820 ( pg_last_xlog_receive_location	PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 3220 "" _null_ _null_ _null_ _null_ pg_last_xlog_receive_location _null_ _null_ _null_ ));
 DESCR("current xlog flush location");
-DATA(insert OID = 3821 ( pg_last_xlog_replay_location	PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 25 "" _null_ _null_ _null_ _null_ pg_last_xlog_replay_location _null_ _null_ _null_ ));
+DATA(insert OID = 3821 ( pg_last_xlog_replay_location	PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 3220 "" _null_ _null_ _null_ _null_ pg_last_xlog_replay_location _null_ _null_ _null_ ));
 DESCR("last xlog replay location");
 DATA(insert OID = 3830 ( pg_last_xact_replay_timestamp	PGNSP PGUID 12 1 0 0 0 f f f f t f v 0 0 1184 "" _null_ _null_ _null_ _null_ pg_last_xact_replay_timestamp _null_ _null_ _null_ ));
 DESCR("timestamp of last replay xact");
@@ -4800,11 +4800,11 @@ DATA(insert OID = 3473 (  spg_range_quad_leaf_consistent	PGNSP PGUID 12 1 0 0 0
 DESCR("SP-GiST support for quad tree over range");
 
 /* replication slots */
-DATA(insert OID = 3779 (  pg_create_physical_replication_slot PGNSP PGUID 12 1 0 0 0 f f f f f f v 1 0 2249 "19" "{19,25,25}" "{i,o,o}" "{slotname,slotname,xlog_position}" _null_ pg_create_physical_replication_slot _null_ _null_ _null_ ));
+DATA(insert OID = 3779 (  pg_create_physical_replication_slot PGNSP PGUID 12 1 0 0 0 f f f f f f v 1 0 2249 "19" "{19,25,3220}" "{i,o,o}" "{slotname,slotname,xlog_position}" _null_ pg_create_physical_replication_slot _null_ _null_ _null_ ));
 DESCR("create a physical replication slot");
 DATA(insert OID = 3780 (  pg_drop_replication_slot PGNSP PGUID 12 1 0 0 0 f f f f f f v 1 0 2278 "19" _null_ _null_ _null_ _null_ pg_drop_replication_slot _null_ _null_ _null_ ));
 DESCR("drop a replication slot");
-DATA(insert OID = 3781 (  pg_get_replication_slots	PGNSP PGUID 12 1 10 0 0 f f f f f t s 0 0 2249 "" "{25,25,26,16,28,25}" "{o,o,o,o,o,o}" "{slot_name,slot_type,datoid,active,xmin,restart_lsn}" _null_ pg_get_replication_slots _null_ _null_ _null_ ));
+DATA(insert OID = 3781 (  pg_get_replication_slots	PGNSP PGUID 12 1 10 0 0 f f f f f t s 0 0 2249 "" "{25,25,26,16,28,3220}" "{o,o,o,o,o,o}" "{slot_name,slot_type,datoid,active,xmin,restart_lsn}" _null_ pg_get_replication_slots _null_ _null_ _null_ ));
 DESCR("information about replication slots currently in use");
 
 /* event triggers */