"Simon Kinsella" <simon(at)bluefiresystems(dot)co(dot)uk> writes:
> CREATE RULE rule_soft_delete_user AS ON DELETE TO users
> WHERE user_departed > now()
> DO INSTEAD
> UPDATE users SET user_departed = now()
> WHERE user_id = OLD.user_id;
This is run before the delete. However, since it's a conditional rule,
the delete is still run, with the added where-condition
NOT(user_departed > now()). Since the UPDATE has caused that to be
true, the delete happens. You should reconsider whether this is to be
conditional or not.
regards, tom lane