Het nadeel van het gebruik van regels is dat regels de query eenvoudigweg herschrijven nadat deze is geparseerd, dus als de gegevens via een trigger worden toegevoegd, wordt deze niet geactiveerd. Het is veiliger om een CHECK-beperking toe te voegen die een functie aanroept met uw logica. Als ik je logica goed volg, zou het zoiets moeten zijn als:
CREATE OR REPLACE FUNCTION check_user_client(fkc int)
RETURNS boolean AS
$$
DECLARE
i int;
BEGIN
SELECT count(*) INTO i FROM legal_entity WHERE fk_client = fkc;
IF (i > 0) THEN
RETURN true;
END IF;
SELECT count(*) INTO i FROM user_client WHERE fk_client = fkc;
IF (i = 0) THEN
RETURN true;
END IF;
RETURN false;
END
$$ LANGUAGE plpgsql;
ALTER TABLE user_client ADD CONSTRAINT unique_user CHECK (check_user_client(fk_client));