Размер типа данных Geography (Point, 4326) в PostGIS?
Его конструктор принимает точку и SRID. Поскольку POINT-это два двойника (по 8 байт каждый), SRID-целое число (4 байта), можно ли предположить, что полная структура занимает 8*2+4=20 байт места для хранения?
1 ответ:
Взгляните на ST_Mem_Size . Это дает вам размер таблиц тостов, а также, Так что более подходит, чем pg_total_relation_size и другие встроенные в Postgres функции, которые не делают - хотя это относится только к большим геометриям. Возвращаясь к вашему вопросу, для точки,
SELECT ST_Mem_Size(ST_MakePoint(0, 0));
Возвращает 32 байта, то есть 4 двойника (вместо ожидаемых 2). Причина этого заключается в том, что существуют дополнительные метаданные, такие как endianness для хранения.
Добавить в SRID, with,
SELECT ST_Mem_Size(ST_SetSRID(ST_MakePoint(0, 0), 4326));
Возвращает 32 байта.
Теперь, линия с двумя точками,
SELECT ST_Mem_Size(ST_SetSRID(ST_GeomFromText('LINESTRING(0 0, 1 1)'), 4326));
Возвращает 48 байт, что теперь составляет всего 16 байт, то есть 2 двойника, больше точки, как и следовало ожидать.
Теперь, если вы буферизуете эту точку,
SELECT ST_Mem_Size(ST_SetSRID(ST_Buffer(ST_MakePoint(0, 0), 10), 4326));
Вы получаете 568 байт, что связано с тем, что по умолчанию на четверть сегмента окружности приходится 8 точек, плюс повторяющаяся начальная точка в конце, которую можно проверить,
SELECT ST_NPoints(ST_SetSRID(ST_Buffer(ST_MakePoint(0, 0), 10), 4326));
Дает вам 33*16 = 528, с остальные 40 байтов, идущих от значение srid, байтов и т. д.