Não trabalho com Postgre, mas pela sua descrição, parece ser o mesmo problema que acontece no MySQL. Acontece que o trigger só é disparado por um DELETE, e a exclusão por CASCADE acontece por um mecanismo diferente. A solução pra isso é remover o CASCADE e adicionar um trigger BEFORE DELETE na tabela "pai" da nota_fiscal que dê um DELETE nela. Assim, com o DELETE sendo chamado por esse trigger, o da nota_fiscal também seré chamado.
tinha pesquisado a net toda por essa solução e não tinha encontrado... agora sim funcionou, valeu mesmo pela ajuda!
abraços!