Miałeś rację, myśląc o systemie zasad. Oto link do przykładu pasującego do Twojego problemu. To nawet prostsze niż wyzwalacze:
create rule protect_first_entry_update as
on update to your_table
where old.id = your_id
do instead nothing;
create rule protect_first_entry_delete as
on delete to your_table
where old.id = your_id
do instead nothing;
W niektórych odpowiedziach brakuje jednego punktu:również aktualizacja chronionego wiersza musi być ograniczona. W przeciwnym razie można najpierw zaktualizować chroniony wiersz, tak aby nie spełniał już zakazanego kryterium usuwania, a następnie można usunąć zaktualizowany wiersz, ponieważ nie jest już chroniony.