PostGIS中数据类型Geography(Point,4326)的大小?

ilo*_*loo 3 size geography postgis point

它的构造函数采用POINT和SRID.由于POINT是两个双精度数(每个8个字节),SRID是一个整数(4个字节),可以假设整个结构需要8*2 + 4 = 20个字节的存储空间吗?

Joh*_*ell 9

看看ST_Mem_Size.这也为您提供了toast表的大小,因此比pg_total_relation_size和其他内置的Postgres函数更合适 - 虽然这仅适用于较大的几何.回到你的问题,一点,

SELECT ST_Mem_Size(ST_MakePoint(0, 0));
Run Code Online (Sandbox Code Playgroud)

返回32个字节,这是4个双精度数(而不是你期望的2个).这样做的原因是存在其他元数据,例如存储的字节序.

添加SRID,用,

SELECT ST_Mem_Size(ST_SetSRID(ST_MakePoint(0, 0), 4326));
Run Code Online (Sandbox Code Playgroud)

返回32个字节.

现在,一个有两个点的Linestring,

SELECT ST_Mem_Size(ST_SetSRID(ST_GeomFromText('LINESTRING(0 0, 1 1)'), 4326));
Run Code Online (Sandbox Code Playgroud)

返回48个字节,现在只有16个字节,即2个双精度数,大于Point,正如您所期望的那样.

现在,如果你缓冲这一点,

SELECT ST_Mem_Size(ST_SetSRID(ST_Buffer(ST_MakePoint(0, 0), 10), 4326));
Run Code Online (Sandbox Code Playgroud)

你得到568个字节,这是因为每个四分之一圆圈段默认有8个点,加上最后一个重复的起点,你可以查看,

SELECT ST_NPoints(ST_SetSRID(ST_Buffer(ST_MakePoint(0, 0), 10), 4326));
Run Code Online (Sandbox Code Playgroud)

给你33*16 = 528,其他40个字节来自SRID,字节序等.