Ciao a tutti!
Devo trovare un modo per controllare un vincolo di integrità.

Ho creato un sito molto simile a Facebook (con molte meno possibilità e non per mia scelta ).

Il vincolo da rispettare è:
Un utente non VIP non può organizzare eventi.

Per inciso, un utente non VIP è un utente con meno di 10 amici e il campo VIP di utente è un booleano e viene aggiornato ad ogni login al sito.

Essendo un vincolo interrelazionale non posso usare un CHECK, avrei voluto creare un Asserzione ma a quanto pare Postgres non le supporta.

Allora ho tentato di scrivere un Trigger!
codice:
CREATE OR REPLACE FUNCTION organiz_eventi() RETURNS TRIGGER AS $organiz_eventi$
	DECLARE
		utente character varying;
		r holder%rowtype;
	BEGIN
		utente := (SELECT email FROM utente WHERE vip = FALSE);
		IF ((SELECT COUNT(*) FROM evento WHERE organizzatore = utente) > 0)
		THEN
		RAISE EXCEPTION 'Non hai il diritto di organizzare eventi perché non sei un utente VIP';
		END IF;
	END;
$organiz_eventi$ LANGUAGE plpgsql;

CREATE TRIGGER organiz_eventi BEFORE INSERT 
ON evento 
EXECUTE PROCEDURE organiz_eventi();
Questo trigger on funziona perché
1) non ho mai scritto trigger in vita mia
2) non ho trovato abbastanza esempi e tutorial
3) mi dice che ritorna più di una riga, cosa che è vera dal momento che più di un utente nella mia tabella UTENTE ha VIP = FALSE

Come posso fare per sistemarla? Non chiedo la pappa pronta, ma qualche suggerimento!