Ciao a tutti ho un piccolo database per la gestione di un sistema di votazioni online ,questo trigger parte all'aggiornamento di un campo di una tabella,tutto bene a parte il fatto che se OLD.ballottaggio è = false ovvero non entra nell'if tutto funziona alla perfezione, mentre se è true mi restituisce questo errore:
un valore chiave duplicato viola il vincolo univoco "elezione_pkey"
DETAIL: La chiave (id, turno)=(1, ballottaggio) esiste già.

IL PROBLEMA è che ovviamente non eissiste gia un record con quella chiave primaria ma appunto è quello che dovrebbe creare...non ho idea di dove sbattere la testa...sbaglio qualcosa?

codice:
CREATE OR REPLACE FUNCTION InserimentoElezione() RETURNS TRIGGER AS $$

	DECLARE
	Datainizio DATE%TYPE;
	Datafine DATE%TYPE;
 	Giorni Integer;
	Get_vinc candidatura.utente_cf%TYPE;
	Get_secondo candidatura.utente_cf%TYPE;
	Getid elezione.Id%TYPE;
        Getturno elezione.Turno%TYPE;
	
	BEGIN
	      SELECT OLD.id INTO Getid;
              SELECT OLD.turno INTO Getturno;

		IF(OLD.ballottaggio = TRUE)
		THEN
			Giorni=OLD.Dataf-OLD.Datain;
			Datainizio = OLD.Dataf + '4 days'::interval ;
			Datafine = Datainizio+Giorni;
	
			INSERT INTO elezione VALUES (OLD.Id , 'ballottaggio' , OLD.nomecarica , Datainizio, Datafine , FALSE , OLD.Descrizione , FALSE);
			
			SELECT Primo(OLD.Id, 'primo') INTO Get_vinc;
			SELECT Secondo(OLD.Id, 'primo') INTO Get_secondo;
			
			INSERT INTO candidatura VALUES( OLD.Id, Get_vinc , FALSE , 0 , 'ballottaggio');
			INSERT INTO candidatura VALUES( OLD.Id, Get_secondo , FALSE , 0 , 'ballottaggio');
		ELSE
			PERFORM vincitore(Getid,Getturno);
		
		END IF;

		RETURN NEW;
		
	END
	
	$$ LANGUAGE plpgsql;
	
CREATE TRIGGER ControlloBallottaggio BEFORE UPDATE OF Scaduta ON elezione FOR EACH ROW  EXECUTE PROCEDURE InserimentoElezione();