]> granicus.if.org Git - postgresql/blob - src/include/storage/freespace.h
Update copyrights to 2003.
[postgresql] / src / include / storage / freespace.h
1 /*-------------------------------------------------------------------------
2  *
3  * freespace.h
4  *        POSTGRES free space map for quickly finding free space in relations
5  *
6  *
7  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * $Id: freespace.h,v 1.12 2003/08/04 02:40:14 momjian Exp $
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef FREESPACE_H_
15 #define FREESPACE_H_
16
17 #include "storage/block.h"
18 #include "storage/relfilenode.h"
19
20
21 /*
22  * exported types
23  */
24 typedef struct PageFreeSpaceInfo
25 {
26         BlockNumber blkno;                      /* which page in relation */
27         Size            avail;                  /* space available on this page */
28 }       PageFreeSpaceInfo;
29
30
31 /* GUC variables */
32 extern int      MaxFSMRelations;
33 extern int      MaxFSMPages;
34
35
36 /*
37  * function prototypes
38  */
39 extern void InitFreeSpaceMap(void);
40 extern int      FreeSpaceShmemSize(void);
41
42 extern BlockNumber GetPageWithFreeSpace(RelFileNode *rel, Size spaceNeeded);
43 extern BlockNumber RecordAndGetPageWithFreeSpace(RelFileNode *rel,
44                                                           BlockNumber oldPage,
45                                                           Size oldSpaceAvail,
46                                                           Size spaceNeeded);
47 extern Size GetAvgFSMRequestSize(RelFileNode *rel);
48 extern void RecordRelationFreeSpace(RelFileNode *rel,
49                                                 int nPages,
50                                                 PageFreeSpaceInfo * pageSpaces);
51
52 extern BlockNumber GetFreeIndexPage(RelFileNode *rel);
53 extern void RecordIndexFreeSpace(RelFileNode *rel,
54                                          int nPages,
55                                          BlockNumber *pages);
56
57 extern void FreeSpaceMapTruncateRel(RelFileNode *rel, BlockNumber nblocks);
58 extern void FreeSpaceMapForgetRel(RelFileNode *rel);
59 extern void FreeSpaceMapForgetDatabase(Oid dbid);
60
61 extern void PrintFreeSpaceMapStatistics(int elevel);
62
63 extern void DumpFreeSpaceMap(void);
64 extern void LoadFreeSpaceMap(void);
65
66 #ifdef FREESPACE_DEBUG
67 extern void DumpFreeSpace(void);
68 #endif
69
70 #endif   /* FREESPACE_H */