1996-07-09 08:22:35 +02:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
*
|
1999-02-14 00:22:53 +01:00
|
|
|
* vacuum.h
|
1997-09-07 07:04:48 +02:00
|
|
|
* header file for postgres vacuum cleaner
|
1996-07-09 08:22:35 +02:00
|
|
|
*
|
|
|
|
*
|
2001-01-24 20:43:33 +01:00
|
|
|
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
|
2000-01-26 06:58:53 +01:00
|
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
1996-07-09 08:22:35 +02:00
|
|
|
*
|
2001-03-22 05:01:46 +01:00
|
|
|
* $Id: vacuum.h,v 1.34 2001/03/22 04:00:43 momjian Exp $
|
1996-07-09 08:22:35 +02:00
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
1997-09-07 07:04:48 +02:00
|
|
|
#ifndef VACUUM_H
|
|
|
|
#define VACUUM_H
|
1996-07-09 08:22:35 +02:00
|
|
|
|
1997-11-26 02:26:13 +01:00
|
|
|
#include "catalog/pg_attribute.h"
|
2000-07-15 00:18:02 +02:00
|
|
|
#include "catalog/pg_index.h"
|
|
|
|
#include "fmgr.h"
|
1997-11-26 02:26:13 +01:00
|
|
|
#include "nodes/pg_list.h"
|
1999-07-14 03:20:30 +02:00
|
|
|
#include "storage/itemptr.h"
|
1998-02-26 05:46:47 +01:00
|
|
|
|
1997-02-07 17:24:12 +01:00
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
typedef struct VAttListData
|
|
|
|
{
|
1997-09-08 04:41:22 +02:00
|
|
|
int val_dummy;
|
1997-09-07 07:04:48 +02:00
|
|
|
struct VAttListData *val_next;
|
1997-09-08 23:56:23 +02:00
|
|
|
} VAttListData;
|
1997-09-07 07:04:48 +02:00
|
|
|
|
|
|
|
typedef VAttListData *VAttList;
|
|
|
|
|
2000-05-29 19:06:15 +02:00
|
|
|
typedef struct VacPageData
|
1997-09-07 07:04:48 +02:00
|
|
|
{
|
2001-03-22 05:01:46 +01:00
|
|
|
BlockNumber blkno; /* BlockNumber of this Page */
|
|
|
|
Size free; /* FreeSpace on this Page */
|
|
|
|
uint16 offsets_used; /* Number of OffNums used by vacuum */
|
|
|
|
uint16 offsets_free; /* Number of OffNums free or to be free */
|
|
|
|
OffsetNumber offsets[1]; /* Array of its OffNums */
|
2000-05-29 19:06:15 +02:00
|
|
|
} VacPageData;
|
1997-09-07 07:04:48 +02:00
|
|
|
|
2000-05-29 19:06:15 +02:00
|
|
|
typedef VacPageData *VacPage;
|
1997-09-07 07:04:48 +02:00
|
|
|
|
2000-05-29 19:06:15 +02:00
|
|
|
typedef struct VacPageListData
|
1997-09-07 07:04:48 +02:00
|
|
|
{
|
2001-03-22 05:01:46 +01:00
|
|
|
int empty_end_pages;/* Number of "empty" end-pages */
|
|
|
|
int num_pages; /* Number of pages in pagedesc */
|
|
|
|
int num_allocated_pages; /* Number of allocated pages in
|
|
|
|
* pagedesc */
|
|
|
|
VacPage *pagedesc; /* Descriptions of pages */
|
2000-05-29 19:06:15 +02:00
|
|
|
} VacPageListData;
|
1997-09-07 07:04:48 +02:00
|
|
|
|
2000-05-29 19:06:15 +02:00
|
|
|
typedef VacPageListData *VacPageList;
|
1997-09-07 07:04:48 +02:00
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
1998-09-01 05:29:17 +02:00
|
|
|
Form_pg_attribute attr;
|
1997-09-08 04:41:22 +02:00
|
|
|
Datum best,
|
|
|
|
guess1,
|
|
|
|
guess2,
|
|
|
|
max,
|
|
|
|
min;
|
1999-08-01 06:54:25 +02:00
|
|
|
int best_len,
|
1997-09-08 04:41:22 +02:00
|
|
|
guess1_len,
|
|
|
|
guess2_len,
|
|
|
|
max_len,
|
|
|
|
min_len;
|
1999-08-01 06:54:25 +02:00
|
|
|
long best_cnt,
|
1997-09-08 04:41:22 +02:00
|
|
|
guess1_cnt,
|
|
|
|
guess1_hits,
|
|
|
|
guess2_hits,
|
|
|
|
null_cnt,
|
1999-08-01 06:54:25 +02:00
|
|
|
nonnull_cnt,
|
|
|
|
max_cnt,
|
1997-09-08 04:41:22 +02:00
|
|
|
min_cnt;
|
1998-01-15 20:46:37 +01:00
|
|
|
FmgrInfo f_cmpeq,
|
1997-09-08 04:41:22 +02:00
|
|
|
f_cmplt,
|
|
|
|
f_cmpgt;
|
1999-08-01 06:54:25 +02:00
|
|
|
Oid op_cmplt;
|
1997-09-08 04:41:22 +02:00
|
|
|
regproc outfunc;
|
2000-01-15 23:43:25 +01:00
|
|
|
Oid typelem;
|
1997-09-08 04:41:22 +02:00
|
|
|
bool initialized;
|
1997-09-08 23:56:23 +02:00
|
|
|
} VacAttrStats;
|
1997-09-07 07:04:48 +02:00
|
|
|
|
|
|
|
typedef struct VRelListData
|
|
|
|
{
|
1997-09-08 04:41:22 +02:00
|
|
|
Oid vrl_relid;
|
1997-09-07 07:04:48 +02:00
|
|
|
struct VRelListData *vrl_next;
|
1997-09-08 23:56:23 +02:00
|
|
|
} VRelListData;
|
1997-09-07 07:04:48 +02:00
|
|
|
|
|
|
|
typedef VRelListData *VRelList;
|
|
|
|
|
1999-03-28 22:32:42 +02:00
|
|
|
typedef struct VTupleLinkData
|
|
|
|
{
|
1999-05-25 18:15:34 +02:00
|
|
|
ItemPointerData new_tid;
|
|
|
|
ItemPointerData this_tid;
|
1999-05-26 00:43:53 +02:00
|
|
|
} VTupleLinkData;
|
1999-03-28 22:32:42 +02:00
|
|
|
|
|
|
|
typedef VTupleLinkData *VTupleLink;
|
|
|
|
|
|
|
|
typedef struct VTupleMoveData
|
|
|
|
{
|
1999-05-25 18:15:34 +02:00
|
|
|
ItemPointerData tid; /* tuple ID */
|
2001-03-22 05:01:46 +01:00
|
|
|
VacPage vacpage; /* where to move */
|
2000-05-29 19:06:15 +02:00
|
|
|
bool cleanVpd; /* clean vacpage before using */
|
1999-05-26 00:43:53 +02:00
|
|
|
} VTupleMoveData;
|
1999-03-28 22:32:42 +02:00
|
|
|
|
|
|
|
typedef VTupleMoveData *VTupleMove;
|
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
typedef struct VRelStats
|
|
|
|
{
|
1999-05-25 18:15:34 +02:00
|
|
|
Oid relid;
|
|
|
|
int num_tuples;
|
|
|
|
int num_pages;
|
|
|
|
Size min_tlen;
|
|
|
|
Size max_tlen;
|
|
|
|
bool hasindex;
|
|
|
|
int num_vtlinks;
|
|
|
|
VTupleLink vtlinks;
|
1997-09-08 23:56:23 +02:00
|
|
|
} VRelStats;
|
1997-09-08 04:41:22 +02:00
|
|
|
|
|
|
|
extern bool VacuumRunning;
|
|
|
|
|
|
|
|
extern void vc_abort(void);
|
2000-05-29 18:21:05 +02:00
|
|
|
extern void vacuum(char *vacrel, bool verbose, bool analyze, List *anal_cols);
|
2000-05-29 19:40:45 +02:00
|
|
|
extern void analyze_rel(Oid relid, List *anal_cols2, int MESSAGE_LEVEL);
|
1997-09-07 07:04:48 +02:00
|
|
|
|
|
|
|
#define ATTNVALS_SCALE 1000000000 /* XXX so it can act as a float4 */
|
|
|
|
|
1998-09-01 06:40:42 +02:00
|
|
|
#endif /* VACUUM_H */
|