mirror of
https://github.com/postgres/postgres.git
synced 2025-11-10 17:42:29 +03:00
Tablespaces. Alternate database locations are dead, long live tablespaces.
There are various things left to do: contrib dbsize and oid2name modules need work, and so does the documentation. Also someone should think about COMMENT ON TABLESPACE and maybe RENAME TABLESPACE. Also initlocation is dead, it just doesn't know it yet. Gavin Sherry and Tom Lane.
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.170 2004/06/11 16:43:23 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.171 2004/06/18 06:13:33 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -654,7 +654,7 @@ BufferSync(int percent, int maxpages)
|
||||
*/
|
||||
dirty_buffers = (BufferDesc **) palloc(NBuffers * sizeof(BufferDesc *));
|
||||
buftags = (BufferTag *) palloc(NBuffers * sizeof(BufferTag));
|
||||
|
||||
|
||||
LWLockAcquire(BufMgrLock, LW_EXCLUSIVE);
|
||||
num_buffer_dirty = StrategyDirtyBufferList(dirty_buffers, buftags,
|
||||
NBuffers);
|
||||
@@ -832,9 +832,10 @@ AtEOXact_Buffers(bool isCommit)
|
||||
if (isCommit)
|
||||
elog(WARNING,
|
||||
"buffer refcount leak: [%03d] "
|
||||
"(rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%u %d)",
|
||||
"(rel=%u/%u/%u, blockNum=%u, flags=0x%x, refcount=%u %d)",
|
||||
i,
|
||||
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
|
||||
buf->tag.rnode.spcNode, buf->tag.rnode.dbNode,
|
||||
buf->tag.rnode.relNode,
|
||||
buf->tag.blockNum, buf->flags,
|
||||
buf->refcount, PrivateRefCount[i]);
|
||||
|
||||
@@ -1137,9 +1138,10 @@ recheck:
|
||||
{
|
||||
/* the sole pin should be ours */
|
||||
if (bufHdr->refcount != 1 || PrivateRefCount[i - 1] == 0)
|
||||
elog(FATAL, "block %u of %u/%u is still referenced (private %d, global %u)",
|
||||
elog(FATAL, "block %u of %u/%u/%u is still referenced (private %d, global %u)",
|
||||
bufHdr->tag.blockNum,
|
||||
bufHdr->tag.rnode.tblNode,
|
||||
bufHdr->tag.rnode.spcNode,
|
||||
bufHdr->tag.rnode.dbNode,
|
||||
bufHdr->tag.rnode.relNode,
|
||||
PrivateRefCount[i - 1], bufHdr->refcount);
|
||||
/* Make sure it will be released */
|
||||
@@ -1180,13 +1182,7 @@ DropBuffers(Oid dbid)
|
||||
{
|
||||
bufHdr = &BufferDescriptors[i - 1];
|
||||
recheck:
|
||||
|
||||
/*
|
||||
* We know that currently database OID is tblNode but this
|
||||
* probably will be changed in future and this func will be used
|
||||
* to drop tablespace buffers.
|
||||
*/
|
||||
if (bufHdr->tag.rnode.tblNode == dbid)
|
||||
if (bufHdr->tag.rnode.dbNode == dbid)
|
||||
{
|
||||
/*
|
||||
* If there is I/O in progress, better wait till it's done;
|
||||
@@ -1243,10 +1239,11 @@ PrintBufferDescs(void)
|
||||
for (i = 0; i < NBuffers; ++i, ++buf)
|
||||
{
|
||||
elog(LOG,
|
||||
"[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, "
|
||||
"[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u/%u, "
|
||||
"blockNum=%u, flags=0x%x, refcount=%u %d)",
|
||||
i, buf->freeNext, buf->freePrev,
|
||||
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
|
||||
buf->tag.rnode.spcNode, buf->tag.rnode.dbNode,
|
||||
buf->tag.rnode.relNode,
|
||||
buf->tag.blockNum, buf->flags,
|
||||
buf->refcount, PrivateRefCount[i]);
|
||||
}
|
||||
@@ -1257,9 +1254,9 @@ PrintBufferDescs(void)
|
||||
/* interactive backend */
|
||||
for (i = 0; i < NBuffers; ++i, ++buf)
|
||||
{
|
||||
printf("[%-2d] (%u/%u, %u) flags=0x%x, refcount=%u %d)\n",
|
||||
i, buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
|
||||
buf->tag.blockNum,
|
||||
printf("[%-2d] (%u/%u/%u, %u) flags=0x%x, refcount=%u %d)\n",
|
||||
i, buf->tag.rnode.spcNode, buf->tag.rnode.dbNode,
|
||||
buf->tag.rnode.relNode, buf->tag.blockNum,
|
||||
buf->flags, buf->refcount, PrivateRefCount[i]);
|
||||
}
|
||||
}
|
||||
@@ -1278,10 +1275,11 @@ PrintPinnedBufs(void)
|
||||
{
|
||||
if (PrivateRefCount[i] > 0)
|
||||
elog(WARNING,
|
||||
"[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, "
|
||||
"[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u/%u, "
|
||||
"blockNum=%u, flags=0x%x, refcount=%u %d)",
|
||||
i, buf->freeNext, buf->freePrev,
|
||||
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
|
||||
buf->tag.rnode.spcNode, buf->tag.rnode.dbNode,
|
||||
buf->tag.rnode.relNode,
|
||||
buf->tag.blockNum, buf->flags,
|
||||
buf->refcount, PrivateRefCount[i]);
|
||||
}
|
||||
@@ -1464,11 +1462,11 @@ IncrBufferRefCount_Debug(char *file, int line, Buffer buffer)
|
||||
BufferDesc *buf = &BufferDescriptors[buffer - 1];
|
||||
|
||||
fprintf(stderr,
|
||||
"PIN(Incr) %d rel = %u/%u, blockNum = %u, "
|
||||
"PIN(Incr) %d rel = %u/%u/%u, blockNum = %u, "
|
||||
"refcount = %d, file: %s, line: %d\n",
|
||||
buffer,
|
||||
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
|
||||
buf->tag.blockNum,
|
||||
buf->tag.rnode.spcNode, buf->tag.rnode.dbNode,
|
||||
buf->tag.rnode.relNode, buf->tag.blockNum,
|
||||
PrivateRefCount[buffer - 1], file, line);
|
||||
}
|
||||
}
|
||||
@@ -1484,11 +1482,11 @@ ReleaseBuffer_Debug(char *file, int line, Buffer buffer)
|
||||
BufferDesc *buf = &BufferDescriptors[buffer - 1];
|
||||
|
||||
fprintf(stderr,
|
||||
"UNPIN(Rel) %d rel = %u/%u, blockNum = %u, "
|
||||
"UNPIN(Rel) %d rel = %u/%u/%u, blockNum = %u, "
|
||||
"refcount = %d, file: %s, line: %d\n",
|
||||
buffer,
|
||||
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
|
||||
buf->tag.blockNum,
|
||||
buf->tag.rnode.spcNode, buf->tag.rnode.dbNode,
|
||||
buf->tag.rnode.relNode, buf->tag.blockNum,
|
||||
PrivateRefCount[buffer - 1], file, line);
|
||||
}
|
||||
}
|
||||
@@ -1513,11 +1511,11 @@ ReleaseAndReadBuffer_Debug(char *file,
|
||||
BufferDesc *buf = &BufferDescriptors[buffer - 1];
|
||||
|
||||
fprintf(stderr,
|
||||
"UNPIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, "
|
||||
"UNPIN(Rel&Rd) %d rel = %u/%u/%u, blockNum = %u, "
|
||||
"refcount = %d, file: %s, line: %d\n",
|
||||
buffer,
|
||||
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
|
||||
buf->tag.blockNum,
|
||||
buf->tag.rnode.spcNode, buf->tag.rnode.dbNode,
|
||||
buf->tag.rnode.relNode, buf->tag.blockNum,
|
||||
PrivateRefCount[buffer - 1], file, line);
|
||||
}
|
||||
if (ShowPinTrace && BufferIsLocal(buffer) && is_userbuffer(buffer))
|
||||
@@ -1525,11 +1523,11 @@ ReleaseAndReadBuffer_Debug(char *file,
|
||||
BufferDesc *buf = &BufferDescriptors[b - 1];
|
||||
|
||||
fprintf(stderr,
|
||||
"PIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, "
|
||||
"PIN(Rel&Rd) %d rel = %u/%u/%u, blockNum = %u, "
|
||||
"refcount = %d, file: %s, line: %d\n",
|
||||
b,
|
||||
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
|
||||
buf->tag.blockNum,
|
||||
buf->tag.rnode.spcNode, buf->tag.rnode.dbNode,
|
||||
buf->tag.rnode.relNode, buf->tag.blockNum,
|
||||
PrivateRefCount[b - 1], file, line);
|
||||
}
|
||||
return b;
|
||||
@@ -1890,9 +1888,10 @@ AbortBufferIO(void)
|
||||
{
|
||||
ereport(WARNING,
|
||||
(errcode(ERRCODE_IO_ERROR),
|
||||
errmsg("could not write block %u of %u/%u",
|
||||
errmsg("could not write block %u of %u/%u/%u",
|
||||
buf->tag.blockNum,
|
||||
buf->tag.rnode.tblNode,
|
||||
buf->tag.rnode.spcNode,
|
||||
buf->tag.rnode.dbNode,
|
||||
buf->tag.rnode.relNode),
|
||||
errdetail("Multiple failures --- write error may be permanent.")));
|
||||
}
|
||||
@@ -1912,7 +1911,9 @@ buffer_write_error_callback(void *arg)
|
||||
BufferDesc *bufHdr = (BufferDesc *) arg;
|
||||
|
||||
if (bufHdr != NULL)
|
||||
errcontext("writing block %u of relation %u/%u",
|
||||
errcontext("writing block %u of relation %u/%u/%u",
|
||||
bufHdr->tag.blockNum,
|
||||
bufHdr->tag.rnode.tblNode, bufHdr->tag.rnode.relNode);
|
||||
bufHdr->tag.rnode.spcNode,
|
||||
bufHdr->tag.rnode.dbNode,
|
||||
bufHdr->tag.rnode.relNode);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.55 2004/05/31 20:31:33 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.56 2004/06/18 06:13:33 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -236,10 +236,10 @@ AtEOXact_LocalBuffers(bool isCommit)
|
||||
|
||||
if (isCommit)
|
||||
elog(WARNING,
|
||||
"local buffer leak: [%03d] (rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%u %d)",
|
||||
"local buffer leak: [%03d] (rel=%u/%u/%u, blockNum=%u, flags=0x%x, refcount=%u %d)",
|
||||
i,
|
||||
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
|
||||
buf->tag.blockNum, buf->flags,
|
||||
buf->tag.rnode.spcNode, buf->tag.rnode.dbNode,
|
||||
buf->tag.rnode.relNode, buf->tag.blockNum, buf->flags,
|
||||
buf->refcount, LocalRefCount[i]);
|
||||
|
||||
LocalRefCount[i] = 0;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/storage/freespace/freespace.c,v 1.31 2004/06/05 19:48:08 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/storage/freespace/freespace.c,v 1.32 2004/06/18 06:13:34 tgl Exp $
|
||||
*
|
||||
*
|
||||
* NOTES:
|
||||
@@ -658,9 +658,6 @@ FreeSpaceMapForgetRel(RelFileNode *rel)
|
||||
*
|
||||
* This is called during DROP DATABASE. As above, might as well reclaim
|
||||
* map space sooner instead of later.
|
||||
*
|
||||
* XXX when we implement tablespaces, target Oid will need to be tablespace
|
||||
* ID not database ID.
|
||||
*/
|
||||
void
|
||||
FreeSpaceMapForgetDatabase(Oid dbid)
|
||||
@@ -672,7 +669,7 @@ FreeSpaceMapForgetDatabase(Oid dbid)
|
||||
for (fsmrel = FreeSpaceMap->usageList; fsmrel; fsmrel = nextrel)
|
||||
{
|
||||
nextrel = fsmrel->nextUsage; /* in case we delete it */
|
||||
if (fsmrel->key.tblNode == dbid)
|
||||
if (fsmrel->key.dbNode == dbid)
|
||||
delete_fsm_rel(fsmrel);
|
||||
}
|
||||
LWLockRelease(FreeSpaceLock);
|
||||
@@ -1847,8 +1844,9 @@ DumpFreeSpace(void)
|
||||
for (fsmrel = FreeSpaceMap->usageList; fsmrel; fsmrel = fsmrel->nextUsage)
|
||||
{
|
||||
relNum++;
|
||||
fprintf(stderr, "Map %d: rel %u/%u isIndex %d avgRequest %u lastPageCount %d nextPage %d\nMap= ",
|
||||
relNum, fsmrel->key.tblNode, fsmrel->key.relNode,
|
||||
fprintf(stderr, "Map %d: rel %u/%u/%u isIndex %d avgRequest %u lastPageCount %d nextPage %d\nMap= ",
|
||||
relNum,
|
||||
fsmrel->key.spcNode, fsmrel->key.dbNode, fsmrel->key.relNode,
|
||||
(int) fsmrel->isIndex, fsmrel->avgRequest,
|
||||
fsmrel->lastPageCount, fsmrel->nextPage);
|
||||
if (fsmrel->isIndex)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/storage/smgr/md.c,v 1.107 2004/06/02 17:28:18 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/storage/smgr/md.c,v 1.108 2004/06/18 06:13:37 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -363,8 +363,9 @@ mdopen(SMgrRelation reln, bool allowNotFound)
|
||||
return NULL;
|
||||
ereport(ERROR,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not open relation %u/%u: %m",
|
||||
reln->smgr_rnode.tblNode,
|
||||
errmsg("could not open relation %u/%u/%u: %m",
|
||||
reln->smgr_rnode.spcNode,
|
||||
reln->smgr_rnode.dbNode,
|
||||
reln->smgr_rnode.relNode)));
|
||||
}
|
||||
}
|
||||
@@ -765,9 +766,10 @@ mdsync(void)
|
||||
{
|
||||
ereport(LOG,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not fsync segment %u of relation %u/%u: %m",
|
||||
errmsg("could not fsync segment %u of relation %u/%u/%u: %m",
|
||||
entry->segno,
|
||||
entry->rnode.tblNode,
|
||||
entry->rnode.spcNode,
|
||||
entry->rnode.dbNode,
|
||||
entry->rnode.relNode)));
|
||||
return false;
|
||||
}
|
||||
@@ -945,9 +947,10 @@ _mdfd_getseg(SMgrRelation reln, BlockNumber blkno, bool allowNotFound)
|
||||
return NULL;
|
||||
ereport(ERROR,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not open segment %u of relation %u/%u (target block %u): %m",
|
||||
errmsg("could not open segment %u of relation %u/%u/%u (target block %u): %m",
|
||||
nextsegno,
|
||||
reln->smgr_rnode.tblNode,
|
||||
reln->smgr_rnode.spcNode,
|
||||
reln->smgr_rnode.dbNode,
|
||||
reln->smgr_rnode.relNode,
|
||||
blkno)));
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/storage/smgr/smgr.c,v 1.73 2004/06/02 17:28:18 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/storage/smgr/smgr.c,v 1.74 2004/06/18 06:13:37 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -227,8 +227,9 @@ smgrclose(SMgrRelation reln)
|
||||
if (! (*(smgrsw[reln->smgr_which].smgr_close)) (reln))
|
||||
ereport(ERROR,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not close relation %u/%u: %m",
|
||||
reln->smgr_rnode.tblNode,
|
||||
errmsg("could not close relation %u/%u/%u: %m",
|
||||
reln->smgr_rnode.spcNode,
|
||||
reln->smgr_rnode.dbNode,
|
||||
reln->smgr_rnode.relNode)));
|
||||
|
||||
if (hash_search(SMgrRelationHash,
|
||||
@@ -308,8 +309,9 @@ smgrcreate(SMgrRelation reln, bool isTemp, bool isRedo)
|
||||
if (! (*(smgrsw[reln->smgr_which].smgr_create)) (reln, isRedo))
|
||||
ereport(ERROR,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not create relation %u/%u: %m",
|
||||
reln->smgr_rnode.tblNode,
|
||||
errmsg("could not create relation %u/%u/%u: %m",
|
||||
reln->smgr_rnode.spcNode,
|
||||
reln->smgr_rnode.dbNode,
|
||||
reln->smgr_rnode.relNode)));
|
||||
|
||||
if (isRedo)
|
||||
@@ -427,8 +429,9 @@ smgr_internal_unlink(RelFileNode rnode, int which, bool isTemp, bool isRedo)
|
||||
if (! (*(smgrsw[which].smgr_unlink)) (rnode, isRedo))
|
||||
ereport(WARNING,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not unlink relation %u/%u: %m",
|
||||
rnode.tblNode,
|
||||
errmsg("could not unlink relation %u/%u/%u: %m",
|
||||
rnode.spcNode,
|
||||
rnode.dbNode,
|
||||
rnode.relNode)));
|
||||
}
|
||||
|
||||
@@ -447,8 +450,9 @@ smgrextend(SMgrRelation reln, BlockNumber blocknum, char *buffer, bool isTemp)
|
||||
isTemp))
|
||||
ereport(ERROR,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not extend relation %u/%u: %m",
|
||||
reln->smgr_rnode.tblNode,
|
||||
errmsg("could not extend relation %u/%u/%u: %m",
|
||||
reln->smgr_rnode.spcNode,
|
||||
reln->smgr_rnode.dbNode,
|
||||
reln->smgr_rnode.relNode),
|
||||
errhint("Check free disk space.")));
|
||||
}
|
||||
@@ -467,9 +471,10 @@ smgrread(SMgrRelation reln, BlockNumber blocknum, char *buffer)
|
||||
if (! (*(smgrsw[reln->smgr_which].smgr_read)) (reln, blocknum, buffer))
|
||||
ereport(ERROR,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not read block %u of relation %u/%u: %m",
|
||||
errmsg("could not read block %u of relation %u/%u/%u: %m",
|
||||
blocknum,
|
||||
reln->smgr_rnode.tblNode,
|
||||
reln->smgr_rnode.spcNode,
|
||||
reln->smgr_rnode.dbNode,
|
||||
reln->smgr_rnode.relNode)));
|
||||
}
|
||||
|
||||
@@ -491,9 +496,10 @@ smgrwrite(SMgrRelation reln, BlockNumber blocknum, char *buffer, bool isTemp)
|
||||
isTemp))
|
||||
ereport(ERROR,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not write block %u of relation %u/%u: %m",
|
||||
errmsg("could not write block %u of relation %u/%u/%u: %m",
|
||||
blocknum,
|
||||
reln->smgr_rnode.tblNode,
|
||||
reln->smgr_rnode.spcNode,
|
||||
reln->smgr_rnode.dbNode,
|
||||
reln->smgr_rnode.relNode)));
|
||||
}
|
||||
|
||||
@@ -520,8 +526,9 @@ smgrnblocks(SMgrRelation reln)
|
||||
if (nblocks == InvalidBlockNumber)
|
||||
ereport(ERROR,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not count blocks of relation %u/%u: %m",
|
||||
reln->smgr_rnode.tblNode,
|
||||
errmsg("could not count blocks of relation %u/%u/%u: %m",
|
||||
reln->smgr_rnode.spcNode,
|
||||
reln->smgr_rnode.dbNode,
|
||||
reln->smgr_rnode.relNode)));
|
||||
|
||||
return nblocks;
|
||||
@@ -552,8 +559,9 @@ smgrtruncate(SMgrRelation reln, BlockNumber nblocks, bool isTemp)
|
||||
if (newblks == InvalidBlockNumber)
|
||||
ereport(ERROR,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not truncate relation %u/%u to %u blocks: %m",
|
||||
reln->smgr_rnode.tblNode,
|
||||
errmsg("could not truncate relation %u/%u/%u to %u blocks: %m",
|
||||
reln->smgr_rnode.spcNode,
|
||||
reln->smgr_rnode.dbNode,
|
||||
reln->smgr_rnode.relNode,
|
||||
nblocks)));
|
||||
|
||||
@@ -607,8 +615,9 @@ smgrimmedsync(SMgrRelation reln)
|
||||
if (! (*(smgrsw[reln->smgr_which].smgr_immedsync)) (reln))
|
||||
ereport(ERROR,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not sync relation %u/%u: %m",
|
||||
reln->smgr_rnode.tblNode,
|
||||
errmsg("could not sync relation %u/%u/%u: %m",
|
||||
reln->smgr_rnode.spcNode,
|
||||
reln->smgr_rnode.dbNode,
|
||||
reln->smgr_rnode.relNode)));
|
||||
}
|
||||
|
||||
@@ -775,8 +784,9 @@ smgr_redo(XLogRecPtr lsn, XLogRecord *record)
|
||||
if (newblks == InvalidBlockNumber)
|
||||
ereport(WARNING,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not truncate relation %u/%u to %u blocks: %m",
|
||||
reln->smgr_rnode.tblNode,
|
||||
errmsg("could not truncate relation %u/%u/%u to %u blocks: %m",
|
||||
reln->smgr_rnode.spcNode,
|
||||
reln->smgr_rnode.dbNode,
|
||||
reln->smgr_rnode.relNode,
|
||||
xlrec->blkno)));
|
||||
}
|
||||
@@ -800,16 +810,17 @@ smgr_desc(char *buf, uint8 xl_info, char *rec)
|
||||
{
|
||||
xl_smgr_create *xlrec = (xl_smgr_create *) rec;
|
||||
|
||||
sprintf(buf + strlen(buf), "file create: %u/%u",
|
||||
xlrec->rnode.tblNode, xlrec->rnode.relNode);
|
||||
sprintf(buf + strlen(buf), "file create: %u/%u/%u",
|
||||
xlrec->rnode.spcNode, xlrec->rnode.dbNode,
|
||||
xlrec->rnode.relNode);
|
||||
}
|
||||
else if (info == XLOG_SMGR_TRUNCATE)
|
||||
{
|
||||
xl_smgr_truncate *xlrec = (xl_smgr_truncate *) rec;
|
||||
|
||||
sprintf(buf + strlen(buf), "file truncate: %u/%u to %u blocks",
|
||||
xlrec->rnode.tblNode, xlrec->rnode.relNode,
|
||||
xlrec->blkno);
|
||||
sprintf(buf + strlen(buf), "file truncate: %u/%u/%u to %u blocks",
|
||||
xlrec->rnode.spcNode, xlrec->rnode.dbNode,
|
||||
xlrec->rnode.relNode, xlrec->blkno);
|
||||
}
|
||||
else
|
||||
strcat(buf, "UNKNOWN");
|
||||
|
||||
Reference in New Issue
Block a user