pg.ddx.io pgsql-bugs@postgresql.org mailing list archive
help / color / mirror / Atom feed From: Nathan Bossart <nathandbossart@gmail.com>
Subject: [PATCH v1 2/3] introduce pg_update_datfrozenxid
Date: Tue, 27 Dec 2022 16:20:01 -0800
---
doc/src/sgml/func.sgml | 44 ++++++++++++++++++++++++++++
src/backend/commands/vacuum.c | 12 ++++++++
src/include/catalog/pg_proc.dat | 4 +++
src/include/commands/vacuum.h | 1 +
src/test/regress/expected/vacuum.out | 6 ++++
src/test/regress/sql/vacuum.sql | 1 +
6 files changed, 68 insertions(+)
inline patch 1: doc/src/sgml/func.sgml, src/backend/commands/vacuum.c, src/include/catalog/pg_proc.dat and 3 more (+68/-0 lines) download inline-1.patch diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 3bf8d021c3..a97c7794f2 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -27285,6 +27285,50 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset
</tgroup>
</table>
+ <para>
+ <xref linkend="functions-admin-db"/> lists functions used to manage the
+ current database.
+ </para>
+
+ <table id="functions-admin-db">
+ <title>Database Management Functions</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="func_table_entry"><para role="func_signature">
+ Function
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="func_table_entry"><para role="func_signature">
+ <indexterm>
+ <primary>pg_update_datfrozenxid</primary>
+ </indexterm>
+ <function>pg_update_datfrozenxid</function> ()
+ <returnvalue>void</returnvalue>
+ </para>
+ <para>
+ Updates the current database's
+ <structname>pg_database</structname>.<structfield>datfrozenxid</structfield>
+ and
+ <structname>pg_database</structname>.<structfield>relminmxid</structfield>
+ values to the minimum of the per-table
+ <structname>pg_class</structname>.<structfield>relfrozenxid</structfield>
+ and
+ <structname>pg_class</structname>.<structfield>relminmxid</structfield>
+ values.
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
<para>
<xref linkend="functions-admin-collation"/> lists functions used to manage
collations.
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index 51537aa5ba..9b5049da2d 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -39,6 +39,7 @@
#include "catalog/pg_database.h"
#include "catalog/pg_inherits.h"
#include "catalog/pg_namespace.h"
+#include "catalog/pg_proc.h"
#include "commands/cluster.h"
#include "commands/defrem.h"
#include "commands/vacuum.h"
@@ -1415,6 +1416,17 @@ vac_update_relstats(Relation relation,
}
+/*
+ * Allow calling vac_update_datfrozenxid() via SQL.
+ */
+Datum
+pg_update_datfrozenxid(PG_FUNCTION_ARGS)
+{
+ vac_update_datfrozenxid();
+ PG_RETURN_VOID();
+}
+
+
/*
* vac_update_datfrozenxid() -- update pg_database.datfrozenxid for our DB
*
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 7056c95371..23efafba49 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -11817,6 +11817,10 @@
proargmodes => '{i,o,o,o}',
proargnames => '{slot_name,name,size,modification}',
prosrc => 'pg_ls_replslotdir' },
+{ oid => '2173',
+ descr => 'update datfrozenxid and datminmxid for current database',
+ proname => 'pg_update_datfrozenxid', provolatile => 'v', prorettype => 'void',
+ proargtypes => '', prosrc => 'pg_update_datfrozenxid' },
# hash partitioning constraint function
{ oid => '5028', descr => 'hash partition CHECK constraint',
diff --git a/src/include/commands/vacuum.h b/src/include/commands/vacuum.h
index 700489040e..d594054186 100644
--- a/src/include/commands/vacuum.h
+++ b/src/include/commands/vacuum.h
@@ -329,6 +329,7 @@ extern void vac_update_relstats(Relation relation,
extern bool vacuum_get_cutoffs(Relation rel, const VacuumParams *params,
struct VacuumCutoffs *cutoffs);
extern bool vacuum_xid_failsafe_check(const struct VacuumCutoffs *cutoffs);
+extern Datum pg_update_datfrozenxid(PG_FUNCTION_ARGS);
extern void vac_update_datfrozenxid(void);
extern void vacuum_delay_point(void);
extern bool vacuum_is_permitted_for_relation(Oid relid, Form_pg_class reltuple,
diff --git a/src/test/regress/expected/vacuum.out b/src/test/regress/expected/vacuum.out
index 19c405417d..b559d2fe84 100644
--- a/src/test/regress/expected/vacuum.out
+++ b/src/test/regress/expected/vacuum.out
@@ -284,6 +284,12 @@ VACUUM (PROCESS_TOAST FALSE, FULL) vactst;
ERROR: PROCESS_TOAST required with VACUUM FULL
-- UPDATE_DATFROZENXID option
VACUUM (UPDATE_DATFROZENXID FALSE) vactst;
+SELECT pg_update_datfrozenxid();
+ pg_update_datfrozenxid
+------------------------
+
+(1 row)
+
DROP TABLE vaccluster;
DROP TABLE vactst;
DROP TABLE vacparted;
diff --git a/src/test/regress/sql/vacuum.sql b/src/test/regress/sql/vacuum.sql
index 8ab3a93459..4a19f2fa30 100644
--- a/src/test/regress/sql/vacuum.sql
+++ b/src/test/regress/sql/vacuum.sql
@@ -239,6 +239,7 @@ VACUUM (PROCESS_TOAST FALSE, FULL) vactst;
-- UPDATE_DATFROZENXID option
VACUUM (UPDATE_DATFROZENXID FALSE) vactst;
+SELECT pg_update_datfrozenxid();
DROP TABLE vaccluster;
DROP TABLE vactst;
--
2.25.1
--SUOF0GtieIMvvwua
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="v1-0003-update-datfrozenxid-datminmxid-once-per-database-.patch"
Message-ID: <no-message-id-28514@localhost>
Permalink: ../no-message-id-28514@localhost/
Also on: postgresql.org/message-id/no-message-id-28514@localhost
copy link · copy postgr.es · copy git am
reply Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-bugs@postgresql.org
Cc: nathandbossart@gmail.com
Subject: Re: [PATCH v1 2/3] introduce pg_update_datfrozenxid
In-Reply-To: <no-message-id-28514@localhost>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox