Server IP : 85.214.239.14 / Your IP : 18.118.128.17 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /usr/include/postgresql/9.6/server/access/ |
Upload File : |
/* * brin_page.h * Prototypes and definitions for BRIN page layouts * * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION * src/include/access/brin_page.h * * NOTES * * These structs should really be private to specific BRIN files, but it's * useful to have them here so that they can be used by pageinspect and similar * tools. */ #ifndef BRIN_PAGE_H #define BRIN_PAGE_H #include "storage/block.h" #include "storage/itemptr.h" /* * Special area of BRIN pages. * * We define it in this odd way so that it always occupies the last * MAXALIGN-sized element of each page. */ typedef struct BrinSpecialSpace { uint16 vector[MAXALIGN(1) / sizeof(uint16)]; } BrinSpecialSpace; /* * Make the page type be the last half-word in the page, for consumption by * pg_filedump and similar utilities. We don't really care much about the * position of the "flags" half-word, but it's simpler to apply a consistent * rule to both. * * See comments above GinPageOpaqueData. */ #define BrinPageType(page) \ (((BrinSpecialSpace *) \ PageGetSpecialPointer(page))->vector[MAXALIGN(1) / sizeof(uint16) - 1]) #define BrinPageFlags(page) \ (((BrinSpecialSpace *) \ PageGetSpecialPointer(page))->vector[MAXALIGN(1) / sizeof(uint16) - 2]) /* special space on all BRIN pages stores a "type" identifier */ #define BRIN_PAGETYPE_META 0xF091 #define BRIN_PAGETYPE_REVMAP 0xF092 #define BRIN_PAGETYPE_REGULAR 0xF093 #define BRIN_IS_META_PAGE(page) (BrinPageType(page) == BRIN_PAGETYPE_META) #define BRIN_IS_REVMAP_PAGE(page) (BrinPageType(page) == BRIN_PAGETYPE_REVMAP) #define BRIN_IS_REGULAR_PAGE(page) (BrinPageType(page) == BRIN_PAGETYPE_REGULAR) /* flags for BrinSpecialSpace */ #define BRIN_EVACUATE_PAGE (1 << 0) /* Metapage definitions */ typedef struct BrinMetaPageData { uint32 brinMagic; uint32 brinVersion; BlockNumber pagesPerRange; BlockNumber lastRevmapPage; } BrinMetaPageData; #define BRIN_CURRENT_VERSION 1 #define BRIN_META_MAGIC 0xA8109CFA #define BRIN_METAPAGE_BLKNO 0 /* Definitions for revmap pages */ typedef struct RevmapContents { /* * This array will fill all available space on the page. It should be * declared [FLEXIBLE_ARRAY_MEMBER], but for some reason you can't do that * in an otherwise-empty struct. */ ItemPointerData rm_tids[1]; } RevmapContents; #define REVMAP_CONTENT_SIZE \ (BLCKSZ - MAXALIGN(SizeOfPageHeaderData) - \ offsetof(RevmapContents, rm_tids) - \ MAXALIGN(sizeof(BrinSpecialSpace))) /* max num of items in the array */ #define REVMAP_PAGE_MAXITEMS \ (REVMAP_CONTENT_SIZE / sizeof(ItemPointerData)) #endif /* BRIN_PAGE_H */