vacuum fix.
This commit is contained in:
parent
a53ea467e1
commit
d8dbbc8cf9
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.56 1998/08/28 03:36:25 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.57 1998/08/28 04:57:19 momjian Exp $
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* INTERFACE ROUTINES
|
* INTERFACE ROUTINES
|
||||||
@ -1267,6 +1267,7 @@ FormIndexDatum(int numberOfAttributes,
|
|||||||
FuncIndexInfoPtr fInfo)
|
FuncIndexInfoPtr fInfo)
|
||||||
{
|
{
|
||||||
AttrNumber i;
|
AttrNumber i;
|
||||||
|
int offset;
|
||||||
bool isNull;
|
bool isNull;
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
@ -1276,16 +1277,19 @@ FormIndexDatum(int numberOfAttributes,
|
|||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
for (i = 0; i < numberOfAttributes; i++)
|
for (i = 1; i <= numberOfAttributes; i++)
|
||||||
{
|
{
|
||||||
datum[i] = PointerGetDatum(GetIndexValue(heapTuple,
|
offset = AttrNumberGetAttrOffset(i);
|
||||||
|
|
||||||
|
datum[offset] =
|
||||||
|
PointerGetDatum(GetIndexValue(heapTuple,
|
||||||
heapDescriptor,
|
heapDescriptor,
|
||||||
i,
|
offset,
|
||||||
attributeNumber,
|
attributeNumber,
|
||||||
fInfo,
|
fInfo,
|
||||||
&isNull));
|
&isNull));
|
||||||
|
|
||||||
nullv[i] = (isNull) ? 'n' : ' ';
|
nullv[offset] = (isNull) ? 'n' : ' ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.77 1998/08/28 03:36:26 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.78 1998/08/28 04:57:21 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
|
|
||||||
|
#include "miscadmin.h"
|
||||||
#include "access/genam.h"
|
#include "access/genam.h"
|
||||||
#include "access/heapam.h"
|
#include "access/heapam.h"
|
||||||
#include "access/transam.h"
|
#include "access/transam.h"
|
||||||
@ -189,8 +190,8 @@ vc_init()
|
|||||||
if ((fd = open("pg_vlock", O_CREAT | O_EXCL, 0600)) < 0)
|
if ((fd = open("pg_vlock", O_CREAT | O_EXCL, 0600)) < 0)
|
||||||
{
|
{
|
||||||
elog(ERROR, "Can't create lock file. Is another vacuum cleaner running?\n\
|
elog(ERROR, "Can't create lock file. Is another vacuum cleaner running?\n\
|
||||||
\tIf not, you may remove the pg_vlock file in the pgsql/data/base/your_db\n\
|
\tIf not, you may remove the pg_vlock file in the %s\n\
|
||||||
\tdirectory");
|
\tdirectory", DatabasePath);
|
||||||
}
|
}
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
@ -2202,11 +2203,10 @@ static void
|
|||||||
vc_mkindesc(Relation onerel, int nindices, Relation *Irel, IndDesc **Idesc)
|
vc_mkindesc(Relation onerel, int nindices, Relation *Irel, IndDesc **Idesc)
|
||||||
{
|
{
|
||||||
IndDesc *idcur;
|
IndDesc *idcur;
|
||||||
HeapTuple tuple, cachetuple;
|
HeapTuple cachetuple;
|
||||||
AttrNumber *attnumP;
|
AttrNumber *attnumP;
|
||||||
int natts;
|
int natts;
|
||||||
int i;
|
int i;
|
||||||
Buffer buffer;
|
|
||||||
|
|
||||||
*Idesc = (IndDesc *) palloc(nindices * sizeof(IndDesc));
|
*Idesc = (IndDesc *) palloc(nindices * sizeof(IndDesc));
|
||||||
|
|
||||||
@ -2216,13 +2216,8 @@ vc_mkindesc(Relation onerel, int nindices, Relation *Irel, IndDesc **Idesc)
|
|||||||
ObjectIdGetDatum(RelationGetRelid(Irel[i])),
|
ObjectIdGetDatum(RelationGetRelid(Irel[i])),
|
||||||
0, 0, 0);
|
0, 0, 0);
|
||||||
Assert(cachetuple);
|
Assert(cachetuple);
|
||||||
|
/* we never free the copy we make, because Idesc needs it for later */
|
||||||
/* get the buffer cache tuple */
|
idcur->tform = (IndexTupleForm) GETSTRUCT(cachetuple);
|
||||||
tuple = heap_fetch(onerel, SnapshotNow, &cachetuple->t_ctid, &buffer);
|
|
||||||
Assert(tuple);
|
|
||||||
pfree(cachetuple);
|
|
||||||
|
|
||||||
idcur->tform = (IndexTupleForm) GETSTRUCT(tuple);
|
|
||||||
for (attnumP = &(idcur->tform->indkey[0]), natts = 0;
|
for (attnumP = &(idcur->tform->indkey[0]), natts = 0;
|
||||||
*attnumP != InvalidAttrNumber && natts != INDEX_MAX_KEYS;
|
*attnumP != InvalidAttrNumber && natts != INDEX_MAX_KEYS;
|
||||||
attnumP++, natts++);
|
attnumP++, natts++);
|
||||||
@ -2238,7 +2233,6 @@ vc_mkindesc(Relation onerel, int nindices, Relation *Irel, IndDesc **Idesc)
|
|||||||
idcur->finfoP = (FuncIndexInfo *) NULL;
|
idcur->finfoP = (FuncIndexInfo *) NULL;
|
||||||
|
|
||||||
idcur->natts = natts;
|
idcur->natts = natts;
|
||||||
ReleaseBuffer(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* vc_mkindesc */
|
} /* vc_mkindesc */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user