PostgreSQL - 如何确保 ID 不存在于其他表中?

PostgreSQL - How can I ensure that an ID is not present in other tables?

我在 postgreSQL 中有四个 tables 如下:

Table A            Table A_POINTS  Table A_LINES  TABLE A_POLYGONS
----------------- ---------------- -------------- ----------------
id / colum1 / ...  id/  the_geom   id / the_geom  id/ the_geom

我想确保 table A 中的一个元素只存在于一个几何体 table 中。

我可以通过在几何 table 中设置 id UNIQUE 约束来做到这一点吗? 在这种情况下,我如何在 postgreSQL 中执行此操作?

编辑

是的,我想要的是对三个 table 的某种唯一约束。 Table 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

那么可以这样做吗?

我最终通过在插入每个几何体 table 之前触发一个函数来获得结果,以确保我要插入的标识符不存在于其他几何体 tables.

编辑

函数

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

触发

CREATE TRIGGER lineas_check_otra_tabla
  BEFORE INSERT
  ON denuncias_lineas
  FOR EACH ROW
  EXECUTE PROCEDURE trg_check_denuncias_lineas_otra_tabla();