Thread: View definition formatting

View definition formatting

From
"Dave Page"
Date:
Hi all,

When using pg_get_viewdef(oid), the view definition is returned in a
reconstructed form (I assume) with all formatting removed. This is a
pain for apps like pgAdmin, that allow the user to edit their views,
particularly with very large ones.

Would it be possible and sensible to store the original view definition
for future use, such as we do for functions? Perhaps a new catalog
(pg_source?) could store these and other definitions such as rules for
use?

Regards, Dave.



Re: View definition formatting

From
Jan Wieck
Date:
Dave Page wrote:
> 
> Hi all,
> 
> When using pg_get_viewdef(oid), the view definition is returned in a
> reconstructed form (I assume) with all formatting removed. This is a
> pain for apps like pgAdmin, that allow the user to edit their views,
> particularly with very large ones.
> 
> Would it be possible and sensible to store the original view definition
> for future use, such as we do for functions? Perhaps a new catalog
> (pg_source?) could store these and other definitions such as rules for
> use?

Not too obvious, but this should be covered in the TODO item "Allow RULE
recompilation". That is because if the rule/view is broken due to other
schema changes, the reconstruction might fail. Thus we need to save a
textual form and the original CREATE statement from the user seems
logical.


Jan

-- 
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== JanWieck@Yahoo.com #



Re: View definition formatting

From
Tom Lane
Date:
Jan Wieck <JanWieck@Yahoo.com> writes:
> Dave Page wrote:
>> Would it be possible and sensible to store the original view definition
>> for future use, such as we do for functions? Perhaps a new catalog
>> (pg_source?) could store these and other definitions such as rules for
>> use?

> Not too obvious, but this should be covered in the TODO item "Allow RULE
> recompilation". That is because if the rule/view is broken due to other
> schema changes, the reconstruction might fail.

Given the dependency mechanism in 7.3, it should no longer be possible
to break a rule that way.  Of course, there are cases where you'd wish
the rule to *change* not just reject the update.

The major problem with any such proposal is that source-form storage has
its own set of inflexibilities.  For example, we can currently allow
renaming of tables and columns that underlie a view, because the stored
form of the view doesn't contain those names and so it doesn't need to
change.  If we store source text then we'd have to forbid such renaming
--- or else update the source text, which seems to require parsing,
adjustment of parsed tree, deparsing; which rather defeats the purpose
of Dave's request.

There are even more subtle problems: the source text may be ambiguous
in some way, so that reparsing it today might not generate the identical
intepretation to what you had before.  Even "a+b" is ambiguous given
the possibility that user-defined operators could be added, or the
search path changed.  Deparsing compensates for this by producing (or
at least trying to produce) a representation that is correct and
unambiguous in the current context.

One reason I'm disillusioned with this idea is that we do take the
trouble to store both source and internal form of column default
expressions, but in practice pg_attrdef.adsrc has fallen into disuse.
That track record doesn't bode well for adding source-form storage of
other things.
        regards, tom lane



Re: View definition formatting

From
"Dave Page"
Date:
Thanks for the responses. I guess I'm going to have to write some view
formatting code... :-(
Oh well, at least it's for a good reason!!

Regards, Dave

It's rumoured that Tom Lane once said:
> Jan Wieck <JanWieck@Yahoo.com> writes:
>> Dave Page wrote:
>>> Would it be possible and sensible to store the original view
>>> definition for future use, such as we do for functions? Perhaps a new
>>> catalog (pg_source?) could store these and other definitions such as
>>> rules for use?
>
>> Not too obvious, but this should be covered in the TODO item "Allow
>> RULE recompilation". That is because if the rule/view is broken due to
>> other schema changes, the reconstruction might fail.
>
> Given the dependency mechanism in 7.3, it should no longer be possible
> to break a rule that way.  Of course, there are cases where you'd wish
> the rule to *change* not just reject the update.
>
> The major problem with any such proposal is that source-form storage
> has its own set of inflexibilities.  For example, we can currently
> allow renaming of tables and columns that underlie a view, because the
> stored form of the view doesn't contain those names and so it doesn't
> need to change.  If we store source text then we'd have to forbid such
> renaming --- or else update the source text, which seems to require
> parsing, adjustment of parsed tree, deparsing; which rather defeats the
> purpose of Dave's request.
>
> There are even more subtle problems: the source text may be ambiguous
> in some way, so that reparsing it today might not generate the
> identical intepretation to what you had before.  Even "a+b" is
> ambiguous given the possibility that user-defined operators could be
> added, or the search path changed.  Deparsing compensates for this by
> producing (or at least trying to produce) a representation that is
> correct and
> unambiguous in the current context.
>
> One reason I'm disillusioned with this idea is that we do take the
> trouble to store both source and internal form of column default
> expressions, but in practice pg_attrdef.adsrc has fallen into disuse.
> That track record doesn't bode well for adding source-form storage of
> other things.
>
>             regards, tom lane


Re: View definition formatting

From
Peter Eisentraut
Date:
Dave Page writes:

> When using pg_get_viewdef(oid), the view definition is returned in a
> reconstructed form (I assume) with all formatting removed. This is a
> pain for apps like pgAdmin, that allow the user to edit their views,
> particularly with very large ones.

Perhaps as a workaround you could invent a standard indentation format and
format the rules automatically that way, so that users will be able to
find everything in the same place automatically after the second edit
cycle.

-- 
Peter Eisentraut   peter_e@gmx.net



Re: View definition formatting

From
Tom Lane
Date:
Peter Eisentraut <peter_e@gmx.net> writes:
> Perhaps as a workaround you could invent a standard indentation format and
> format the rules automatically that way, so that users will be able to
> find everything in the same place automatically after the second edit
> cycle.

Perhaps we could make pg_get_ruledef and friends try to prettyprint
their output a little better, instead of duplicating such logic in
various clients (which couldn't do nearly as well at it anyway without
re-parsing the string :-().

Does anyone have code that depends on these functions returning
single-line output?  (I suppose the pg_rules and pg_views views might
get a bit ugly, but perhaps psql could be taught to format data with
embedded newlines better than it does now...)
        regards, tom lane



Re: View definition formatting

From
Robert Treat
Date:
On Tue, 2003-04-01 at 14:18, Tom Lane wrote:
> Peter Eisentraut <peter_e@gmx.net> writes:
> > Perhaps as a workaround you could invent a standard indentation format and
> > format the rules automatically that way, so that users will be able to
> > find everything in the same place automatically after the second edit
> > cycle.
> 
> Perhaps we could make pg_get_ruledef and friends try to prettyprint
> their output a little better, instead of duplicating such logic in
> various clients (which couldn't do nearly as well at it anyway without
> re-parsing the string :-().
> 
> Does anyone have code that depends on these functions returning
> single-line output?  (I suppose the pg_rules and pg_views views might
> get a bit ugly, but perhaps psql could be taught to format data with
> embedded newlines better than it does now...)
> 

Could we turn the prettyprint incantation into a user callable function?
We could easily add that to the phpPgAdmin code to call that function
when pulling information from pg_views.definition and it's ilk, this
giving a nicely formatted output without having to modify the way it is
currently stored.

Robert Treat



Re: View definition formatting

From
Tom Lane
Date:
Robert Treat <xzilla@users.sourceforge.net> writes:
> On Tue, 2003-04-01 at 14:18, Tom Lane wrote:
>> Perhaps we could make pg_get_ruledef and friends try to prettyprint
>> their output a little better, instead of duplicating such logic in
>> various clients (which couldn't do nearly as well at it anyway without
>> re-parsing the string :-().

> Could we turn the prettyprint incantation into a user callable function?

I don't think it's reasonable to implement the prettyprint as a separate
function, if that's what you mean.  It would have to re-parse the string
which is exactly what I wanted to avoid.  pg_get_ruledef itself already
knows what the statement structure is, and would need very little more
logic to do fairly reasonable pretty-printing.

We could make variants of pg_get_ruledef etc. that pretty-print,
while leaving the existing behavior alone, I suppose.
        regards, tom lane



Re: View definition formatting

From
Rod Taylor
Date:
On Tue, 2003-04-01 at 14:18, Tom Lane wrote:
> Peter Eisentraut <peter_e@gmx.net> writes:
> > Perhaps as a workaround you could invent a standard indentation format and
> > format the rules automatically that way, so that users will be able to
> > find everything in the same place automatically after the second edit
> > cycle.
>
> Perhaps we could make pg_get_ruledef and friends try to prettyprint
> their output a little better, instead of duplicating such logic in
> various clients (which couldn't do nearly as well at it anyway without
> re-parsing the string :-().
>
> Does anyone have code that depends on these functions returning
> single-line output?  (I suppose the pg_rules and pg_views views might
> get a bit ugly, but perhaps psql could be taught to format data with
> embedded newlines better than it does now...)

I do -- but the only thing it does is format the output to look better.

--
Rod Taylor <rbt@rbt.ca>

PGP Key: http://www.rbt.ca/rbtpub.asc

Re: View definition formatting

From
"Christopher Kings-Lynne"
Date:
> Perhaps we could make pg_get_ruledef and friends try to prettyprint
> their output a little better, instead of duplicating such logic in
> various clients (which couldn't do nearly as well at it anyway without
> re-parsing the string :-().
> 
> Does anyone have code that depends on these functions returning
> single-line output?  (I suppose the pg_rules and pg_views views might
> get a bit ugly, but perhaps psql could be taught to format data with
> embedded newlines better than it does now...)

Well, phpPgAdmin kind of assumes that it does, however since it's written to a webpage, it will appear as one line
anyway. I would need to just convert newlines to <br>s that's all.
 

The other dependency would be the new rule and trigger defs in that patch I sent in for psql recently.  (And was
committed).

Chris

Re: View definition formatting

From
"Dave Page"
Date:

> -----Original Message-----
> From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
> Sent: 01 April 2003 20:59
> To: Robert Treat
> Cc: Peter Eisentraut; Dave Page; pgsql-hackers@postgresql.org
> Subject: Re: [HACKERS] View definition formatting
>
>
> We could make variants of pg_get_ruledef etc. that
> pretty-print, while leaving the existing behavior alone, I suppose.
>

Hacking those functions never crossed my mind, but it would certainly do
what I require, and is probably more within the scope of things I could
do myself. *If* I get time and can figure it out, how would people feel
about pg_get_pp_viewdef(oid) etc?

Regards, Dave.