From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | "Rob Richardson" <Rob(dot)Richardson(at)rad-con(dot)com> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: SELECT * in a view |
Date: | 2010-04-21 17:59:38 |
Message-ID: | 11025.1271872778@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
"Rob Richardson" <Rob(dot)Richardson(at)rad-con(dot)com> writes:
> The old view and the new view should have the same fields. So, I tried
> something like this:
> CREATE VIEW new_view AS
> SELECT * FROM old_view
> WHERE complete = 1;
> The query was accepted and the new_view was created.
> But when I went back into PGAdmin and looked at the definition of
> new_view, I saw something like this:
> CREATE VIEW new_view AS
> SELECT old_view.field1, old_view.field2, <snip> FROM old_view
> WHERE complete = 1;
> That's not what I want. That means that if old_view changes, new_view
> will not reflect the changes. Is there any way to get new_view to
> automatically include all fields from old_view, no matter how many or
> how few fields there are?
No. This behavior is specifically required by the SQL standard: the
result rowtype of a view is determined when the view is created, and
is not supposed to change when underlying tables have columns added.
That's why we expand * when the view is created.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Merlin Moncure | 2010-04-21 18:04:56 | Re: SELECT * in a view |
Previous Message | Rob Richardson | 2010-04-21 17:55:32 | SELECT * in a view |