]> granicus.if.org Git - postgresql/blob - contrib/pg_freespacemap/pg_freespacemap.c
Replace heapam.h includes with {table, relation}.h where applicable.
[postgresql] / contrib / pg_freespacemap / pg_freespacemap.c
1 /*-------------------------------------------------------------------------
2  *
3  * pg_freespacemap.c
4  *        display contents of a free space map
5  *
6  *        contrib/pg_freespacemap/pg_freespacemap.c
7  *-------------------------------------------------------------------------
8  */
9 #include "postgres.h"
10
11 #include "access/relation.h"
12 #include "funcapi.h"
13 #include "storage/freespace.h"
14
15 PG_MODULE_MAGIC;
16
17 /*
18  * Returns the amount of free space on a given page, according to the
19  * free space map.
20  */
21 PG_FUNCTION_INFO_V1(pg_freespace);
22
23 Datum
24 pg_freespace(PG_FUNCTION_ARGS)
25 {
26         Oid                     relid = PG_GETARG_OID(0);
27         int64           blkno = PG_GETARG_INT64(1);
28         int16           freespace;
29         Relation        rel;
30
31         rel = relation_open(relid, AccessShareLock);
32
33         if (blkno < 0 || blkno > MaxBlockNumber)
34                 ereport(ERROR,
35                                 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
36                                  errmsg("invalid block number")));
37
38         freespace = GetRecordedFreeSpace(rel, blkno);
39
40         relation_close(rel, AccessShareLock);
41         PG_RETURN_INT16(freespace);
42 }