From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>, Marko Tiikkaja <pgmail(at)joh(dot)to>, Josh Berkus <josh(at)agliodbs(dot)com>, Peter Eisentraut <peter_e(at)gmx(dot)net> |
Subject: | Re: proposal: extensible plpgsql executor - related to assertions |
Date: | 2014-01-04 18:44:08 |
Message-ID: | CAFj8pRB01ODawnHKyXjHpP=oiG39q2RfdmojH_EZKq_SBwPVKA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
2014/1/4 Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
> Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> writes:
> > I propose a enhance the PLpgSQL_plugin struct by a new hook
> > void (*pragma)(PLpgSQL_execstate *estate, PLpgSQL_pragma
> > *pragma_stmt)
>
> I repeat what I said a couple of days ago: it's a very bad idea to be
> enabling more plpgsql plugins as long as the infrastructure can only
> support one. We need to fix that *first* before we go merrily designing
> more.
>
It means a some additional mechanism to find_rendezvous_variable.
What about two new rendezvous variables? One for publishing a PLpgSQL
internal API, and second a list of plpgsql_plugin structures? It would be
very nice, if we can better access to other plpgsql public functions. A
implementation in plpgsql_lint and plpgsql_check is working, but I agree so
it is ugly designed (with some disadvantages) - and any change can be
better. I minimize these bad references to plpgsq - but plpgsql requires
"plpgsql_compile" and "plpgsql_parser_setup" still.
Other possibility is new V1 function for plugin registration.
>
> I don't like the notion of a pragma statement in this form anyway,
> because you've essentially made it an executable statement; usually
> pragmas are compile-time things. It appears to me that you've basically
> commandeered the word "pragma" for "SET affecting a plugin's variable".
>
It should not be named pragma - I have not better name now. It should not
be used as plugin's variable primary.
It should to invoke a external routine - with or without additional
parameters. When I would to support tracking, then user should to
explicitly set point, where tracking is defined - same is with assertions.
> If we're inventing new callbacks for plugins, why not one that will extend
> an existing statement having the right kind of semantics?
yes, it is possible - I can to image some like PERFORM assert(exprlist)
and inside callback, we can check a expression and when we find a expected
pattern, we can change a semantic. I plan to use this workaround for first
plpgsql dumper and tracking extension. But it can have some performance
(probably minimal) impact - and it is difficult to implement a mode when
this functionality is disabled without any performance impact. So special
statement can simplify life to plugin' developers.
> Or actually,
> why would it not be better for the plugin to be using a custom GUC for
> its variable? There's a large amount of infrastructure that custom GUCs
> can take advantage of, which you'd otherwise have to reinvent piece
> by piece.
>
GUC doesn't help me with marking some position in source code important
for plugin.
Regards
Pavel
>
> regards, tom lane
>
From | Date | Subject | |
---|---|---|---|
Next Message | Andres Freund | 2014-01-04 18:47:29 | Re: [PATCH] Store Extension Options |
Previous Message | Tom Lane | 2014-01-04 18:42:07 | Re: comment typo in postgres_fdw/postgres_fdw.c |