Mark Dilger <[email protected]> writes:
>> On Nov 25, 2017, at 3:33 PM, Tomas Vondra <[email protected]>
>> wrote:
>> I might be missing something, but why would ereport be more appropriate
>> than elog? Ultimately, there's not much difference between elog(ERROR)
>> and ereport(ERROR) - both will cause a failure.
The core technical differences are (1) an ereport message is exposed for
translation, normally, while an elog is not; and (2) with ereport you can
set the errcode, whereas with elog it's always going to be XX000
(ERRCODE_INTERNAL_ERROR).
> I understand project policy to allow elog for error conditions that will be
> reported
> in "can't happen" type situations, similar to how an Assert would be used.
> For
> conditions that can happen through (mis)use by the user, ereport is
> appropriate.
The project policy about this is basically that elog should only be used
for things that are legitimately "internal errors", ie not user-facing.
If there's a deterministic way for a user to trigger the error, or if
it can reasonably be expected to occur during normal operation, it should
definitely have an ereport (and a non-default errcode).
regards, tom lane