PostGIS 中数据类型 Geography(Point, 4326) 的大小?
Size of data type Geography(Point, 4326) in PostGIS?
它的构造函数接受一个 POINT 和一个 SRID。由于 POINT 是两个双精度数(每个 8 个字节),SRID 是一个整数(4 个字节),是否可以假设整个结构占用 8*2+4=20 个字节的存储空间 space?
看看ST_Mem_Size。这也为您提供了 toast 表的大小,因此比 pg_total_relation_size 和其他内置的 Postgres 函数更合适,后者不支持——尽管这仅适用于较大的几何图形。回到你的问题,有一点,
SELECT ST_Mem_Size(ST_MakePoint(0, 0));
returns 32 个字节,即 4 个双精度数(而不是您期望的 2 个)。这样做的原因是有额外的元数据,例如要存储的字节顺序。
添加 SRID,
SELECT ST_Mem_Size(ST_SetSRID(ST_MakePoint(0, 0), 4326));
returns 32 个字节。
现在,一个线串,有两个点,
SELECT ST_Mem_Size(ST_SetSRID(ST_GeomFromText('LINESTRING(0 0, 1 1)'), 4326));
returns 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、字节顺序等
它的构造函数接受一个 POINT 和一个 SRID。由于 POINT 是两个双精度数(每个 8 个字节),SRID 是一个整数(4 个字节),是否可以假设整个结构占用 8*2+4=20 个字节的存储空间 space?
看看ST_Mem_Size。这也为您提供了 toast 表的大小,因此比 pg_total_relation_size 和其他内置的 Postgres 函数更合适,后者不支持——尽管这仅适用于较大的几何图形。回到你的问题,有一点,
SELECT ST_Mem_Size(ST_MakePoint(0, 0));
returns 32 个字节,即 4 个双精度数(而不是您期望的 2 个)。这样做的原因是有额外的元数据,例如要存储的字节顺序。
添加 SRID,
SELECT ST_Mem_Size(ST_SetSRID(ST_MakePoint(0, 0), 4326));
returns 32 个字节。
现在,一个线串,有两个点,
SELECT ST_Mem_Size(ST_SetSRID(ST_GeomFromText('LINESTRING(0 0, 1 1)'), 4326));
returns 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、字节顺序等