diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2008-10-02 12:20:50 +0000 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2008-10-02 12:20:50 +0000 |
commit | 6736da5484658b212a1e5f999b8f6b03306f1fc1 (patch) | |
tree | 72c4cccdd319b744d5b0f730d179ade5389cdc41 /contrib/pg_freespacemap | |
parent | f10a86ece7bc49550c96943dc2359a91d39c5ad2 (diff) | |
download | postgresql-6736da5484658b212a1e5f999b8f6b03306f1fc1.tar.gz |
Make the blkno arguments bigints instead of int4s. A signed int4 is not
large enough for block numbers higher than 2^31. The old pre-FSM-rewrite
pg_freespacemap implementation got this right. While we're at it, remove
some unnecessary #includes.
Diffstat (limited to 'contrib/pg_freespacemap')
-rw-r--r-- | contrib/pg_freespacemap/pg_freespacemap.c | 10 | ||||
-rw-r--r-- | contrib/pg_freespacemap/pg_freespacemap.sql.in | 10 |
2 files changed, 9 insertions, 11 deletions
diff --git a/contrib/pg_freespacemap/pg_freespacemap.c b/contrib/pg_freespacemap/pg_freespacemap.c index 57a7e4490d..7b099e45b0 100644 --- a/contrib/pg_freespacemap/pg_freespacemap.c +++ b/contrib/pg_freespacemap/pg_freespacemap.c @@ -3,17 +3,15 @@ * pg_freespacemap.c * display contents of a free space map * - * $PostgreSQL: pgsql/contrib/pg_freespacemap/pg_freespacemap.c,v 1.11 2008/09/30 11:17:07 heikki Exp $ + * $PostgreSQL: pgsql/contrib/pg_freespacemap/pg_freespacemap.c,v 1.12 2008/10/02 12:20:50 heikki Exp $ *------------------------------------------------------------------------- */ #include "postgres.h" #include "access/heapam.h" -#include "access/htup.h" -#include "catalog/pg_type.h" #include "funcapi.h" +#include "storage/block.h" #include "storage/freespace.h" -#include "utils/builtins.h" PG_MODULE_MAGIC; @@ -31,13 +29,13 @@ Datum pg_freespace(PG_FUNCTION_ARGS) { Oid relid = PG_GETARG_OID(0); - uint32 blkno = PG_GETARG_UINT32(1); + int64 blkno = PG_GETARG_INT64(1); int16 freespace; Relation rel; rel = relation_open(relid, AccessShareLock); - if (!BlockNumberIsValid(blkno)) + if (blkno < 0 || blkno > MaxBlockNumber) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid block number"))); diff --git a/contrib/pg_freespacemap/pg_freespacemap.sql.in b/contrib/pg_freespacemap/pg_freespacemap.sql.in index 992fbcd991..d9bab1a579 100644 --- a/contrib/pg_freespacemap/pg_freespacemap.sql.in +++ b/contrib/pg_freespacemap/pg_freespacemap.sql.in @@ -1,26 +1,26 @@ -/* $PostgreSQL: pgsql/contrib/pg_freespacemap/pg_freespacemap.sql.in,v 1.10 2008/09/30 11:17:07 heikki Exp $ */ +/* $PostgreSQL: pgsql/contrib/pg_freespacemap/pg_freespacemap.sql.in,v 1.11 2008/10/02 12:20:50 heikki Exp $ */ -- Adjust this setting to control where the objects get created. SET search_path = public; -- Register the C function. -CREATE OR REPLACE FUNCTION pg_freespace(regclass, int4) +CREATE OR REPLACE FUNCTION pg_freespace(regclass, bigint) RETURNS int2 AS 'MODULE_PATHNAME', 'pg_freespace' LANGUAGE C; -- pg_freespace shows the recorded space avail at each block in a relation CREATE OR REPLACE FUNCTION - pg_freespace(rel regclass, blkno OUT int4, avail OUT int2) + pg_freespace(rel regclass, blkno OUT bigint, avail OUT int2) RETURNS SETOF RECORD AS $$ - SELECT blkno::int4, pg_freespace($1, blkno::int4) AS avail + SELECT blkno, pg_freespace($1, blkno) AS avail FROM generate_series(0, pg_relation_size($1) / current_setting('block_size')::bigint - 1) AS blkno; $$ LANGUAGE SQL; -- Don't want these to be available to public. -REVOKE ALL ON FUNCTION pg_freespace(regclass, int4) FROM PUBLIC; +REVOKE ALL ON FUNCTION pg_freespace(regclass, bigint) FROM PUBLIC; REVOKE ALL ON FUNCTION pg_freespace(regclass) FROM PUBLIC; |