Nackdelen med att använda regler är att reglerna helt enkelt skriver om frågan efter att den har analyserats så att om data läggs till via en utlösare kommer den inte att aktiveras. Det är säkrare att lägga till en CHECK-begränsning som anropar en funktion med din logik. Om jag följer din logik korrekt borde det vara något 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));