mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	Expose sequence page LSN via pg_get_sequence_data.
This patch enhances the pg_get_sequence_data function to include the page-level LSN (Log Sequence Number) of the sequence. This additional metadata will be used by upcoming patches to support synchronization of sequences during logical replication. By exposing the LSN, we enable more accurate tracking of sequence changes, which is essential for maintaining consistency across replicated nodes. Author: vignesh C <vignesh21@gmail.com> Reviewed-by: shveta malik <shveta.malik@gmail.com> Reviewed-by: Masahiko Sawada <sawada.mshk@gmail.com> Reviewed-by: Hayato Kuroda <kuroda.hayato@fujitsu.com> Reviewed-by: Amit Kapila <amit.kapila16@gmail.com> Discussion: https://www.postgresql.org/message-id/CAA4eK1LC+KJiAkSrpE_NwvNdidw9F2os7GERUeSxSKv71gXysQ@mail.gmail.com
This commit is contained in:
		| @@ -45,6 +45,7 @@ | ||||
| #include "utils/acl.h" | ||||
| #include "utils/builtins.h" | ||||
| #include "utils/lsyscache.h" | ||||
| #include "utils/pg_lsn.h" | ||||
| #include "utils/resowner.h" | ||||
| #include "utils/syscache.h" | ||||
| #include "utils/varlena.h" | ||||
| @@ -1795,7 +1796,7 @@ pg_sequence_parameters(PG_FUNCTION_ARGS) | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Return the sequence tuple. | ||||
|  * Return the sequence tuple along with its page LSN. | ||||
|  * | ||||
|  * This is primarily intended for use by pg_dump to gather sequence data | ||||
|  * without needing to individually query each sequence relation. | ||||
| @@ -1803,7 +1804,7 @@ pg_sequence_parameters(PG_FUNCTION_ARGS) | ||||
| Datum | ||||
| pg_get_sequence_data(PG_FUNCTION_ARGS) | ||||
| { | ||||
| #define PG_GET_SEQUENCE_DATA_COLS	2 | ||||
| #define PG_GET_SEQUENCE_DATA_COLS	3 | ||||
| 	Oid			relid = PG_GETARG_OID(0); | ||||
| 	SeqTable	elm; | ||||
| 	Relation	seqrel; | ||||
| @@ -1818,6 +1819,8 @@ pg_get_sequence_data(PG_FUNCTION_ARGS) | ||||
| 					   INT8OID, -1, 0); | ||||
| 	TupleDescInitEntry(resultTupleDesc, (AttrNumber) 2, "is_called", | ||||
| 					   BOOLOID, -1, 0); | ||||
| 	TupleDescInitEntry(resultTupleDesc, (AttrNumber) 3, "page_lsn", | ||||
| 					   LSNOID, -1, 0); | ||||
| 	resultTupleDesc = BlessTupleDesc(resultTupleDesc); | ||||
|  | ||||
| 	init_sequence(relid, &elm, &seqrel); | ||||
| @@ -1833,11 +1836,14 @@ pg_get_sequence_data(PG_FUNCTION_ARGS) | ||||
| 		Buffer		buf; | ||||
| 		HeapTupleData seqtuple; | ||||
| 		Form_pg_sequence_data seq; | ||||
| 		Page		page; | ||||
|  | ||||
| 		seq = read_seq_tuple(seqrel, &buf, &seqtuple); | ||||
| 		page = BufferGetPage(buf); | ||||
|  | ||||
| 		values[0] = Int64GetDatum(seq->last_value); | ||||
| 		values[1] = BoolGetDatum(seq->is_called); | ||||
| 		values[2] = LSNGetDatum(PageGetLSN(page)); | ||||
|  | ||||
| 		UnlockReleaseBuffer(buf); | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user