diff options
| -rw-r--r-- | doc/src/sgml/catalogs.sgml | 2 | ||||
| -rw-r--r-- | doc/src/sgml/func.sgml | 24 | ||||
| -rw-r--r-- | src/backend/access/transam/xlogfuncs.c | 153 | ||||
| -rw-r--r-- | src/backend/catalog/system_views.sql | 2 | ||||
| -rw-r--r-- | src/backend/replication/slotfuncs.c | 8 | ||||
| -rw-r--r-- | src/include/catalog/catversion.h | 2 | ||||
| -rw-r--r-- | src/include/catalog/pg_proc.h | 26 | 
7 files changed, 45 insertions, 172 deletions
| diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index dca24fc0705..908f947f81a 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 be548d79826..a6396620fe7 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 9133179a954..5f8d65514c1 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]; @@ -300,20 +271,6 @@ pg_xlogfile_name_offset(PG_FUNCTION_ARGS)  				 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); @@ -482,81 +424,16 @@ pg_is_in_recovery(PG_FUNCTION_ARGS)  }  /* - * 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 f02efeca974..a7c6a4e094b 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 98a860e5288..761c0f536fb 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 cd1afc842df..1789eb357d5 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 ac726462e46..11c1e1abc10 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 */ | 
