summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc G. Fournier <scrappy@hub.org>1996-10-04 20:37:09 +0000
committerMarc G. Fournier <scrappy@hub.org>1996-10-04 20:37:09 +0000
commitcbb3edc7e57d685a4b67f929002e2ac629755aad (patch)
tree9709cc7af29b1644289eb92814dffec02c971c58
parent93c7dcffa2e0ec304bf968c9977670d81ea58bd3 (diff)
downloadpostgresql-cbb3edc7e57d685a4b67f929002e2ac629755aad.tar.gz
> - it excludes system-relation too (relkind == 's'). (Note: Vacuum updates
pg_class > by overwriting existing tuple for vacrel, so there are no many reasons to vacuum pg_class). > > It can be done somewhere in _vc_getrels - near to checks against archive relations > and relations on the write-once storage managers... > > Excuse me - I forgot to say about this. > Attached is the recently posted fix for this. Thanks. Submitted by: Bruce Momjian <maillist@candle.pha.pa.us>
-rw-r--r--src/backend/commands/vacuum.c40
1 files changed, 25 insertions, 15 deletions
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index 7e1514cd2a..7987101a55 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.1.1.1 1996/07/09 06:21:22 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.1.1.1.2.1 1996/10/04 20:37:09 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
@@ -44,10 +44,10 @@
bool VacuumRunning = false;
/* non-export function prototypes */
-static void _vc_init(char *vacrel);
-static void _vc_shutdown(char *vacrel);
-static void _vc_vacuum(char *vacrel);
-static VRelList _vc_getrels(Portal p, char *vacrel);
+static void _vc_init(void);
+static void _vc_shutdown(void);
+static void _vc_vacuum(NameData *VacRelP);
+static VRelList _vc_getrels(Portal p, NameData *VacRelP);
static void _vc_vacone(Portal p, VRelList curvrl);
static void _vc_vacheap(Portal p, VRelList curvrl, Relation onerel);
static void _vc_vacindices(VRelList curvrl, Relation onerel);
@@ -65,14 +65,24 @@ static bool _vc_isarchrel(char *rname);
void
vacuum(char *vacrel)
{
+ NameData VacRel;
+
+ /* vacrel gets de-allocated on transaction commit */
+
/* initialize vacuum cleaner */
- _vc_init(vacrel);
+ _vc_init();
/* vacuum the database */
- _vc_vacuum(vacrel);
+ if (vacrel)
+ {
+ strcpy(VacRel.data,vacrel);
+ _vc_vacuum(&VacRel);
+ }
+ else
+ _vc_vacuum(NULL);
/* clean up */
- _vc_shutdown(vacrel);
+ _vc_shutdown();
}
/*
@@ -93,7 +103,7 @@ vacuum(char *vacrel)
* PostgresMain().
*/
static void
-_vc_init(char *vacrel)
+_vc_init()
{
int fd;
@@ -116,7 +126,7 @@ _vc_init(char *vacrel)
}
static void
-_vc_shutdown(char *vacrel)
+_vc_shutdown()
{
/* on entry, not in a transaction */
if (unlink("pg_vlock") < 0)
@@ -147,7 +157,7 @@ vc_abort()
* locks at one time.
*/
static void
-_vc_vacuum(char *vacrel)
+_vc_vacuum(NameData *VacRelP)
{
VRelList vrl, cur;
char *pname;
@@ -166,7 +176,7 @@ _vc_vacuum(char *vacrel)
pfree(pname);
/* get list of relations */
- vrl = _vc_getrels(p, vacrel);
+ vrl = _vc_getrels(p, VacRelP);
/* vacuum each heap relation */
for (cur = vrl; cur != (VRelList) NULL; cur = cur->vrl_next)
@@ -178,7 +188,7 @@ _vc_vacuum(char *vacrel)
}
static VRelList
-_vc_getrels(Portal p, char *vacrel)
+_vc_getrels(Portal p, NameData *VacRelP)
{
Relation pgclass;
TupleDesc pgcdesc;
@@ -196,10 +206,10 @@ _vc_getrels(Portal p, char *vacrel)
StartTransactionCommand();
- if (vacrel) {
+ if (VacRelP->data) {
ScanKeyEntryInitialize(&pgckey, 0x0, Anum_pg_class_relname,
NameEqualRegProcedure,
- PointerGetDatum(vacrel));
+ PointerGetDatum(VacRelP->data));
} else {
ScanKeyEntryInitialize(&pgckey, 0x0, Anum_pg_class_relkind,
CharacterEqualRegProcedure, CharGetDatum('r'));