我将表格表示某些几何图形作为分组到位置的区域(连接区域)。我有一个函数应该添加一个区域到一个地方。我收到以下错误,我不明白。
select * from addregion2place(1,1) ;
ERROR: column "rgnz" does not exist
LINE 1: update only place set rgnz = rgnz || region,
^
QUERY: update only place set rgnz = rgnz || region,
bx = containingBox( region.bx, bx )
from region
where place_id = intoPlace_id and reg_id = region_id
CONTEXT: PL/pgSQL function "addregion2place" line 4 at SQL statement
我正在尝试将区域添加到区域数组的末尾。有人可以告诉我为什么rgnz
在=
的右侧而不是在左边?更重要的是,如何修复?
CREATE OR REPLACE FUNCTION addRegion2Place( reg_id integer , intoPlace_id integer ) returns VOID AS $ar2p$
DECLARE
BEGIN
update only place set rgnz = rgnz || region,
bx = containingBox( region.bx, bx )
from region
where place_id = intoPlace_id and reg_id = region_id;
END;
$ar2p$ LANGUAGE plpgsql;
-- a closed path
create table if not exists region (
place_id integer,
pts polygon,
bx box CHECK (box(pts) ~= bx),
region_id integer DEFAULT nextval('region_region_id_seq'::regclass) NOT NULL
);
-- place: a collection of regions
create table if not exists place (
place_id integer DEFAULT nextval('place_place_id_seq'::regclass) NOT NULL,
bx box DEFAULT (NULL),
rgnz region[]
);
答案 0 :(得分:0)
有些列名不明确。将表限定添加到列以消除歧义。
CREATE OR REPLACE FUNCTION addRegion2Place(reg_id integer, intoplace_id integer)
RETURNS void AS
$ar2p$
BEGIN
UPDATE ONLY place p
SET rgnz = p.rgnz || r
, bx = containingBox(r.bx, b.bx) -- guessing; your code was ambiguous
FROM region r
WHERE p.place_id = intoplace_id -- more guessing
AND r.region_id = reg_id;
END
$ar2p$ LANGUAGE plpgsql;
特别是place_id
和bx
含糊不清。值得注意的是,rgnz
似乎没问题 - 除非您没有显示原始定义。您没有透露您的Postgres版本。旧版本对这些歧义有不同程度的容忍度(最终总会导致异常)。
同时确保region.region_id
和place.place_id
是唯一的,或者UPDATE
变得混乱。我在表格定义中没有看到PRIMARY KEY
或UNIQUE
约束。