66.6. Ðомпоновка ÑÑÑаниÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
Рданном Ñазделе ÑаÑÑмаÑÑиваеÑÑÑ ÑоÑÐ¼Ð°Ñ ÑÑÑаниÑÑ, иÑполÑзÑемÑй в ÑаблиÑÐ°Ñ Ð¸ индекÑÐ°Ñ Postgres Pro.[15] ÐоÑледоваÑелÑноÑÑи и ÑаблиÑÑ TOAST ÑоÑмаÑиÑÑÑÑÑÑ ÐºÐ°Ðº обÑÑнÑе ÑаблиÑÑ.
РдалÑнейÑем подÑазÑмеваеÑÑÑ, ÑÑо Ð±Ð°Ð¹Ñ ÑодеÑÐ¶Ð¸Ñ 8 биÑ. Рдополнение, ÑеÑмин ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¾ÑноÑиÑÑÑ Ðº индивидÑалÑÐ½Ð¾Ð¼Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ , коÑоÑое Ñ ÑаниÑÑÑ Ð½Ð° ÑÑÑаниÑе. Ð ÑаблиÑе ÑÐ»ÐµÐ¼ÐµÐ½Ñ â ÑÑо ÑÑÑока; в индекÑе â ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¸Ð½Ð´ÐµÐºÑа.
ÐÐ°Ð¶Ð´Ð°Ñ ÑаблиÑа и Ð¸Ð½Ð´ÐµÐºÑ Ñ ÑанÑÑÑÑ ÐºÐ°Ðº маÑÑив ÑÑÑÐ°Ð½Ð¸Ñ ÑикÑиÑованного ÑазмеÑа (обÑÑно 8 kB, Ñ Ð¾ÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ вÑбÑаÑÑ Ð´ÑÑгой ÑÐ°Ð·Ð¼ÐµÑ ÑÑÑаниÑÑ Ð¿Ñи компилÑÑии ÑеÑвеÑа). Ð ÑаблиÑе вÑе ÑÑÑаниÑÑ Ð»Ð¾Ð³Ð¸ÑеÑки ÑквиваленÑнÑ, поÑÑÐ¾Ð¼Ñ ÐºÐ¾Ð½ÐºÑеÑнÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ (ÑÑÑока) Ð¼Ð¾Ð¶ÐµÑ Ñ ÑаниÑÑÑÑ Ð½Ð° лÑбой ÑÑÑаниÑе. РиндекÑÐ°Ñ Ð¿ÐµÑÐ²Ð°Ñ ÑÑÑаниÑа обÑÑно ÑезеÑвиÑÑеÑÑÑ ÐºÐ°Ðº меÑаÑÑÑаниÑа, Ñ ÑанÑÑÐ°Ñ ÐºÐ¾Ð½ÑÑолÑнÑÑ Ð¸Ð½ÑоÑмаÑиÑ, а внÑÑÑи индекÑа могÑÑ Ð±ÑÑÑ ÑазнÑе ÑÐ¸Ð¿Ñ ÑÑÑаниÑ, в завиÑимоÑÑи Ð¾Ñ Ð¼ÐµÑода доÑÑÑпа индекÑа.
ТаблиÑа 66.2 показÑÐ²Ð°ÐµÑ Ð¾Ð±ÑÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÑ ÑÑÑаниÑÑ. ÐÐ°Ð¶Ð´Ð°Ñ ÑÑÑаниÑа Ð¸Ð¼ÐµÐµÑ Ð¿ÑÑÑ ÑаÑÑей.
ТаблиÑа 66.2. ÐбÑÐ°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° ÑÑÑаниÑÑ
| ÐÐ»ÐµÐ¼ÐµÐ½Ñ | ÐпиÑание |
|---|---|
| ÐаннÑе заголовка ÑÑÑаниÑÑ | Ðлина â 24 байÑа. СодеÑÐ¶Ð¸Ñ Ð¾Ð±ÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑÑÑаниÑе, вклÑÑÐ°Ñ ÑказаÑели Ñвободного пÑоÑÑÑанÑÑва. |
| ÐаннÑе иденÑиÑикаÑоÑов ÑлеменÑов | ÐаÑÑив иденÑиÑикаÑоÑов, ÑказÑваÑÑÐ¸Ñ Ð½Ð° ÑакÑиÑеÑкие ÑлеменÑÑ. ÐаждÑй иденÑиÑикаÑÐ¾Ñ Ð¿ÑедÑÑавлÑÐµÑ Ñобой паÑÑ Â«ÑмеÑение, длина» и Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ 4 байÑа. |
| Свободное пÑоÑÑÑанÑÑво | ÐезанÑÑое пÑоÑÑÑанÑÑво. ÐовÑе иденÑиÑикаÑоÑÑ ÑлеменÑов ÑазмеÑаÑÑÑÑ Ñ Ð½Ð°Ñала ÑÑой облаÑÑи, Ñами новÑе ÑлеменÑÑ â Ñ ÐºÐ¾Ð½Ñа. |
| ÐлеменÑÑ | Сами ÑлеменÑÑ Ð´Ð°Ð½Ð½ÑÑ ÐºÐ°Ðº ÑаковÑе. |
| СпеÑиалÑное пÑоÑÑÑанÑÑво | СпеÑиÑиÑеÑкие даннÑе меÑода доÑÑÑпа. ÐÐ»Ñ ÑазлиÑнÑÑ Ð¼ÐµÑодов Ñ ÑанÑÑÑÑ ÑазлиÑнÑе даннÑе. ÐÐ»Ñ Ð¾Ð±ÑÑнÑÑ ÑÐ°Ð±Ð»Ð¸Ñ ÑÐ°ÐºÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½ÐµÑ. |
ÐеÑвÑе 24 байÑа каждой ÑÑÑаниÑÑ Ð¾Ð±ÑазÑÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº ÑÑÑаниÑÑ (PageHeaderData). Ðго ÑоÑÐ¼Ð°Ñ Ð¿Ð¾Ð´Ñобно опиÑан в ТаблиÑе 66.3. РпеÑвом поле оÑÑлеживаеÑÑÑ ÑÐ°Ð¼Ð°Ñ Ð¿Ð¾ÑледнÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð² WAL, ÑвÑÐ·Ð°Ð½Ð½Ð°Ñ Ñ ÑÑой ÑÑÑаниÑей. ÐÑоÑое поле ÑодеÑÐ¶Ð¸Ñ ÐºÐ¾Ð½ÑÑолÑнÑÑ ÑÑÐ¼Ð¼Ñ ÑÑÑаниÑÑ, еÑли вклÑÑÑн Ñежим ÐонÑÑолÑнÑе ÑÑÐ¼Ð¼Ñ Ð´Ð°Ð½Ð½ÑÑ
. ÐаÑем идÑÑ Ð´Ð²ÑÑ
байÑовое поле, ÑодеÑжаÑее биÑÑ Ñлагов. Ðа ним ÑледÑÑÑ ÑÑи двÑÑ
байÑовÑÑ
ÑелоÑиÑленнÑÑ
Ð¿Ð¾Ð»Ñ (pd_lower, pd_upper и pd_special). Ðни ÑодеÑÐ¶Ð°Ñ ÑмеÑÐµÐ½Ð¸Ñ Ð² байÑаÑ
Ð¾Ñ Ð½Ð°Ñала ÑÑÑаниÑÑ Ð´Ð¾ наÑала незанÑÑого пÑоÑÑÑанÑÑва, до конÑа незанÑÑого пÑоÑÑÑанÑÑва и до наÑала ÑпеÑиалÑного пÑоÑÑÑанÑÑва. Ð ÑледÑÑÑиÑ
2 байÑаÑ
заголовка ÑÑÑаниÑÑ, в поле pd_pagesize_version, Ñ
ÑаниÑÑÑ ÑÐ°Ð·Ð¼ÐµÑ ÑÑÑаниÑÑ Ð¸ индикаÑÐ¾Ñ Ð²ÐµÑÑии. ÐаÑÐ¸Ð½Ð°Ñ Ñ PostgreSQL 8.3, иÑполÑзÑеÑÑÑ Ð²ÐµÑÑÐ¸Ñ 4; в PostgreSQL 8.1 и 8.2 иÑполÑзовалаÑÑ Ð²ÐµÑÑÐ¸Ñ 3; в PostgreSQL 8.0 â веÑÑÐ¸Ñ 2; в PostgreSQL 7.3 и 7.4 â веÑÑÐ¸Ñ 1; в пÑедÑдÑÑиÑ
вÑпÑÑкаÑ
â веÑÑÐ¸Ñ 0. (ÐÑÐ½Ð¾Ð²Ð½Ð°Ñ ÑÑÑÑкÑÑÑа ÑÑÑаниÑÑ Ð¸ ÑоÑÐ¼Ð°Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° поÑÑи во вÑеÑ
ÑÑиÑ
веÑÑиÑÑ
одни и Ñе же, но ÑÑÑÑкÑÑÑа заголовка ÑÑÑок в кÑÑе изменÑлаÑÑ.) Ð Ð°Ð·Ð¼ÐµÑ ÑÑÑаниÑÑ Ð¿ÑиÑÑÑÑÑвÑÐµÑ Ð² оÑновном ÑолÑко Ð´Ð»Ñ Ð¿ÐµÑекÑÑÑÑной пÑовеÑки; возможноÑÑÑ Ð¸ÑполÑзоваÑÑ Ð² одной инÑÑаллÑÑии ÑазнÑе ÑазмеÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð½Ðµ поддеÑживаеÑÑÑ. ÐоÑледнее поле подÑказÑваеÑ, наÑколÑко веÑоÑÑна возможноÑÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð²ÑигÑÑÑ, пÑÐ¾Ð¸Ð·Ð²ÐµÐ´Ñ Ð¾ÑиÑÑÐºÑ ÑÑÑаниÑÑ: оно оÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°ÐµÑ ÑамÑй ÑÑаÑÑй XMAX на ÑÑÑаниÑе, не подвеÑгавÑийÑÑ Ð¾ÑиÑÑке.
ТаблиÑа 66.3. ÐаннÑе заголовка ÑÑÑаниÑÑ (PageHeaderData)
| Ðоле | Тип | Ðлина | ÐпиÑание |
|---|---|---|---|
| pd_lsn | PageXLogRecPtr | 8 Ð±Ð°Ð¹Ñ | LSN: СледÑÑÑий Ð±Ð°Ð¹Ñ Ð¿Ð¾Ñле поÑледнего байÑа запиÑи WAL Ð´Ð»Ñ Ð¿Ð¾Ñледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° ÑÑой ÑÑÑаниÑе |
| pd_checksum | uint16 | 2 байÑа | ÐонÑÑолÑÐ½Ð°Ñ ÑÑмма ÑÑÑаниÑÑ |
| pd_flags | uint16 | 2 байÑа | ÐиÑÑ Ð¿Ñизнаков |
| pd_lower | LocationIndex | 2 байÑа | СмеÑение до наÑала Ñвободного пÑоÑÑÑанÑÑва |
| pd_upper | LocationIndex | 2 байÑа | СмеÑение до конÑа Ñвободного пÑоÑÑÑанÑÑва |
| pd_special | LocationIndex | 2 байÑа | СмеÑение до наÑала ÑпеÑиалÑного пÑоÑÑÑанÑÑва |
| pd_pagesize_version | uint16 | 2 байÑа | ÐнÑоÑмаÑÐ¸Ñ Ð¾ ÑазмеÑе ÑÑÑаниÑÑ Ð¸ номеÑе веÑÑии компоновки |
| pd_prune_xid | TransactionId | 4 байÑа | СамÑй ÑÑаÑÑй неоÑиÑеннÑй иденÑиÑикаÑÐ¾Ñ XMAX на ÑÑÑаниÑе или Ð½Ð¾Ð»Ñ Ð¿Ñи оÑÑÑÑÑÑвии Ñакового |
Ðа заголовком ÑÑÑаниÑÑ ÑледÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑÑ ÑлеменÑа (ItemIdData), ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð¸Ð· коÑоÑÑÑ
ÑÑебÑеÑÑÑ 4 байÑа. ÐденÑиÑикаÑÐ¾Ñ ÑлеменÑа ÑодеÑÐ¶Ð¸Ñ Ð±Ð°Ð¹Ñовое ÑмеÑение до наÑала ÑлеменÑа, его Ð´Ð»Ð¸Ð½Ñ Ð² байÑаÑ
и неÑколÑко биÑов аÑÑибÑÑов, коÑоÑÑе влиÑÑÑ Ð½Ð° его инÑеÑпÑеÑаÑиÑ. ÐовÑе иденÑиÑикаÑоÑÑ ÑлеменÑов ÑазмеÑаÑÑÑÑ Ð¿Ð¾ меÑе необÑ
одимоÑÑи Ð¾Ñ Ð½Ð°Ñала Ñвободного пÑоÑÑÑанÑÑва. ÐолиÑеÑÑво имеÑÑиÑ
ÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов ÑлеменÑов можно опÑеделиÑÑ ÑеÑез знаÑение pd_lower, коÑоÑое ÑвелиÑиваеÑÑÑ Ð¿Ñи добавлении нового иденÑиÑикаÑоÑа. ÐоÑколÑÐºÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÑлеменÑа никогда не пеÑемеÑаеÑÑÑ Ð´Ð¾ ÑеÑ
поÑ, пока он не оÑвобождаеÑÑÑ, его Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð² ÑеÑение длиÑелÑного пеÑиода вÑемени, ÑÑÐ¾Ð±Ñ ÑÑÑлаÑÑÑÑ Ð½Ð° ÑлеменÑ, даже когда Ñам ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿ÐµÑемеÑаеÑÑÑ Ð¿Ð¾ ÑÑÑаниÑе Ð´Ð»Ñ ÑплоÑÐ½ÐµÐ½Ð¸Ñ Ñвободного пÑоÑÑÑанÑÑва. ФакÑиÑеÑки каждÑй ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÐ»ÐµÐ¼ÐµÐ½Ñ (ItemPointer, Ñакже извеÑÑнÑй как CTID), ÑозданнÑй Postgres Pro, ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· номеÑа ÑÑÑаниÑÑ Ð¸ индекÑа иденÑиÑикаÑоÑа ÑлеменÑа.
Сами ÑлеменÑÑ Ñ
ÑанÑÑÑÑ Ð² пÑоÑÑÑанÑÑве, вÑделÑемом в напÑавлении Ð¾Ñ ÐºÐ¾Ð½Ñа к наÑÐ°Ð»Ñ Ð½ÐµÐ·Ð°Ð½ÑÑого пÑоÑÑÑанÑÑва. ТоÑÐ½Ð°Ñ ÑÑÑÑкÑÑÑа менÑеÑÑÑ Ð² завиÑимоÑÑи Ð¾Ñ Ñого, каким бÑÐ´ÐµÑ ÑодеÑжимое ÑаблиÑÑ. Ðак ÑаблиÑÑ, Ñак и поÑледоваÑелÑноÑÑи иÑполÑзÑÑÑ ÑÑÑÑкÑÑÑÑ Ð¿Ð¾Ð´ названием HeapTupleHeaderData, коÑоÑÐ°Ñ Ð¾Ð¿Ð¸ÑÑваеÑÑÑ Ð½Ð¸Ð¶Ðµ.
ÐоÑледний Ñаздел ÑвлÑеÑÑÑ Â«Ð¾ÑобÑм Ñазделом», коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð²ÑÑ, ÑÑо необÑ
одимо меÑÐ¾Ð´Ñ Ð´Ð¾ÑÑÑпа Ð´Ð»Ñ Ñ
ÑанениÑ. ÐапÑимеÑ, индекÑÑ-B-деÑевÑÑ Ñ
ÑанÑÑ ÑÑÑлки на ÑÑÑаниÑÑ Ñлева и ÑпÑава, Ñавно как и некоÑоÑÑе дÑÑгие даннÑе, ÑооÑвеÑÑÑвÑÑÑие ÑÑÑÑкÑÑÑе индекÑа. ÐбÑÑнÑе ÑаблиÑÑ Ð½Ðµ иÑполÑзÑÑÑ Ð¾ÑобÑй Ñаздел вовÑе (ÑÑо ÑказÑваеÑÑÑ ÑÑÑановкой знаÑÐµÐ½Ð¸Ñ pd_special ÑавнÑм ÑазмеÑÑ ÑÑÑаниÑÑ).
РиÑÑнок 66.1 показÑваеÑ, как ÑÑи компоненÑÑ ÑазмеÑаÑÑÑÑ Ð² ÑÑÑаниÑе.
РиÑÑнок 66.1. Ðомпоновка ÑÑÑаниÑÑ
66.6.1. Ðомпоновка ÑÑÑоки ÑаблиÑÑ
ÐÑе ÑÑÑоки ÑаблиÑÑ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²ÑÑ ÑÑÑÑкÑÑÑÑ. Ðни вклÑÑаÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº ÑикÑиÑованного ÑазмеÑа (занимаÑÑий 23 байÑа на болÑÑинÑÑве маÑин), за коÑоÑÑм ÑледÑÐµÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑÐ½Ð°Ñ Ð±Ð¸ÑÐ¾Ð²Ð°Ñ ÐºÐ°ÑÑа пÑÑÑÑÑ
знаÑений, необÑзаÑелÑное поле иденÑиÑикаÑоÑа обÑекÑа и даннÑе полÑзоваÑелÑ. ÐодÑобное опиÑание заголовка пÑедÑÑавлено в ТаблиÑе 66.4. ÐкÑÑалÑнÑе полÑзоваÑелÑÑкие даннÑе (ÑÑолбÑÑ ÑÑÑоки) наÑинаÑÑÑÑ Ð¿Ð¾Ñле ÑмеÑениÑ, заданного в t_hoff, коÑоÑое должно вÑегда бÑÑÑ ÐºÑаÑнÑм велиÑине MAXALIGN Ð´Ð»Ñ Ð¿Ð»Ð°ÑÑоÑмÑ. ÐиÑÐ¾Ð²Ð°Ñ ÐºÐ°ÑÑа пÑÑÑÑÑ
знаÑений имееÑÑÑ Ñогда, когда Ð±Ð¸Ñ HEAP_HASNULL ÑÑÑановлен в знаÑении t_infomask. Ð ÑлÑÑае налиÑÐ¸Ñ Ð¾Ð½Ð° наÑинаеÑÑÑ ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле ÑикÑиÑованного заголовка и Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑолÑко байÑов, ÑколÑко ÑÑебÑеÑÑÑ Ð´Ð»Ñ ÑазмеÑÐµÐ½Ð¸Ñ Ð±Ð¸Ñов по колиÑеÑÑÐ²Ñ ÑÑолбÑов (Ñ. е. ÑиÑло биÑов Ñавно колиÑеÑÑÐ²Ñ Ð°ÑÑибÑÑов, опÑеделÑÐµÐ¼Ð¾Ð¼Ñ Ð¿Ð¾Ð»ÐµÐ¼ t_infomask2). Ð ÑÑом ÑпиÑке биÑов ÑÑÑановленнÑй Ð±Ð¸Ñ Ð¾Ð·Ð½Ð°ÑÐ°ÐµÑ Ð½ÐµÐ¿ÑÑÑое знаÑение, а ÑбÑоÑеннÑй ÑооÑвеÑÑÑвÑÐµÑ Ð¿ÑÑÑÐ¾Ð¼Ñ Ð·Ð½Ð°ÑениÑ. Ðогда биÑÐ¾Ð²Ð°Ñ ÐºÐ°ÑÑа оÑÑÑÑÑÑвÑеÑ, вÑе ÑÑолбÑÑ ÑÑиÑаÑÑÑÑ Ð½ÐµÐ¿ÑÑÑÑми. ÐденÑиÑикаÑÐ¾Ñ Ð¾Ð±ÑекÑа пÑиÑÑÑÑÑвÑеÑ, еÑли ÑолÑко в знаÑении t_infomask ÑÑÑановлен Ð±Ð¸Ñ HEAP_HASOID_OLD. ÐÑли он еÑÑÑ, он ÑаÑположен ÑÑÐ°Ð·Ñ Ð¿ÐµÑед наÑалом t_hoff. ÐÑбое заполнение, необÑ
одимое Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ ÑделаÑÑ t_hoff кÑаÑнÑм MAXALIGN, бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾ Ð¼ÐµÐ¶Ð´Ñ Ð±Ð¸Ñовой каÑÑой пÑÑÑÑÑ
знаÑений и иденÑиÑикаÑоÑом обÑекÑа. (ÐÑо в ÑÐ²Ð¾Ñ Ð¾ÑеÑÐµÐ´Ñ Ð³Ð°ÑанÑиÑÑеÑ, ÑÑо иденÑиÑикаÑÐ¾Ñ Ð¾Ð±ÑекÑа бÑÐ´ÐµÑ Ð¿ÑавилÑно вÑÑовнен.)
ТаблиÑа 66.4. ÐаннÑе заголовка ÑÑÑоки ÑаблиÑÑ (HeapTupleHeaderData)
| Ðоле | Тип | Ðлина | ÐпиÑание |
|---|---|---|---|
| t_xmin | TransactionId | 4 байÑа | знаÑение XID вÑÑавки |
| t_xmax | TransactionId | 4 байÑа | знаÑение XID ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ |
| t_cid | CommandId | 4 байÑа | знаÑение CID Ð´Ð»Ñ Ð²ÑÑавки и/или ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ (пеÑеÑекаеÑÑÑ Ñ t_xvac) |
| t_xvac | TransactionId | 4 байÑа | XID Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑии VACUUM, коÑоÑÐ°Ñ Ð¿ÐµÑемеÑÐ°ÐµÑ Ð²ÐµÑÑÐ¸Ñ ÑÑÑоки |
| t_ctid | ItemPointerData | 6 Ð±Ð°Ð¹Ñ | ÑекÑÑее знаÑение TID ÑÑой или более новой веÑÑии ÑÑÑоки |
| t_infomask2 | uint16 | 2 байÑа | колиÑеÑÑво аÑÑибÑÑов плÑÑ ÑазлиÑнÑе биÑÑ Ñлагов |
| t_infomask | uint16 | 2 байÑа | ÑазлиÑнÑе биÑÑ Ñлагов |
| t_hoff | uint8 | 1 Ð±Ð°Ð¹Ñ | оÑÑÑÑп до полÑзоваÑелÑÑÐºÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ |
ÐнÑеÑпÑеÑиÑоваÑÑ ÑекÑÑие даннÑе можно ÑолÑко Ñ Ð¸ÑполÑзованием инÑоÑмаÑии, полÑÑенной из дÑÑгиÑ
ÑаблиÑ, в оÑновном из pg_attribute. ÐлÑÑевÑми знаÑениÑми, необÑ
одимÑми Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑаÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÐµÐ¹, ÑвлÑÑÑÑÑ attlen и attalign. Ðе ÑÑÑеÑÑвÑÐµÑ ÑпоÑоба непоÑÑедÑÑвенного полÑÑÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ аÑÑибÑÑа, кÑоме ÑлÑÑаÑ, когда имеÑÑÑÑ ÑолÑко Ð¿Ð¾Ð»Ñ ÑикÑиÑованной Ð´Ð»Ð¸Ð½Ñ Ð¸ пÑи ÑÑом Ð½ÐµÑ Ð·Ð½Ð°Ñений NULL. ÐÑе ÑÑи оÑобенноÑÑи ÑÑиÑÑваÑÑÑÑ Ð² ÑÑнкÑиÑÑ
heap_getattr, fastgetattr и heap_getsysattr.
ЧÑÐ¾Ð±Ñ Ð¿ÑоÑиÑаÑÑ Ð´Ð°Ð½Ð½Ñе, необÑ
одимо пÑоÑмоÑÑеÑÑ ÐºÐ°Ð¶Ð´Ñй аÑÑибÑÑ Ð¿Ð¾ оÑеÑеди. РпеÑвÑÑ Ð¾ÑеÑÐµÐ´Ñ Ð½Ñжно пÑовеÑиÑÑ, ÑвлÑеÑÑÑ Ð»Ð¸ знаÑение Ð¿Ð¾Ð»Ñ Ð¿ÑÑÑÑм ÑоглаÑно биÑовой каÑÑе пÑÑÑÑÑ
знаÑений. ÐÑли ÑÑо Ñак, можно пеÑеÑ
одиÑÑ Ðº ÑледÑÑÑÐµÐ¼Ñ Ð¿Ð¾Ð»Ñ. ÐаÑем ÑледÑÐµÑ ÑбедиÑÑÑÑ, ÑÑо вÑÑавнивание ÑвлÑеÑÑÑ Ð²ÐµÑнÑм. ÐÑли ÑÑо поле ÑикÑиÑованной ÑиÑинÑ, беÑÑÑÑÑ Ð¿ÑоÑÑо вÑе его байÑÑ. ÐÑли ÑÑо поле пеÑеменной Ð´Ð»Ð¸Ð½Ñ (attlen = -1), вÑÑ Ð½ÐµÑколÑко Ñложнее. ÐÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
Ñ Ð¿ÐµÑеменной длиной имеÑÑ Ð¾Ð±ÑÑÑ ÑÑÑÑкÑÑÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° struct varlena, коÑоÑÐ°Ñ Ð²ÐºÐ»ÑÑÐ°ÐµÑ Ð¾Ð±ÑÑÑ Ð´Ð»Ð¸Ð½Ñ ÑоÑ
ÑанÑнного знаÑÐµÐ½Ð¸Ñ Ð¸ некоÑоÑÑе биÑÑ Ñлагов. РзавиÑимоÑÑи Ð¾Ñ ÑÑÑановленнÑÑ
Ñлагов, даннÑе могÑÑ Ñ
ÑаниÑÑÑÑ Ð»Ð¸Ð±Ð¾ локалÑно, либо в ÑаблиÑе TOAST. Также, возможно ÑжаÑие даннÑÑ
(Ñм. Раздел 66.2).
[15] Ðа Ñамом деле ÑÑÐ¾Ñ ÑоÑÐ¼Ð°Ñ ÑÑÑÐ°Ð½Ð¸Ñ Ð½Ðµ ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм ни Ð´Ð»Ñ ÑаблиÑнÑÑ
, ни Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑнÑÑ
меÑодов доÑÑÑпа. Ðго вÑегда иÑполÑзÑÐµÑ ÑаблиÑнÑй меÑод heap и вÑе ÑÑÑеÑÑвÑÑÑие индекÑнÑе меÑодÑ, но в меÑаÑÑÑаниÑаÑ
индекÑов даннÑе обÑÑно компонÑÑÑÑÑ Ð¿Ð¾ дÑÑгим пÑавилам.