diff options
author | Marc G. Fournier <scrappy@hub.org> | 1996-10-04 20:37:09 +0000 |
---|---|---|
committer | Marc G. Fournier <scrappy@hub.org> | 1996-10-04 20:37:09 +0000 |
commit | cbb3edc7e57d685a4b67f929002e2ac629755aad (patch) | |
tree | 9709cc7af29b1644289eb92814dffec02c971c58 | |
parent | 93c7dcffa2e0ec304bf968c9977670d81ea58bd3 (diff) | |
download | postgresql-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.c | 40 |
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')); |