<programlisting>
WARNING: database "mydb" must be vacuumed within 177009986 transactions
-HINT: To avoid a database shutdown, execute a full-database VACUUM in "mydb".
+HINT: To avoid a database shutdown, execute a database-wide VACUUM in "mydb".
</programlisting>
+ (A manual <command>VACUUM</> should fix the problem, as suggested by the
+ hint; but note that the <command>VACUUM</> must be performed by a
+ superuser, else it will fail to process system catalogs and thus not
+ be able to advance the database's <structfield>datfrozenxid</>.)
If these warnings are
ignored, the system will shut down and refuse to execute any new
transactions once there are fewer than 1 million transactions left
<para>
With no parameter, <command>VACUUM</command> processes every table in the
- current database. With a parameter, <command>VACUUM</command> processes
- only that table.
+ current database that the current user has permission to vacuum.
+ With a parameter, <command>VACUUM</command> processes only that table.
</para>
<para>
<refsect1>
<title>Notes</title>
+ <para>
+ To vacuum a table, one must ordinarily be the table's owner or a
+ superuser. However, database owners are allowed to
+ vacuum all tables in their databases, except shared catalogs.
+ (The restriction for shared catalogs means that a true database-wide
+ <command>VACUUM</> can only be performed by a superuser.)
+ <command>VACUUM</> will skip over any tables that the calling user
+ does not have permission to vacuum.
+ </para>
+
<para>
<command>VACUUM</> cannot be executed inside a transaction block.
</para>
(errmsg("database \"%s\" must be vacuumed within %u transactions",
NameStr(ShmemVariableCache->limit_datname),
ShmemVariableCache->xidWrapLimit - xid),
- errhint("To avoid a database shutdown, execute a full-database VACUUM in \"%s\".",
+ errhint("To avoid a database shutdown, execute a database-wide VACUUM in \"%s\".",
NameStr(ShmemVariableCache->limit_datname))));
}
(errmsg("database \"%s\" must be vacuumed within %u transactions",
NameStr(*oldest_datname),
xidWrapLimit - curXid),
- errhint("To avoid a database shutdown, execute a full-database VACUUM in \"%s\".",
+ errhint("To avoid a database shutdown, execute a database-wide VACUUM in \"%s\".",
NameStr(*oldest_datname))));
}