Dynamic views
Hello friends,
I have a view defined as:-
CREATE VIEW vivek_testview AS SELECT vivek_test.* , users.username AS name from users, vivek_test where vivek_test.username=users.username;
Now, when I add a new column in vivek_test, I cant see the new column in the view. Currently we have to drop the view and recreate it.
Is there a way that i can see the new column without dropping and recreating the view ?
Thanks for reading this. Thanks for your replies in advance.
With warm regards.
Vivek
vivek@staff.ownmail.com
All science is either physics or stamp collecting.
-- Ernest Rutherford
On 11/29/06, vivek@staff.ownmail.com <vivek@staff.ownmail.com> wrote:
Hello friends,
I have a view defined as:-CREATE VIEW vivek_testview AS SELECT vivek_test.* , users.username AS name from users, vivek_test where vivek_test.username=users.username;
Now, when I add a new column in vivek_test, I cant see the new column in the view. Currently we have to drop the view and recreate it.
Is there a way that i can see the new column without dropping and recreating the view ?Thanks for reading this. Thanks for your replies in advance.
no, queries using * are expanded when the plan is created. for views,
the plan is created when you create the view (also the original query
string to create the view is not stored). however, you could however
create a function that returns setof record, because plans for
functions are created when they are first run in a session. this
isn't a perfect solution, but it might work for you.
merlin
On Wed, 29 Nov 2006 18:38:22 +0530, "Merlin Moncure" <mmoncure@gmail.com> wrote:
On 11/29/06, vivek@staff.ownmail.com <vivek@staff.ownmail.com> wrote:
Hello friends,
I have a view defined as:-CREATE VIEW vivek_testview AS SELECT vivek_test.* , users.username AS
name from users, vivek_test where vivek_test.username=users.username;
Now, when I add a new column in vivek_test, I cant see the new column in
the view. Currently we have to drop the view and recreate it.
Is there a way that i can see the new column without dropping and
recreating the view ?
No, not easy. Do you have to change your database schema that often?
Thanks for reading this. Thanks for your replies in advance.
no, queries using * are expanded when the plan is created. for views,
the plan is created when you create the view (also the original query
string to create the view is not stored). however, you could however
create a function that returns setof record, because plans for
functions are created when they are first run in a session. this
isn't a perfect solution, but it might work for you.
But that requires to adjust all SELECTs which uses this table function, since
SETOF RECORD requires you to specify a column list. Maybe you can build
something like that using a table's implicit type.
Thanks,
Bernd
On 11/29/06, Bernd Helmle <mailings@oopsware.de> wrote:
no, queries using * are expanded when the plan is created. for views,
the plan is created when you create the view (also the original query
string to create the view is not stored). however, you could however
create a function that returns setof record, because plans for
functions are created when they are first run in a session. this
isn't a perfect solution, but it might work for you.But that requires to adjust all SELECTs which uses this table function, since
SETOF RECORD requires you to specify a column list. Maybe you can build
something like that using a table's implicit type.
correct:
create table foo (a text, b int, c int);
insert into foo values ('1', 2, 3);
create function f() returns setof foo as $$ select * from foo; $$ language sql;
select f();
f
---------
(1,2,3)
(1 row)
alter table foo add column d int default 4;
select * from f();
a | b | c | d
---+---+---+---
1 | 2 | 3 | 4
merlin