它的构造函数采用POINT和SRID。由于POINT是两个双精度数(每个8个字节),SRID是一个整数(4个字节),可以假设整个结构需要8 * 2 + 4 = 20个字节的存储空间吗?
答案 0 :(得分:8)
看看ST_Mem_Size。这也为您提供了toast表的大小,因此比pg_total_relation_size和其他内置的Postgres函数更合适 - 虽然这仅适用于较大的几何。回到你的问题,一点,
SELECT ST_Mem_Size(ST_MakePoint(0, 0));
返回32个字节,这是4个双倍(而不是你期望的2个)。原因是存在其他元数据,例如存储的字节序。
使用
添加SRIDSELECT ST_Mem_Size(ST_SetSRID(ST_MakePoint(0, 0), 4326));
返回32个字节。
现在,一个有两个点的Linestring
SELECT ST_Mem_Size(ST_SetSRID(ST_GeomFromText('LINESTRING(0 0, 1 1)'), 4326));
返回48个字节,现在只有16个字节,即2个双倍,大于Point,正如您所期望的那样。
现在,如果缓冲这一点,
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,字节序等。