/*------------------------------------------------------------------------- * * hio.h * POSTGRES heap access method input/output definitions. * * * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/access/hio.h * *------------------------------------------------------------------------- */ #ifndef HIO_H #define HIO_H #include "access/htup.h" #include "storage/buf.h" #include "utils/relcache.h" /* * state for bulk inserts --- private to heapam.c and hio.c * * If current_buf isn't InvalidBuffer, then we are holding an extra pin * on that buffer. * * "typedef struct BulkInsertStateData *BulkInsertState" is in heapam.h */ typedef struct BulkInsertStateData { BufferAccessStrategy strategy; /* our BULKWRITE strategy object */ Buffer current_buf; /* current insertion target page */ /* * State for bulk extensions. * * last_free..next_free are further pages that were unused at the time of * the last extension. They might be in use by the time we use them * though, so rechecks are needed. * * XXX: Eventually these should probably live in RelationData instead, * alongside targetblock. * * already_extended_by is the number of pages that this bulk inserted * extended by. If we already extended by a significant number of pages, * we can be more aggressive about extending going forward. */ BlockNumber next_free; BlockNumber last_free; uint32 already_extended_by; } BulkInsertStateData; extern void RelationPutHeapTuple(Relation relation, Buffer buffer, HeapTuple tuple, bool token); extern Buffer RelationGetBufferForTuple(Relation relation, Size len, Buffer otherBuffer, int options, BulkInsertStateData *bistate, Buffer *vmbuffer, Buffer *vmbuffer_other, int num_pages); #endif /* HIO_H */