aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2024-08-30 08:49:24 +0900
committerMichael Paquier <michael@paquier.xyz>2024-08-30 08:49:24 +0900
commita83a944e9fdd573802c82d961126ba07bfb65f98 (patch)
tree0d72e09dd3d9acc8b40537b064da18d49d787b00 /src
parent43f2e7634d838b39fd3fa3aaddb6964392d98312 (diff)
downloadpostgresql-a83a944e9fdd573802c82d961126ba07bfb65f98.tar.gz
postgresql-a83a944e9fdd573802c82d961126ba07bfb65f98.zip
Rename pg_sequence_read_tuple() to pg_get_sequence_data()
This commit removes log_cnt from the tuple returned by the SQL function. This field is an internal counter that tracks when a WAL record should be generated for a sequence, and it is reset each time the sequence is restored or recovered. It is not necessary to rebuild the sequence DDL commands for pg_dump and pg_upgrade where this function is used. The field can still be queried with a scan of the "table" created under-the-hood for a sequence. Issue noticed while hacking on a feature that can rely on this new function rather than pg_sequence_last_value(), aimed at making sequence computation more easily pluggable. Bump catalog version. Reviewed-by: Nathan Bossart Discussion: https://postgr.es/m/Zsvka3r-y2ZoXAdH@paquier.xyz
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/sequence.c17
-rw-r--r--src/bin/pg_dump/pg_dump.c4
-rw-r--r--src/include/catalog/catversion.h2
-rw-r--r--src/include/catalog/pg_proc.dat8
-rw-r--r--src/test/regress/expected/sequence.out10
-rw-r--r--src/test/regress/sql/sequence.sql4
6 files changed, 22 insertions, 23 deletions
diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c
index 8c1131f0202..b37fd688d34 100644
--- a/src/backend/commands/sequence.c
+++ b/src/backend/commands/sequence.c
@@ -1781,23 +1781,22 @@ pg_sequence_parameters(PG_FUNCTION_ARGS)
* without needing to individually query each sequence relation.
*/
Datum
-pg_sequence_read_tuple(PG_FUNCTION_ARGS)
+pg_get_sequence_data(PG_FUNCTION_ARGS)
{
+#define PG_GET_SEQUENCE_DATA_COLS 2
Oid relid = PG_GETARG_OID(0);
SeqTable elm;
Relation seqrel;
- Datum values[SEQ_COL_LASTCOL] = {0};
- bool isnull[SEQ_COL_LASTCOL] = {0};
+ Datum values[PG_GET_SEQUENCE_DATA_COLS] = {0};
+ bool isnull[PG_GET_SEQUENCE_DATA_COLS] = {0};
TupleDesc resultTupleDesc;
HeapTuple resultHeapTuple;
Datum result;
- resultTupleDesc = CreateTemplateTupleDesc(SEQ_COL_LASTCOL);
+ resultTupleDesc = CreateTemplateTupleDesc(PG_GET_SEQUENCE_DATA_COLS);
TupleDescInitEntry(resultTupleDesc, (AttrNumber) 1, "last_value",
INT8OID, -1, 0);
- TupleDescInitEntry(resultTupleDesc, (AttrNumber) 2, "log_cnt",
- INT8OID, -1, 0);
- TupleDescInitEntry(resultTupleDesc, (AttrNumber) 3, "is_called",
+ TupleDescInitEntry(resultTupleDesc, (AttrNumber) 2, "is_called",
BOOLOID, -1, 0);
resultTupleDesc = BlessTupleDesc(resultTupleDesc);
@@ -1818,8 +1817,7 @@ pg_sequence_read_tuple(PG_FUNCTION_ARGS)
seq = read_seq_tuple(seqrel, &buf, &seqtuple);
values[0] = Int64GetDatum(seq->last_value);
- values[1] = Int64GetDatum(seq->log_cnt);
- values[2] = BoolGetDatum(seq->is_called);
+ values[1] = BoolGetDatum(seq->is_called);
UnlockReleaseBuffer(buf);
}
@@ -1831,6 +1829,7 @@ pg_sequence_read_tuple(PG_FUNCTION_ARGS)
resultHeapTuple = heap_form_tuple(resultTupleDesc, values, isnull);
result = HeapTupleGetDatum(resultHeapTuple);
PG_RETURN_DATUM(result);
+#undef PG_GET_SEQUENCE_DATA_COLS
}
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index b6e01d3d292..f7720ad53b7 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -17381,7 +17381,7 @@ collectSequences(Archive *fout)
* versions, but for now it seems unlikely to be worth it.
*
* Since version 18, we can gather the sequence data in this query with
- * pg_sequence_read_tuple(), but we only do so for non-schema-only dumps.
+ * pg_get_sequence_data(), but we only do so for non-schema-only dumps.
*/
if (fout->remoteVersion < 100000)
return;
@@ -17401,7 +17401,7 @@ collectSequences(Archive *fout)
"seqcache, seqcycle, "
"last_value, is_called "
"FROM pg_catalog.pg_sequence, "
- "pg_sequence_read_tuple(seqrelid) "
+ "pg_get_sequence_data(seqrelid) "
"ORDER BY seqrelid;";
res = ExecuteSqlQuery(fout, query, PGRES_TUPLES_OK);
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index 9a0ae278239..1980d492c3d 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -57,6 +57,6 @@
*/
/* yyyymmddN */
-#define CATALOG_VERSION_NO 202408122
+#define CATALOG_VERSION_NO 202408301
#endif
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 4abc6d95262..85f42be1b3c 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -3330,11 +3330,11 @@
prorettype => 'int8', proargtypes => 'regclass',
prosrc => 'pg_sequence_last_value' },
{ oid => '9876', descr => 'return sequence tuple, for use by pg_dump',
- proname => 'pg_sequence_read_tuple', provolatile => 'v', proparallel => 'u',
+ proname => 'pg_get_sequence_data', provolatile => 'v', proparallel => 'u',
prorettype => 'record', proargtypes => 'regclass',
- proallargtypes => '{regclass,int8,int8,bool}', proargmodes => '{i,o,o,o}',
- proargnames => '{sequence_oid,last_value,log_cnt,is_called}',
- prosrc => 'pg_sequence_read_tuple' },
+ proallargtypes => '{regclass,int8,bool}', proargmodes => '{i,o,o}',
+ proargnames => '{sequence_oid,last_value,is_called}',
+ prosrc => 'pg_get_sequence_data' },
{ oid => '275', descr => 'return the next oid for a system table',
proname => 'pg_nextoid', provolatile => 'v', proparallel => 'u',
diff --git a/src/test/regress/expected/sequence.out b/src/test/regress/expected/sequence.out
index e749c4574e3..15925d99c8a 100644
--- a/src/test/regress/expected/sequence.out
+++ b/src/test/regress/expected/sequence.out
@@ -839,11 +839,11 @@ SELECT nextval('test_seq1');
3
(1 row)
--- pg_sequence_read_tuple
-SELECT * FROM pg_sequence_read_tuple('test_seq1');
- last_value | log_cnt | is_called
-------------+---------+-----------
- 10 | 32 | t
+-- pg_get_sequence_data
+SELECT * FROM pg_get_sequence_data('test_seq1');
+ last_value | is_called
+------------+-----------
+ 10 | t
(1 row)
DROP SEQUENCE test_seq1;
diff --git a/src/test/regress/sql/sequence.sql b/src/test/regress/sql/sequence.sql
index ea447938aea..2c220b60749 100644
--- a/src/test/regress/sql/sequence.sql
+++ b/src/test/regress/sql/sequence.sql
@@ -413,7 +413,7 @@ SELECT nextval('test_seq1');
SELECT nextval('test_seq1');
SELECT nextval('test_seq1');
--- pg_sequence_read_tuple
-SELECT * FROM pg_sequence_read_tuple('test_seq1');
+-- pg_get_sequence_data
+SELECT * FROM pg_get_sequence_data('test_seq1');
DROP SEQUENCE test_seq1;