PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Не използвайки NULL в PostgreSQL все още ли използва NULL растерна карта в заглавката?

Всъщност е по-сложно от това.

Нулевата растерна карта се нуждае от един бит на колона в реда, закръглен до пълни байтове. Има го само ако действителният ред включва поне една стойност NULL и е напълно разпределен в този случай. NOT NULL ограниченията не влияят пряко на това. (Разбира се, ако всички полета на вашата таблица са NOT NULL , никога не може да има нулева растерна карта.)

"Heap tuple header" (на ред) е с дължина 23 байта. Действителните данни започват с кратно на MAXALIGN (Максимално подравняване на данните ) след това, което обикновено е 8 байта на 64-битова ОС (4 байта на 32-битова ОС). Изпълнете следната команда от вашата двоична директория на PostgreSQL като root, за да получите окончателен отговор:

./pg_controldata /path/to/my/dbcluster

При типична базирана на Debian инсталация на Postgres 12 това би било:

sudo /usr/lib/postgresql/12/bin/pg_controldata /var/lib/postgresql/12/main

Така или иначе, между заглавката и подравненото начало на данните има един свободен байт, който нулевото растерно изображение може да използва. Стига таблицата ви да има 8 колони или по-малко , NULL хранилището е ефективно абсолютно безплатно (що се отнася до дисковото пространство).

След това друг MAXALIGN (обикновено 8 байта) се разпределя за нулевата растерна карта, за да покрие други (обикновено) 64 полета. И т.н.

Това е валидно за поне версии 8.4 - 12 и най-вероятно няма да се промени.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Escape SQL LIKE стойност за Postgres с psycopg2

  2. Не може да се използва таблица с име потребител в postgresql hibernate

  3. Избиране на множество max() стойности с помощта на един SQL израз

  4. Django+Postgres:текущата транзакция е прекратена, командите се игнорират до края на блока на транзакцията

  5. Грешка:Няма модул с име psycopg2.extensions