diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c index 8d7e4c864b18a248e32ad9a3ead6293a1966a934..84fd67510dcdd5b402436dcddae51791eaaaf58d 100644 --- a/src/backend/storage/smgr/md.c +++ b/src/backend/storage/smgr/md.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/smgr/md.c,v 1.42 1999/04/05 22:25:11 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/smgr/md.c,v 1.43 1999/05/17 06:38:41 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -711,15 +711,26 @@ mdtruncate(Relation reln, int nblocks) MdfdVec *v; #ifndef LET_OS_MANAGE_FILESIZE - int curnblk; + int curnblk, + i, + oldsegno, + newsegno; + char fname[NAMEDATALEN]; + char tname[NAMEDATALEN + 10]; curnblk = mdnblocks(reln); - if (curnblk / RELSEG_SIZE > 0) - { - elog(NOTICE, "Can't truncate multi-segments relation %s", - reln->rd_rel->relname.data); - return curnblk; - } + oldsegno = curnblk / RELSEG_SIZE; + newsegno = nblocks / RELSEG_SIZE; + + StrNCpy(fname, RelationGetRelationName(reln)->data, NAMEDATALEN); + + if (newsegno < oldsegno) { + for (i = (newsegno + 1);; i++) { + sprintf(tname, "%s.%d", fname, i); + if (FileNameUnlink(tname) < 0) + break; + } + } #endif fd = RelationGetFile(reln);