2016-12-28 18:54 GMT+01:00 Jim Nasby <jim.na...@bluetreble.com>:

> On 12/28/16 7:16 AM, Pavel Stehule wrote:
>
>>
>>
>> 2016-12-28 5:09 GMT+01:00 Jim Nasby <jim.na...@bluetreble.com
>> <mailto:jim.na...@bluetreble.com>>:
>>
>>     On 12/27/16 4:56 PM, Merlin Moncure wrote:
>>
>>         On Tue, Dec 27, 2016 at 1:54 AM, Pavel Stehule
>>         <pavel.steh...@gmail.com <mailto:pavel.steh...@gmail.com>> wrote:
>>     Which is why this is an external fork of plpgsql.
>>
>>
>> ok. Just I would not to repeat Perl6 or Python3 story - it is big
>> adventure, but big fail too
>>
>
> Yeah, creating an entirely "new" PL to deal with compatibility doesn't
> seem like a good idea to me.
>
>     ** The real problem is that we have no mechanism for allowing a PL's
>>     language/syntax/API to move forward without massive backwards
>>     compatibility problems. **
>>
>>
>> We have not, but there are few possibilities:
>>
>> 1. enhance #option command
>> 2. we can introduce PRAGMA command
>> https://en.wikipedia.org/wiki/Ada_(programming_language)#Pragmas
>>
>
> See separate reply.
>
> <discussion about "blessed extensions">
>
>     I'm honestly surprised (even shocked) that you've never run into any
>>     of the problems plpgsql2 is trying to solve. I've hit all those
>>     problems except for OUT parameters. I'd say the order they're listed
>>     in actually corresponds to how often I hit the problems.
>>
>>
>> I hit lot of older harder (now solved) issues - now, with more
>> experience I am able to see these issues. And I wrote plpgsql_check,
>> partially for self too. Years ago I prefer safe expressions.
>>
>
> Recognizing a problem ahead of time (or having plpgsql_check do it for
> you) still means you have to find a way to work around it. In some cases
> (ie: STRICT), that workaround can be a serious PITA. Better to just
> eliminate the problem itself.
>
>     I think trying to move the ball forward in a meaningful way without
>>     breaking compatibility is a lost cause. Some of these issues could
>>     be addressed by adding more syntax, but even that has limits (do we
>>     really want another variation of STRICT that allows only 0 or 1
>>     rows?). And there's no way to fix your #1 item below without
>>     breaking compatibility.
>>
>>
>> I think so there is way with extra check, or with persistent plpgsql
>> options - just use it, please. Some checks are clear, some other not.
>>
>
> I will assert that there will ALWAYS be problems that you can't plaster
> over with some kind of extra checking (like plpgsql_check). At some point,
> in order to fix those, you have to somehow break compatibility.


> Look at libpq as an example. There's a reason we're on protocol V3.
>
> If you know ALGOL family languages, then it is not problem. What is a
>>
>
> Lets be realistic... what % of our users have even heard of ALGOL, let
> alone used it? :)


 not too much - but the problem is not in BEGIN, END. I wrote PL/PSM where
BEGIN END doesn't exists. The functionality was same as PLpgSQL - and there
was not anybody who use it.


>
> harder problem for people is different implementation of mix SQL and PL
>> - different than Oracle, or MSSQL. Our model is better, simpler but
>> different. It is difficult for people without knowleadge of differences
>> between functions and procedures. Partially we badly speaking so our
>> void functions are procedures.
>>
>
> I suspect that's only confusing for people coming from Oracle (which of
> course is a non-trivial number of people).
>
>     #6: The variations of syntax between the FOR variants is annoying
>>     (specifically, FOREACH necessitating the ARRAY keyword).
>>
>>
>> this is design - FOR is old PL/SQL syntax. FOREACH is prepared for
>> extending
>>
>
> Understood. It still sucks though. :)
>
>     #8: EVERYTHING command option should accept a variable. In
>>     particular, RAISE should accept a variable for level, but there's
>>     other cases of this I've run into. I'd also be nice if you could
>>     plop variables into SQL commands where you'd have an identifier,
>>     though presumably that would require some kind of explicit variable
>>     identifier.
>>
>>
>> It is hiding dynamic SQL - I am strongly against it - minimally due
>> performance issues. Important functionality should not be hidden.
>>
>
> There's definitely ways around the performance issue. I do agree that it
> needs to be clear when you're doing something dynamic so it's not
> accidental. One way to do that would be to add support for variable
> decorators and mandate the use of decorators when using a variable for an
> identifier.
>
> That said, *every* option to RAISE can be a variable except the level.
> That's just plain silly and should be fixed.


I am sorry - I read it wrong - If there is not a parser issue, then it can
be fixed simply.


>
>
>     #13: cstring support would allow a lot more people to experiment
>>     with things like custom types. Yes, plpgsql might be slow as hell
>>     for this, but sometimes that doesn't matter. Even if it does, it can
>>     be a lot easier to prototype in something other than C. (Granted, I
>>     think there's some non-plpgsql stuff that would need to happen to
>>     allow this.)
>>
>>
>> Not sure about it (I have really realy wrong experience with some
>> developers about performance) - but PLPython, PLPerl can do it well, and
>> I miss some possibility - We can use transformations more time - SQL/MM
>> is based on new datatypes and transformations.
>>
>
> Well, there's probably some other things that could be done to make
> plpgsql perform better in this regard. One thing I've wondered about is
> allowing array-like access to a plain string (or in this case, cstring).
> That would allow you to write code that would translate much better into
> fast C code. IE: if you needed to scan through an entire string you could
> do something like for (i=0; i<strlen(); i++).


It is fixable - and faster string operations can be nice feature - Just I
am not volunteer for this task :)


>
>
> yes. The design of transaction controlling inside stored procedures is
>> hard work not related to any PL. Some can be partially solved by
>> functions executed in autonomous transactions. With background workers
>> we can implement asynchronous autonomous transactions - what can
>> coverage lot of use cases where transaction controlling should be used
>> in other databases.
>>
>
> Well, those are all really hacks around a fundamental problem of allowing
> user-defined, pre-stored code to execute outside of a transaction. I don't
> think solving that is necessarily *that* hard (though certainly
> non-trivial), but the fmgr interface is certainly NOT the right way to go
> about that. In any case, that's a completely different discussion.


This points needs real use cases. Our current design is limited, but it
isn't bad - It is much better than Oracle or MSSQL design - we can talk
what use cases we can solve. I am sure, so we can find good mapping for
PLpgSQL for any design.

Regards

Pavel


>
> --
> Jim Nasby, Data Architect, Blue Treble Consulting, Austin TX
> Experts in Analytics, Data Architecture and PostgreSQL
> Data in Trouble? Get it in Treble! http://BlueTreble.com
> 855-TREBLE2 (855-873-2532)
>

Reply via email to