From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: proposal: condition blocks in psql |
Date: | 2015-06-28 12:50:11 |
Message-ID: | CAFj8pRAqHxBxDZUO82SqtyDy+rVjdP=98-R4UtjjqMueTqRidg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
2015-06-28 14:26 GMT+02:00 Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com>:
> Hi,
>
> On 06/28/2015 08:01 AM, Pavel Stehule wrote:
>
>>
>> you can use PL/pgSQL - but there are some limits
>>
>> * maintenance large plpgsql functions
>>
>> * the plpgsql functions or anonymous functions create a transaction
>> borders - what should not be wanted
>>
>
> But why is that a problem? Generally (sub)transactions are a good thing,
> but if you want, you may create one huge function. If you want to
> modularize this a bit, you may split that into multiple functions, but
> that's an option, not a requirement.
>
>
>> * I cannot to use psql variables simply in plpgsql code (plpgsql has
>> not any macro language) - so some patterns are implemented in plpgsql
>> less readable
>>
>> for example, if you can create a script that create some plpgsql
>> function for specified PostgreSQL version, then using PLpgSQL for this
>> purpose is suboptimal due less readability and maintainability
>>
>
> I don't really see how a block of PL/pgSQL code is less maintainable than
> a similar block of code written in a pseudo-scripting language specific to
> psql. Actually I'd expect exactly the opposite, as PL/pgSQL has neat
> features like exception handling and such, which is completely absent in
> psql, or proper variables, which is somehow mimicked by session variables
> in psql.
>
> If you really need to do the scripting outsite PL/pgSQL, there's plenty of
> suitable tools for that purpose IMHO. Starting with bash, or languages like
> Perl or Python.
>
<b>I don't propose psql scripting.</b>
I propose simple statement for conditional statement execution. The core of
my proposal are commands
\if_ver_gt, \if_ver_lt
Example:
\if_ver_le 8.3.0
CREATE OR REPLACE FUNCTION unnest(anyarray)
RETURNS SETOF anyelement AS $$
BEGIN ... END
$$ LANGUAGE plpgsql;
\endif
instead
DO $xx$
BEGIN
IF version_le(version(), '8.3.0') THEN
CREATE OR REPLACE FUNCTION unnest(anyarray)
RETURNS SETOF anyelement AS $$
BEGIN ... END
$$ LANGUAGE plpgsql;
END IF;
END;
$xx$;
>
> And I think the same about readability ...
>
>
> --
> Tomas Vondra http://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
>
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
>
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2015-06-28 13:11:29 | Re: drop/truncate table sucks for large values of shared buffers |
Previous Message | Tomas Vondra | 2015-06-28 12:44:05 | Re: Refactoring pgbench.c |