Confusion on Assert() definition

Started by Егор Будюкинabout 1 year ago2 messagesgeneral
Jump to latest
#1Егор Будюкин
zhora.budyukin111@gmail.com

Hi all!

There's something about the definition of Assert() in postgres that I
don't really understand. Refering to src/include/c.h, if
USE_ASSERT_CHECKING is not defined, Assert() is defined to be always
true regardless of FRONTEND? Additionally, I lack understanding of why
Assert() is meant to only be used for debugging when it has a lot of
potential at error intercepting. PipelineDB, for example, has a risk
of few null dereferences because of disabled Assert().

It bugs me that I can't get over something seemingly obvious, so I'd
be very grateful for clarification!

Best regards,
Egor Budyukin,
confused static analysis specialist.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Егор Будюкин (#1)
Re: Confusion on Assert() definition

=?UTF-8?B?0JXQs9C+0YAg0JHRg9C00Y7QutC40L0=?= <zhora.budyukin111@gmail.com> writes:

There's something about the definition of Assert() in postgres that I
don't really understand.

Asserts are meant to be used for "can't happen" cases that would
represent programming bugs. As such, they are made to do something
in debug builds but be no-ops in production builds. If you think
there's actually a realistic chance of the case happening in a
production context, you should use a regular if-test-and-ereport
instead of an Assert.

regards, tom lane