PostgreSQL Source Code git master
pg_freespacemap.c
Go to the documentation of this file.
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 "fmgr.h"
13#include "storage/freespace.h"
14
16
17/*
18 * Returns the amount of free space on a given page, according to the
19 * free space map.
20 */
22
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)
35 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
36 errmsg("invalid block number")));
37
38 freespace = GetRecordedFreeSpace(rel, blkno);
39
41 PG_RETURN_INT16(freespace);
42}
#define MaxBlockNumber
Definition: block.h:35
int64_t int64
Definition: c.h:485
int16_t int16
Definition: c.h:483
int errcode(int sqlerrcode)
Definition: elog.c:853
int errmsg(const char *fmt,...)
Definition: elog.c:1070
#define ERROR
Definition: elog.h:39
#define ereport(elevel,...)
Definition: elog.h:149
#define PG_GETARG_OID(n)
Definition: fmgr.h:275
#define PG_GETARG_INT64(n)
Definition: fmgr.h:283
#define PG_RETURN_INT16(x)
Definition: fmgr.h:356
#define PG_FUNCTION_ARGS
Definition: fmgr.h:193
Size GetRecordedFreeSpace(Relation rel, BlockNumber heapBlk)
Definition: freespace.c:244
#define AccessShareLock
Definition: lockdefs.h:36
PG_MODULE_MAGIC
Datum pg_freespace(PG_FUNCTION_ARGS)
PG_FUNCTION_INFO_V1(pg_freespace)
uintptr_t Datum
Definition: postgres.h:69
unsigned int Oid
Definition: postgres_ext.h:32
void relation_close(Relation relation, LOCKMODE lockmode)
Definition: relation.c:205
Relation relation_open(Oid relationId, LOCKMODE lockmode)
Definition: relation.c:47