Tatsuhito Kasahara wrote:
> I fix the patch.
Oops, I forgot to attach the patch for pgstattuple.sql.
I send it again.
Best regards.
--
NTT OSS Center
Tatsuhito Kasahara
kasahara.tatsuhito _at_ oss.ntt.co.jp
diff -crN postgresql-8.3.0.org/contrib/pgstattuple/pgstatindex.c
postgresql-8.3.0/contrib/pgstattuple/pgstatindex.c
*** postgresql-8.3.0.org/contrib/pgstattuple/pgstatindex.c 2007-11-16
06:14:31.000000000 +0900
--- postgresql-8.3.0/contrib/pgstattuple/pgstatindex.c 2008-02-24
19:35:09.000000000 +0900
***************
*** 68,75 ****
uint32 empty_pages;
uint32 deleted_pages;
! uint32 max_avail;
! uint32 free_space;
uint32 fragments;
} BTIndexStat;
--- 68,75 ----
uint32 empty_pages;
uint32 deleted_pages;
! double max_avail;
! double free_space;
uint32 fragments;
} BTIndexStat;
***************
*** 87,94 ****
Relation rel;
RangeVar *relrv;
Datum result;
! uint32 nblocks;
! uint32 blkno;
BTIndexStat indexStat;
if (!superuser())
--- 87,94 ----
Relation rel;
RangeVar *relrv;
Datum result;
! BlockNumber nblocks;
! BlockNumber blkno;
BTIndexStat indexStat;
if (!superuser())
***************
*** 207,231 ****
values[j] = palloc(32);
snprintf(values[j++], 32, "%d", indexStat.level);
values[j] = palloc(32);
! snprintf(values[j++], 32, "%d", (indexStat.root_pages +
!
indexStat.leaf_pages +
!
indexStat.internal_pages +
!
indexStat.deleted_pages +
!
indexStat.empty_pages) * BLCKSZ);
values[j] = palloc(32);
snprintf(values[j++], 32, "%d", indexStat.root_blkno);
values[j] = palloc(32);
! snprintf(values[j++], 32, "%d", indexStat.internal_pages);
values[j] = palloc(32);
! snprintf(values[j++], 32, "%d", indexStat.leaf_pages);
values[j] = palloc(32);
! snprintf(values[j++], 32, "%d", indexStat.empty_pages);
values[j] = palloc(32);
! snprintf(values[j++], 32, "%d", indexStat.deleted_pages);
values[j] = palloc(32);
! snprintf(values[j++], 32, "%.2f", 100.0 - (float)
indexStat.free_space / (float) indexStat.max_avail * 100.0);
values[j] = palloc(32);
! snprintf(values[j++], 32, "%.2f", (float) indexStat.fragments /
(float) indexStat.leaf_pages * 100.0);
tuple =
BuildTupleFromCStrings(TupleDescGetAttInMetadata(tupleDesc),
values);
--- 207,231 ----
values[j] = palloc(32);
snprintf(values[j++], 32, "%d", indexStat.level);
values[j] = palloc(32);
! snprintf(values[j++], 32, "%.0f", ( (double)
indexStat.root_pages +
!
(double) indexStat.leaf_pages +
!
(double) indexStat.internal_pages +
!
(double) indexStat.deleted_pages +
!
(double) indexStat.empty_pages) * BLCKSZ);
values[j] = palloc(32);
snprintf(values[j++], 32, "%d", indexStat.root_blkno);
values[j] = palloc(32);
! snprintf(values[j++], 32, "%u", indexStat.internal_pages);
values[j] = palloc(32);
! snprintf(values[j++], 32, "%u", indexStat.leaf_pages);
values[j] = palloc(32);
! snprintf(values[j++], 32, "%u", indexStat.empty_pages);
values[j] = palloc(32);
! snprintf(values[j++], 32, "%u", indexStat.deleted_pages);
values[j] = palloc(32);
! snprintf(values[j++], 32, "%.2f", 100.0 - indexStat.free_space
/ indexStat.max_avail * 100.0);
values[j] = palloc(32);
! snprintf(values[j++], 32, "%.2f", (double) indexStat.fragments
/ (double) indexStat.leaf_pages * 100.0);
tuple =
BuildTupleFromCStrings(TupleDescGetAttInMetadata(tupleDesc),
values);
diff -crN postgresql-8.3.0.org/contrib/pgstattuple/pgstattuple.sql.in
postgresql-8.3.0/contrib/pgstattuple/pgstattuple.sql.in
*** postgresql-8.3.0.org/contrib/pgstattuple/pgstattuple.sql.in 2007-11-13
13:24:28.000000000 +0900
--- postgresql-8.3.0/contrib/pgstattuple/pgstattuple.sql.in 2008-02-21
21:33:02.000000000 +0900
***************
*** 33,48 ****
-- pgstatindex
--
CREATE OR REPLACE FUNCTION pgstatindex(IN relname text,
! OUT version int4,
! OUT tree_level int4,
! OUT index_size int4,
! OUT root_block_no int4,
! OUT internal_pages int4,
! OUT leaf_pages int4,
! OUT empty_pages int4,
! OUT deleted_pages int4,
! OUT avg_leaf_density float8,
! OUT leaf_fragmentation float8)
AS 'MODULE_PATHNAME', 'pgstatindex'
LANGUAGE C STRICT;
--- 33,48 ----
-- pgstatindex
--
CREATE OR REPLACE FUNCTION pgstatindex(IN relname text,
! OUT version INT,
! OUT tree_level INT,
! OUT index_size BIGINT,
! OUT root_block_no INT,
! OUT internal_pages BIGINT,
! OUT leaf_pages BIGINT,
! OUT empty_pages BIGINT,
! OUT deleted_pages BIGINT,
! OUT avg_leaf_density FLOAT8,
! OUT leaf_fragmentation FLOAT8)
AS 'MODULE_PATHNAME', 'pgstatindex'
LANGUAGE C STRICT;
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match