gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:10:49 25 4
gpt4 key购买 nike

我在 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

那么这有可能吗?

最佳答案

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

编辑

功能

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();

关于sql - PostgreSQL - 如何确保 ID 不存在于其他表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36311201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com