Недостатъкът на използването на правила е, че правилата просто пренаписват заявката, след като бъде анализирана, така че ако данните се добавят чрез тригер, тя няма да се активира. По-безопасно е да добавите ограничение CHECK, което извиква функция с вашата логика. Ако следвам вашата логика правилно, трябва да е нещо като:
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));