Thread: Conditional compilation
Hi Does PostgreSQL have something like Oracle's conditional compilation? This is sort of an if then statement that gets evaluated on compilation/installation time of PL/SQL code. If the condition is met, the code until the $END gets compiled. It is even possible to switch on/off parts of single statements. I suppose it is sort of a preprocessor that removes the code part from $IF until $END if the condition is not met. Kind regards Thiemo
On 11/12/23 09:32, Thiemo Kellner wrote: > Hi > > Does PostgreSQL have something like Oracle's conditional compilation? This > is sort of an if then statement that gets evaluated on > compilation/installation time of PL/SQL code. If the condition is met, the > code until the $END gets compiled. It is even possible to switch on/off > parts of single statements. I suppose it is sort of a preprocessor that > removes the code part from $IF until $END if the condition is not met. Pl/PgSQL is an interpreted language; there is no compilation. At creation/installation, it just (I think) does syntax checks; it definitely doesn't care if a table exists or not. -- Born in Arizona, moved to Babylonia.
Ron <ronljohnsonjr@gmail.com> writes: > On 11/12/23 09:32, Thiemo Kellner wrote: >> Does PostgreSQL have something like Oracle's conditional compilation? This >> is sort of an if then statement that gets evaluated on >> compilation/installation time of PL/SQL code. If the condition is met, the >> code until the $END gets compiled. It is even possible to switch on/off >> parts of single statements. I suppose it is sort of a preprocessor that >> removes the code part from $IF until $END if the condition is not met. > Pl/PgSQL is an interpreted language; there is no compilation. At > creation/installation, it just (I think) does syntax checks; it definitely > doesn't care if a table exists or not. Yeah. You can get at least some of the effect of this by just writing if-statements. The non-executed chunks of code still have to be grammatically valid SQL, but they don't ever reach parse analysis so nothing happens beyond minimal syntax checking. If that's not enough, what you'll want to look at is using EXECUTE to execute dynamically-constructed SQL. regards, tom lane
Thanks for pointing out. The only use case of conditional compilation, I can think of, is, that one can have arbitrary logging code in some environments without performance penalty in others, e.g. log as hell in dev, no logging at all in prod without the "function" having to execute checks for every and each logging statement put (as the check has been done on installation already). begin do_something; $if check_if_env_is_dev $then do_some_logging; $end do_more_stuff; end; Am 12.11.2023 um 16:58 schrieb Tom Lane: > Ron <ronljohnsonjr@gmail.com> writes: >> On 11/12/23 09:32, Thiemo Kellner wrote: >>> Does PostgreSQL have something like Oracle's conditional compilation? This >>> is sort of an if then statement that gets evaluated on >>> compilation/installation time of PL/SQL code. If the condition is met, the >>> code until the $END gets compiled. It is even possible to switch on/off >>> parts of single statements. I suppose it is sort of a preprocessor that >>> removes the code part from $IF until $END if the condition is not met. >> Pl/PgSQL is an interpreted language; there is no compilation. At >> creation/installation, it just (I think) does syntax checks; it definitely >> doesn't care if a table exists or not. > Yeah. You can get at least some of the effect of this by just writing > if-statements. The non-executed chunks of code still have to be > grammatically valid SQL, but they don't ever reach parse analysis > so nothing happens beyond minimal syntax checking. > > If that's not enough, what you'll want to look at is using EXECUTE > to execute dynamically-constructed SQL. > > regards, tom lane