Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [postgres] trigger

  1. #1

    [postgres] trigger

    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!

  2. #2
    Ho creato questa asserzione, che in ogni caso non posso utilizzare, ma è quello che vorrei creare nel trigger:
    codice:
    create assertion eventovip
    check (not exists (select organizzatore from evento join utente on (evento.organizzatore = utente.email) where utente.vip = FALSE))

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.