diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 12:15:05 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 12:15:05 +0000 |
commit | 46651ce6fe013220ed397add242004d764fc0153 (patch) | |
tree | 6e5299f990f88e60174a1d3ae6e48eedd2688b2b /contrib/pg_freespacemap/pg_freespacemap.c | |
parent | Initial commit. (diff) | |
download | postgresql-14-46651ce6fe013220ed397add242004d764fc0153.tar.xz postgresql-14-46651ce6fe013220ed397add242004d764fc0153.zip |
Adding upstream version 14.5.upstream/14.5upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'contrib/pg_freespacemap/pg_freespacemap.c')
-rw-r--r-- | contrib/pg_freespacemap/pg_freespacemap.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/contrib/pg_freespacemap/pg_freespacemap.c b/contrib/pg_freespacemap/pg_freespacemap.c new file mode 100644 index 0000000..b82cab2 --- /dev/null +++ b/contrib/pg_freespacemap/pg_freespacemap.c @@ -0,0 +1,42 @@ +/*------------------------------------------------------------------------- + * + * pg_freespacemap.c + * display contents of a free space map + * + * contrib/pg_freespacemap/pg_freespacemap.c + *------------------------------------------------------------------------- + */ +#include "postgres.h" + +#include "access/relation.h" +#include "funcapi.h" +#include "storage/freespace.h" + +PG_MODULE_MAGIC; + +/* + * Returns the amount of free space on a given page, according to the + * free space map. + */ +PG_FUNCTION_INFO_V1(pg_freespace); + +Datum +pg_freespace(PG_FUNCTION_ARGS) +{ + Oid relid = PG_GETARG_OID(0); + int64 blkno = PG_GETARG_INT64(1); + int16 freespace; + Relation rel; + + rel = relation_open(relid, AccessShareLock); + + if (blkno < 0 || blkno > MaxBlockNumber) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid block number"))); + + freespace = GetRecordedFreeSpace(rel, blkno); + + relation_close(rel, AccessShareLock); + PG_RETURN_INT16(freespace); +} |