Kelemahan menggunakan aturan adalah aturan hanya menulis ulang kueri setelah diurai sehingga jika data ditambahkan melalui pemicu, itu tidak akan diaktifkan. Lebih aman untuk menambahkan batasan CHECK yang memanggil fungsi dengan logika Anda. Jika saya mengikuti logika Anda dengan benar, seharusnya seperti ini:
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));