<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
<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>
<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>
<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
<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
<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
#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
bool fast = PG_GETARG_BOOL(1);
char *backupidstr;
XLogRecPtr startpoint;
- char startxlogstr[MAXFNAMELEN];
backupidstr = text_to_cstring(backupid);
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);
}
/*
pg_stop_backup(PG_FUNCTION_ARGS)
{
XLogRecPtr stoppoint;
- char stopxlogstr[MAXFNAMELEN];
if (!superuser() && !has_rolreplication(GetUserId()))
ereport(ERROR,
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);
}
/*
pg_switch_xlog(PG_FUNCTION_ARGS)
{
XLogRecPtr switchpoint;
- char location[MAXFNAMELEN];
if (!superuser())
ereport(ERROR,
/*
* 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);
}
/*
text *restore_name = PG_GETARG_TEXT_P(0);
char *restore_name_str;
XLogRecPtr restorepoint;
- char location[MAXFNAMELEN];
if (!superuser())
ereport(ERROR,
/*
* 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);
}
/*
pg_current_xlog_location(PG_FUNCTION_ARGS)
{
XLogRecPtr current_recptr;
- char location[MAXFNAMELEN];
if (RecoveryInProgress())
ereport(ERROR,
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);
}
/*
pg_current_xlog_insert_location(PG_FUNCTION_ARGS)
{
XLogRecPtr current_recptr;
- char location[MAXFNAMELEN];
if (RecoveryInProgress())
ereport(ERROR,
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);
}
/*
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);
}
/*
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);
}
/*
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];
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!
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())
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);
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);
}
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)
#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);
bool active;
Oid database;
const char *slot_name;
-
- char restart_lsn_s[MAXFNAMELEN];
int i;
SpinLockAcquire(&slot->mutex);
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)
else
nulls[i++] = true;
if (restart_lsn != InvalidTransactionId)
- values[i++] = CStringGetTextDatum(restart_lsn_s);
+ values[i++] = LSNGetDatum(restart_lsn);
else
nulls[i++] = true;
*/
/* yyyymmddN */
-#define CATALOG_VERSION_NO 201402191
+#define CATALOG_VERSION_NO 201402192
#endif
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_ ));
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");
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 */