Subject: Confusion on Assert() definition

From: Егор Будюкин <[email-masked]>
Date: Wed, 26 Mar 2025 14:33:56 +0300

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.

---

From: Tom Lane <[email-masked]>
Date: Wed, 26 Mar 2025 10:39:56 -0400

=?UTF-8?B?0JXQs9C+0YAg0JHRg9C00Y7QutC40L0=?= <[email-masked]> writes:
> 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