varlena

varlena

text型やbytea型など、PostgreSQL内での可変長データ型を表わす構造体。

以前は先頭4byteが長さを表すPascal文字列だったが、短い文字列に4バイトもヘッダを使うのはもったいないので8.3からは1byteのヘッダも使えるようになった。

ヘッダ長の4byte/1byteとデータが圧縮されているかどうかを表わすため、ヘッダの2bitを使っている。このためtext型などの最大長は1Gになっている。

どこの2bitを使っているかというとエンディアンによって違っていて特にリトルエンディアンでは大変なことになっている。しかも、TOASTされたりされなかったりしているので、専用の各種マクロを使わずにアクセスすることはオススメできない。