From: | "Jonathan Bond-Caron" <jbondc(at)gmail(dot)com> |
---|---|
To: | <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Reading deleted records - PageHeader v3 |
Date: | 2010-02-05 13:39:14 |
Message-ID: | 002201caa668$9c5583a0$d5008ae0$@com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi,
So first I'm a pgsql hacker newbie and I've been reading up on the storage
structure:
http://www.postgresql.org/docs/8.2/interactive/storage-page-layout.html
I'm trying to recover deleted records from a page file (postgresql 8.2) :
i.e. base/dbId/20132
I am able to successfully read all the header data I need (PageHeaderData,
ItemIdData , HeapTupleHeaderData)
but I hit a wall when I try to start reading user data.
This has helped:
http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/postgres.h?rev=1.
77;content-type=text%2Fplain
I've read and understood fairly well how varlena structures are stored
(plain, compressed, external/toast) but so far I can't seem to read a plain
inline value.
I think part of my problem is I haven't really understood what 'Then make
sure you have the right alignment' means.
My approach currently is:
After reading HeapTupleHeaderData (23 bytes), I advance another 4 bytes
(hoff) and try to read a 32 bit integer (first attribute).
I am expecting to get an integer value 1 but I get 512 .
Am I doing this wrong?
Could someone point me to the pgsql code pieces I should be looking at?
If useful, this is the information I have before reading the 'user data':
object(PostgreSQL_HeapTupleHeaderData)#14 (7) {
["xmin"]=>
string(5) "13824"
["xmax"]=>
string(1) "0"
["cid"]=>
string(1) "0"
["ctid"]=>
object(PostgreSQL_ItemPointerData)#16 (2) {
["blockId"]=>
string(1) "0"
["posId"]=>
int(0)
}
["infomask2"]=>
int(0)
["infomask"]=>
int(2)
["hoff"]=>
int(4)
}
object(PostgreSQL_Attribute)#7 (6) {
["name"]=>
string(7) "book_id"
["relid"]=>
int(20132)
["len"]=>
int(4)
["num"]=>
int(1)
["ndims"]=>
int(0)
["align"]=>
string(1) "i"
}
array(1) {
["book_id"]=>
int(512)
}
From | Date | Subject | |
---|---|---|---|
Next Message | Tim Bunce | 2010-02-05 13:40:44 | Add on_plperl_init and on_plperlu_init to plperl UPDATE 3 [PATCH] |
Previous Message | KaiGai Kohei | 2010-02-05 06:57:40 | Re: Largeobject Access Controls (r2460) |