我的数据库有一个包含大量几何图形的表(PointZ,4326)我在数据库方面进行了大量的处理,我注意到当我使用ST_MakeLine时,我似乎在数字上限上限它将成为一条线。我的表和功能/查询如下。
只要从子查询返回的track_points的数量小于97,它就可以工作。我知道这是因为当有96个点或更少时,插入将数据放入表中的所有列。对于有97个或更多点的所有记录,它所插入的是track_id,start_time和end_time。
我想知道这是postgis的ST_makeLine函数中的错误,还是我需要修改的postgres中的设置。
CREATE TABLE track_line_strings(
track_id bigint NOT NULL,
linestring geometry(LINESTRINGZ,4326),
start_time bigint NOT NULL,
end_time bigint NOT NULL,
CONSTRAINT track_line_strings_pk PRIMARY KEY (track_id)
);
CREATE OR REPLACE FUNCTION create_track_line_string() RETURNS trigger
LANGUAGE plpgsql
AS $$
DECLARE
TRACKITEMID bigint := new.track_item_id;
TRACKID bigint := track_id from track_item ti where ti.id = TRACKITEMID;
STARTTIME bigint := MIN(ti.item_time) from track_item ti where ti.track_id = TRACKID;
ENDTIME bigint := MAX(ti.item_time) from track_item ti where ti.track_id = TRACKID;
BEGIN
IF EXISTS (SELECT track_id from track_line_strings where track_id = TRACKID)
THEN
UPDATE track_line_strings
SET start_time = STARTTIME, end_time = ENDTIME, linestring = (
SELECT ST_Makeline(e.trackPosition) FROM
(
Select track_id, tp.track_position AS trackPosition
FROM track_point tp JOIN track_item ti ON tp.track_item_id = ti.id
where ti.track_id = TRACKID ORDER BY ti.item_time ASC
) E )
WHERE track_id = TRACKID;
ELSE
INSERT INTO track_line_strings(track_id, linestring, start_time, end_time)
SELECT TRACKID, ST_Makeline(e.trackPosition), STARTTIME, ENDTIME FROM
(
Select track_id, tp.track_position AS trackPosition
FROM track_point tp JOIN track_item ti ON tp.track_item_id = ti.id
where ti.track_id = TRACKID ORDER BY ti.item_time ASC
)E;
END IF;
RETURN new;
END;
$$;
答案 0 :(得分:2)
字段中的database limits are pretty high,1 GB数据值的几何数据。它取决于什么类型的点几何,但它将是数千万个可用于构造LineString的点几何的数量级。
您会看到一条正确的错误消息,其中包含"超出尺寸"如果是限制。
使用pgAdminIII显然为空或缺少数据是一个常见问题,但与数据库限制无关:
答案 1 :(得分:1)
似乎没有限制。我在pgAdminIII中查看结果,并且数据输出可以为每列处理的字符数必须有限制。我只是通过将结果粘贴到文本文件中来实现这一点,以确定它确实为具有超过96个点的行返回了一个值。