Hello Laurenz,
Thank you for you suggestion. I really want to aviod that someone 'accidentally' deletes too much by typing (programming) a not full qualified DELETE ... statement. In your case one would have to always use the delete function, but no restrictions on using the DELETE statement.
There is no way you can prevent a superuser from shooting themselves in the foot. For anyone else you can enforce use of the function to perform the delete.
You could make a field called ok-to-delete and add a partial unique index on it so that only a single record can be marked ok to delete at a time and then have your trigger abort if it tries to delete a field without the ok to delete field set to true.
David J.