我在postgreSQL中有四个表如下:
Table A Table A_POINTS Table A_LINES TABLE A_POLYGONS
----------------- ---------------- -------------- ----------------
id / colum1 / ... id/ the_geom id / the_geom id/ the_geom
我想确保表A中的一个元素只存在于一个几何表中。
我可以通过在几何表中设置ID UNIQUE约束来实现吗? 在这种情况下,如何在postgreSQL中执行此操作?
是的,我想要的是这三个表的某种独特约束。表A与点,线或多边形相关,但只是同时一个。
Table A Table A_POINTS Table A_LINES TABLE A_POLYGONS
----------------- ---------------- -------------- ----------------
id / colum1 / ... id/ the_geom id / the_geom id/ the_geom
1 blabla 1 09838082.. 3 082982.. 2 092809...
2 bleble
3 blibli
所以可以这样做吗?
答案 0 :(得分:2)
我最终通过在插入每个几何表之前触发一个函数来获得结果,以确保我要插入的标识符不存在于其他几何表中。
功能
CREATE OR REPLACE FUNCTION trg_check_denuncias_lineas_otra_tabla()
RETURNS trigger AS
$BODY$
BEGIN
IF EXISTS(SELECT * FROM denuncias_puntos WHERE gid = NEW.gid)
OR
EXISTS(SELECT * FROM denuncias_poligonos WHERE gid = NEW.gid)
THEN
RAISE EXCEPTION 'Report geometry should be only in one table of geometries';
END IF;
RETURN NEW;
END
$BODY$
LANGUAGE plpgsql VOLATILE
TRIGGER
CREATE TRIGGER lineas_check_otra_tabla
BEFORE INSERT
ON denuncias_lineas
FOR EACH ROW
EXECUTE PROCEDURE trg_check_denuncias_lineas_otra_tabla();