Conditional compilation

Started by Thiemo Kellnerover 2 years ago4 messagesgeneral
Jump to latest
#1Thiemo Kellner
thiemo@gelassene-pferde.biz

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

#2Ron
ronljohnsonjr@gmail.com
In reply to: Thiemo Kellner (#1)
Re: Conditional compilation

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.

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ron (#2)
Re: Conditional compilation

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

#4Thiemo Kellner
thiemo@gelassene-pferde.biz
In reply to: Tom Lane (#3)
Re: Conditional compilation

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:

Show quoted text

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