Ulempen ved at bruge regler er, at regler simpelthen omskriver forespørgslen, efter at den er parset, så hvis dataene tilføjes via en trigger, vil de ikke udløses. Det er mere sikkert at tilføje en CHECK-begrænsning, der kalder en funktion med din logik. Hvis jeg følger din logik korrekt, burde det være noget i stil med:
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));