summaryrefslogtreecommitdiff
path: root/src/backend/postmaster
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/postmaster')
-rw-r--r--src/backend/postmaster/autovacuum.c29
1 files changed, 8 insertions, 21 deletions
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index 4a5a05c1b28..a19e504b0ef 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.17 2006/04/27 15:57:10 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.18 2006/05/03 22:45:26 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -46,6 +46,7 @@
#include "utils/memutils.h"
#include "utils/ps_status.h"
#include "utils/relcache.h"
+#include "utils/syscache.h"
/*
@@ -493,9 +494,6 @@ autovac_get_database_list(void)
static void
process_whole_db(void)
{
- Relation dbRel;
- ScanKeyData entry[1];
- SysScanDesc scan;
HeapTuple tup;
Form_pg_database dbForm;
bool freeze;
@@ -511,21 +509,12 @@ process_whole_db(void)
*/
pgstat_vacuum_tabstat();
- dbRel = heap_open(DatabaseRelationId, AccessShareLock);
-
- /* Must use a table scan, since there's no syscache for pg_database */
- ScanKeyInit(&entry[0],
- ObjectIdAttributeNumber,
- BTEqualStrategyNumber, F_OIDEQ,
- ObjectIdGetDatum(MyDatabaseId));
-
- scan = systable_beginscan(dbRel, DatabaseOidIndexId, true,
- SnapshotNow, 1, entry);
-
- tup = systable_getnext(scan);
-
+ /* Look up the pg_database entry and decide whether to FREEZE */
+ tup = SearchSysCache(DATABASEOID,
+ ObjectIdGetDatum(MyDatabaseId),
+ 0, 0, 0);
if (!HeapTupleIsValid(tup))
- elog(ERROR, "could not find tuple for database %u", MyDatabaseId);
+ elog(ERROR, "cache lookup failed for database %u", MyDatabaseId);
dbForm = (Form_pg_database) GETSTRUCT(tup);
@@ -534,9 +523,7 @@ process_whole_db(void)
else
freeze = false;
- systable_endscan(scan);
-
- heap_close(dbRel, AccessShareLock);
+ ReleaseSysCache(tup);
elog(DEBUG2, "autovacuum: VACUUM%s whole database",
(freeze) ? " FREEZE" : "");