Skip to content

hollobon/pagevis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pagevis

The pagevis PostgreSQL extension currently contains a single function, show_page, which returns an ASCII-graphical representation of the contents of a PostgreSQL database page. It uses the pageinspect extension, which must be installed first. You must be superuser to call show_page, as it uses the pageinspect get_raw_page function.

Output

The results of show_page are multiple records with a single text column, for a total of block_size characters (default 8192), one representing each byte on the page.

The meaning of each character is as shown in this table:

| *Character* | *Meaning*                                     |
| P           | page header                                   |
| U           | unused line pointer                           |
| N           | normal line pointer                           |
| R           | redirect line pointer                         |
| D           | dead line pointer                             |
| (space)     | free space (the "hole")                       |
| [n]         | tuple number (overlaid on tuple header)       |
| H           | tuple header                                  |
| #           | tuple data                                    |
| -           | tuple invisible to current transaction (dead) |
| .           | inter-tuple padding                           |

Example

> set role postgres;
SET
# create extension pagevis;
CREATE EXTENSION
# create table pvtest (a integer);
CREATE TABLE
# insert into pvtest select generate_series(1, 500);
INSERT 0 500
# select * from pvtest limit 5;
 a
---
 1
 2
 3
 4
 5
(5 rows)

# select ctid, * from pvtest limit 5;
 ctid  | a
-------+---
 (0,1) | 1
 (0,2) | 2
 (0,3) | 3
 (0,4) | 4
 (0,5) | 5
(5 rows)

# select show_page('pvtest', 0, 64);
                             show_page
------------------------------------------------------------------
 PPPPPPPPPPPPPPPPPPPPPPPP001N002N003N004N005N006N007N008N009N010N
 011N012N013N014N015N016N017N018N019N020N021N022N023N024N025N026N
 027N028N029N030N031N032N033N034N035N036N037N038N039N040N041N042N
 043N044N045N046N047N048N049N050N051N052N053N054N055N056N057N058N
 059N060N061N062N063N064N065N066N067N068N069N070N071N072N073N074N
 075N076N077N078N079N080N081N082N083N084N085N086N087N088N089N090N
 091N092N093N094N095N096N097N098N099N100N101N102N103N104N105N106N
 107N108N109N110N111N112N113N114N115N116N117N118N119N120N121N122N
 123N124N125N126N127N128N129N130N131N132N133N134N135N136N137N138N
 139N140N141N142N143N144N145N146N147N148N149N150N151N152N153N154N
 155N156N157N158N159N160N161N162N163N164N165N166N167N168N169N170N
 171N172N173N174N175N176N177N178N179N180N181N182N183N184N185N186N
 187N188N189N190N191N192N193N194N195N196N197N198N199N200N201N202N
 203N204N205N206N207N208N209N210N211N212N213N214N215N216N217N218N
 219N220N221N222N223N224N225N226N
 [226]HHHHHHHHHHHHHHHHHHH####....[225]HHHHHHHHHHHHHHHHHHH####....
 [224]HHHHHHHHHHHHHHHHHHH####....[223]HHHHHHHHHHHHHHHHHHH####....
 [222]HHHHHHHHHHHHHHHHHHH####....[221]HHHHHHHHHHHHHHHHHHH####....
 [220]HHHHHHHHHHHHHHHHHHH####....[219]HHHHHHHHHHHHHHHHHHH####....
 [218]HHHHHHHHHHHHHHHHHHH####....[217]HHHHHHHHHHHHHHHHHHH####....
 [216]HHHHHHHHHHHHHHHHHHH####....[215]HHHHHHHHHHHHHHHHHHH####....
 [214]HHHHHHHHHHHHHHHHHHH####....[213]HHHHHHHHHHHHHHHHHHH####....
 [212]HHHHHHHHHHHHHHHHHHH####....[211]HHHHHHHHHHHHHHHHHHH####....
 [210]HHHHHHHHHHHHHHHHHHH####....[209]HHHHHHHHHHHHHHHHHHH####....
 [208]HHHHHHHHHHHHHHHHHHH####....[207]HHHHHHHHHHHHHHHHHHH####....
 [206]HHHHHHHHHHHHHHHHHHH####....[205]HHHHHHHHHHHHHHHHHHH####....
 [204]HHHHHHHHHHHHHHHHHHH####....[203]HHHHHHHHHHHHHHHHHHH####....
 [202]HHHHHHHHHHHHHHHHHHH####....[201]HHHHHHHHHHHHHHHHHHH####....
 [200]HHHHHHHHHHHHHHHHHHH####....[199]HHHHHHHHHHHHHHHHHHH####....
 [198]HHHHHHHHHHHHHHHHHHH####....[197]HHHHHHHHHHHHHHHHHHH####....
 [196]HHHHHHHHHHHHHHHHHHH####....[195]HHHHHHHHHHHHHHHHHHH####....
 [194]HHHHHHHHHHHHHHHHHHH####....[193]HHHHHHHHHHHHHHHHHHH####....
 [192]HHHHHHHHHHHHHHHHHHH####....[191]HHHHHHHHHHHHHHHHHHH####....
 [190]HHHHHHHHHHHHHHHHHHH####....[189]HHHHHHHHHHHHHHHHHHH####....
 [188]HHHHHHHHHHHHHHHHHHH####....[187]HHHHHHHHHHHHHHHHHHH####....
 [186]HHHHHHHHHHHHHHHHHHH####....[185]HHHHHHHHHHHHHHHHHHH####....
 [184]HHHHHHHHHHHHHHHHHHH####....[183]HHHHHHHHHHHHHHHHHHH####....
 [182]HHHHHHHHHHHHHHHHHHH####....[181]HHHHHHHHHHHHHHHHHHH####....
 [180]HHHHHHHHHHHHHHHHHHH####....[179]HHHHHHHHHHHHHHHHHHH####....
 [178]HHHHHHHHHHHHHHHHHHH####....[177]HHHHHHHHHHHHHHHHHHH####....
 [176]HHHHHHHHHHHHHHHHHHH####....[175]HHHHHHHHHHHHHHHHHHH####....
 [174]HHHHHHHHHHHHHHHHHHH####....[173]HHHHHHHHHHHHHHHHHHH####....
 [172]HHHHHHHHHHHHHHHHHHH####....[171]HHHHHHHHHHHHHHHHHHH####....
 [170]HHHHHHHHHHHHHHHHHHH####....[169]HHHHHHHHHHHHHHHHHHH####....
 [168]HHHHHHHHHHHHHHHHHHH####....[167]HHHHHHHHHHHHHHHHHHH####....
 [166]HHHHHHHHHHHHHHHHHHH####....[165]HHHHHHHHHHHHHHHHHHH####....
 [164]HHHHHHHHHHHHHHHHHHH####....[163]HHHHHHHHHHHHHHHHHHH####....
 [162]HHHHHHHHHHHHHHHHHHH####....[161]HHHHHHHHHHHHHHHHHHH####....
 [160]HHHHHHHHHHHHHHHHHHH####....[159]HHHHHHHHHHHHHHHHHHH####....
 [158]HHHHHHHHHHHHHHHHHHH####....[157]HHHHHHHHHHHHHHHHHHH####....
 [156]HHHHHHHHHHHHHHHHHHH####....[155]HHHHHHHHHHHHHHHHHHH####....
 [154]HHHHHHHHHHHHHHHHHHH####....[153]HHHHHHHHHHHHHHHHHHH####....
 [152]HHHHHHHHHHHHHHHHHHH####....[151]HHHHHHHHHHHHHHHHHHH####....
 [150]HHHHHHHHHHHHHHHHHHH####....[149]HHHHHHHHHHHHHHHHHHH####....
 [148]HHHHHHHHHHHHHHHHHHH####....[147]HHHHHHHHHHHHHHHHHHH####....
 [146]HHHHHHHHHHHHHHHHHHH####....[145]HHHHHHHHHHHHHHHHHHH####....
 [144]HHHHHHHHHHHHHHHHHHH####....[143]HHHHHHHHHHHHHHHHHHH####....
 [142]HHHHHHHHHHHHHHHHHHH####....[141]HHHHHHHHHHHHHHHHHHH####....
 [140]HHHHHHHHHHHHHHHHHHH####....[139]HHHHHHHHHHHHHHHHHHH####....
 [138]HHHHHHHHHHHHHHHHHHH####....[137]HHHHHHHHHHHHHHHHHHH####....
 [136]HHHHHHHHHHHHHHHHHHH####....[135]HHHHHHHHHHHHHHHHHHH####....
 [134]HHHHHHHHHHHHHHHHHHH####....[133]HHHHHHHHHHHHHHHHHHH####....
 [132]HHHHHHHHHHHHHHHHHHH####....[131]HHHHHHHHHHHHHHHHHHH####....
 [130]HHHHHHHHHHHHHHHHHHH####....[129]HHHHHHHHHHHHHHHHHHH####....
 [128]HHHHHHHHHHHHHHHHHHH####....[127]HHHHHHHHHHHHHHHHHHH####....
 [126]HHHHHHHHHHHHHHHHHHH####....[125]HHHHHHHHHHHHHHHHHHH####....
 [124]HHHHHHHHHHHHHHHHHHH####....[123]HHHHHHHHHHHHHHHHHHH####....
 [122]HHHHHHHHHHHHHHHHHHH####....[121]HHHHHHHHHHHHHHHHHHH####....
 [120]HHHHHHHHHHHHHHHHHHH####....[119]HHHHHHHHHHHHHHHHHHH####....
 [118]HHHHHHHHHHHHHHHHHHH####....[117]HHHHHHHHHHHHHHHHHHH####....
 [116]HHHHHHHHHHHHHHHHHHH####....[115]HHHHHHHHHHHHHHHHHHH####....
 [114]HHHHHHHHHHHHHHHHHHH####....[113]HHHHHHHHHHHHHHHHHHH####....
 [112]HHHHHHHHHHHHHHHHHHH####....[111]HHHHHHHHHHHHHHHHHHH####....
 [110]HHHHHHHHHHHHHHHHHHH####....[109]HHHHHHHHHHHHHHHHHHH####....
 [108]HHHHHHHHHHHHHHHHHHH####....[107]HHHHHHHHHHHHHHHHHHH####....
 [106]HHHHHHHHHHHHHHHHHHH####....[105]HHHHHHHHHHHHHHHHHHH####....
 [104]HHHHHHHHHHHHHHHHHHH####....[103]HHHHHHHHHHHHHHHHHHH####....
 [102]HHHHHHHHHHHHHHHHHHH####....[101]HHHHHHHHHHHHHHHHHHH####....
 [100]HHHHHHHHHHHHHHHHHHH####....[99]HHHHHHHHHHHHHHHHHHHH####....
 [98]HHHHHHHHHHHHHHHHHHHH####....[97]HHHHHHHHHHHHHHHHHHHH####....
 [96]HHHHHHHHHHHHHHHHHHHH####....[95]HHHHHHHHHHHHHHHHHHHH####....
 [94]HHHHHHHHHHHHHHHHHHHH####....[93]HHHHHHHHHHHHHHHHHHHH####....
 [92]HHHHHHHHHHHHHHHHHHHH####....[91]HHHHHHHHHHHHHHHHHHHH####....
 [90]HHHHHHHHHHHHHHHHHHHH####....[89]HHHHHHHHHHHHHHHHHHHH####....
 [88]HHHHHHHHHHHHHHHHHHHH####....[87]HHHHHHHHHHHHHHHHHHHH####....
 [86]HHHHHHHHHHHHHHHHHHHH####....[85]HHHHHHHHHHHHHHHHHHHH####....
 [84]HHHHHHHHHHHHHHHHHHHH####....[83]HHHHHHHHHHHHHHHHHHHH####....
 [82]HHHHHHHHHHHHHHHHHHHH####....[81]HHHHHHHHHHHHHHHHHHHH####....
 [80]HHHHHHHHHHHHHHHHHHHH####....[79]HHHHHHHHHHHHHHHHHHHH####....
 [78]HHHHHHHHHHHHHHHHHHHH####....[77]HHHHHHHHHHHHHHHHHHHH####....
 [76]HHHHHHHHHHHHHHHHHHHH####....[75]HHHHHHHHHHHHHHHHHHHH####....
 [74]HHHHHHHHHHHHHHHHHHHH####....[73]HHHHHHHHHHHHHHHHHHHH####....
 [72]HHHHHHHHHHHHHHHHHHHH####....[71]HHHHHHHHHHHHHHHHHHHH####....
 [70]HHHHHHHHHHHHHHHHHHHH####....[69]HHHHHHHHHHHHHHHHHHHH####....
 [68]HHHHHHHHHHHHHHHHHHHH####....[67]HHHHHHHHHHHHHHHHHHHH####....
 [66]HHHHHHHHHHHHHHHHHHHH####....[65]HHHHHHHHHHHHHHHHHHHH####....
 [64]HHHHHHHHHHHHHHHHHHHH####....[63]HHHHHHHHHHHHHHHHHHHH####....
 [62]HHHHHHHHHHHHHHHHHHHH####....[61]HHHHHHHHHHHHHHHHHHHH####....
 [60]HHHHHHHHHHHHHHHHHHHH####....[59]HHHHHHHHHHHHHHHHHHHH####....
 [58]HHHHHHHHHHHHHHHHHHHH####....[57]HHHHHHHHHHHHHHHHHHHH####....
 [56]HHHHHHHHHHHHHHHHHHHH####....[55]HHHHHHHHHHHHHHHHHHHH####....
 [54]HHHHHHHHHHHHHHHHHHHH####....[53]HHHHHHHHHHHHHHHHHHHH####....
 [52]HHHHHHHHHHHHHHHHHHHH####....[51]HHHHHHHHHHHHHHHHHHHH####....
 [50]HHHHHHHHHHHHHHHHHHHH####....[49]HHHHHHHHHHHHHHHHHHHH####....
 [48]HHHHHHHHHHHHHHHHHHHH####....[47]HHHHHHHHHHHHHHHHHHHH####....
 [46]HHHHHHHHHHHHHHHHHHHH####....[45]HHHHHHHHHHHHHHHHHHHH####....
 [44]HHHHHHHHHHHHHHHHHHHH####....[43]HHHHHHHHHHHHHHHHHHHH####....
 [42]HHHHHHHHHHHHHHHHHHHH####....[41]HHHHHHHHHHHHHHHHHHHH####....
 [40]HHHHHHHHHHHHHHHHHHHH####....[39]HHHHHHHHHHHHHHHHHHHH####....
 [38]HHHHHHHHHHHHHHHHHHHH####....[37]HHHHHHHHHHHHHHHHHHHH####....
 [36]HHHHHHHHHHHHHHHHHHHH####....[35]HHHHHHHHHHHHHHHHHHHH####....
 [34]HHHHHHHHHHHHHHHHHHHH####....[33]HHHHHHHHHHHHHHHHHHHH####....
 [32]HHHHHHHHHHHHHHHHHHHH####....[31]HHHHHHHHHHHHHHHHHHHH####....
 [30]HHHHHHHHHHHHHHHHHHHH####....[29]HHHHHHHHHHHHHHHHHHHH####....
 [28]HHHHHHHHHHHHHHHHHHHH####....[27]HHHHHHHHHHHHHHHHHHHH####....
 [26]HHHHHHHHHHHHHHHHHHHH####....[25]HHHHHHHHHHHHHHHHHHHH####....
 [24]HHHHHHHHHHHHHHHHHHHH####....[23]HHHHHHHHHHHHHHHHHHHH####....
 [22]HHHHHHHHHHHHHHHHHHHH####....[21]HHHHHHHHHHHHHHHHHHHH####....
 [20]HHHHHHHHHHHHHHHHHHHH####....[19]HHHHHHHHHHHHHHHHHHHH####....
 [18]HHHHHHHHHHHHHHHHHHHH####....[17]HHHHHHHHHHHHHHHHHHHH####....
 [16]HHHHHHHHHHHHHHHHHHHH####....[15]HHHHHHHHHHHHHHHHHHHH####....
 [14]HHHHHHHHHHHHHHHHHHHH####....[13]HHHHHHHHHHHHHHHHHHHH####....
 [12]HHHHHHHHHHHHHHHHHHHH####....[11]HHHHHHHHHHHHHHHHHHHH####....
 [10]HHHHHHHHHHHHHHHHHHHH####....[9]HHHHHHHHHHHHHHHHHHHHH####....
 [8]HHHHHHHHHHHHHHHHHHHHH####....[7]HHHHHHHHHHHHHHHHHHHHH####....
 [6]HHHHHHHHHHHHHHHHHHHHH####....[5]HHHHHHHHHHHHHHHHHHHHH####....
 [4]HHHHHHHHHHHHHHHHHHHHH####....[3]HHHHHHHHHHHHHHHHHHHHH####....
 [2]HHHHHHHHHHHHHHHHHHHHH####....[1]HHHHHHHHHHHHHHHHHHHHH####....
(128 rows)

At the start of the page, you can see the page header (Ps). After that come line pointers, in increasing order. In this case, they are all normal (N). After some empty space are the tuples. These are in decreasing order, as they are added from the end of the page. The page is full when there is no more room for a tuple between the last line pointer and the last tuple.

Each tuple contains a header (the Hs), and 4 bytes of data for the 32-bit integer attribute a. After that there is 4 bytes of padding (....) between each tuple. This is there because tuple headers must be word-aligned. The tuple header is 24 bytes here, and there are another 4 bytes for the integer attribute, giving a total of 28 bytes per tuple. This example was run on a 64-bit machine, so words are 8 bytes. The next multiple of 8 larger than 28 is 32, hence the 4 bytes of padding.

Here's an example with a variable length text column:

# create table pvtest3(a text);
CREATE TABLE

# insert into pvtest3 select repeat('X', generate_series(0, 50, 10));
INSERT 0 6

# select * from pvtest3;
                         a
----------------------------------------------------

 XXXXXXXXXX
 XXXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
(6 rows)

# select show_page('pvtest3', 0, 64);
                             show_page
------------------------------------------------------------------
 PPPPPPPPPPPPPPPPPPPPPPPP001N002N003N004N005N006N
   << Hole - 121 rows skipped >>
                                                         [6]HHHHH
 HHHHHHHHHHHHHHHH################################################
 ###.....[5]HHHHHHHHHHHHHHHHHHHHH################################
 #########.......[4]HHHHHHHHHHHHHHHHHHHHH########################
 #######.[3]HHHHHHHHHHHHHHHHHHHHH#####################...[2]HHHHH
 HHHHHHHHHHHHHHHH###########.....[1]HHHHHHHHHHHHHHHHHHHHH#.......
(8 rows)

In this, the first tuple has a single byte of data. This is a 1 byte varlena length word, which will contain a value of zero as the attribute is empty. The remaining columns are, as you'd expect, length(a) + 1 bytes, as they are all short enough to be stored inline (not in a TOAST table).

About

PostgreSQL data page visualisation

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published