Would someone explain to me why assign_recovery_target_lsn and related GUC assign hooks throw errors, rather than doing so in the associated check hooks? An assign hook is not supposed to throw an error. Full stop, no exceptions. We wouldn't bother to separate those hooks otherwise.
regards, tom lane