Witam was. Mam problem z moim triggerem :

  -- Function: zamelemdelete()

-- DROP FUNCTION zamelemdelete();

CREATE OR REPLACE FUNCTION zamelemdelete()
  RETURNS trigger AS
$BODY$
    BEGIN

        IF EXISTS(SELECT 1 FROM zamnag where zamn_gidnumer = old.zame_gidnumer and zamn_zatwierdzony = false) THEN

         return new;

        ELSE

IF  EXISTS(SELECT 1 FROM zamnag where zamn_gidnumer = old.zame_gidnumer and zamn_zatwierdzony = TRUE and zamn_sprz = false) THEN

 IF  (SELECT CASE WHEN (SELECT sum(zame_ilosc) FROM zamelem INNER JOIN zamnag on zamn_gidnumer = zame_gidnumer and zamn_zatwierdzony = true and zame_twrgidnumer = old.zame_twrgidnumer and zamn_sprz = FALSE) IS NULL then 0  ELSE  (SELECT sum(zame_ilosc) FROM zamelem INNER JOIN zamnag on zamn_gidnumer = zame_gidnumer and zamn_zatwierdzony = true and zame_twrgidnumer = old.zame_twrgidnumer and zamn_sprz = FALSE) END - CASE WHEN (SELECT sum(zame_ilosc) FROM zamelem INNER JOIN zamnag on zamn_gidnumer = zame_gidnumer and zamn_zatwierdzony = true and zame_twrgidnumer = zame_gidnumer and zamn_sprz = TRUE) IS NULL then 0  ELSE  (SELECT sum(zame_ilosc) FROM zamelem INNER JOIN zamnag on zamn_gidnumer = zame_gidnumer and zamn_zatwierdzony = true and zame_twrgidnumer = old.zame_twrgidnumer and zamn_sprz = TRUE)   end  FROM twrkarty where twr_gidnumer = old.zame_twrgidnumer) > old.zame_ilosc THEN

 return new;

 ELSE

 RAISE 'Jeden Z Towarów Nie Został zwrócony ze względu na brak ilości do zwrotu !';
 END IF;

ELSE

return new;

END IF;

        END IF;
 return new;

    END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION zamelemdelete()
  OWNER TO postgres;

Triger niby się wywołuje odpowiednio, wchodzi gdzie ma wchodzić lecz nie usuwa rekordów podczas spełnienia warunków. Warunki sprawdziłem i wszystko jest OK skrypt również dochodzi do return new w odpowiednich miejsach ale i tak rekord caly czas istnieje. Gdy odłącze triggera rekordy da się usuwać