On Fri, Feb 8, 2019 at 7:55 PM Tom Lane <t...@sss.pgh.pa.us> wrote: > > Andres Freund <and...@anarazel.de> writes: > > You misunderstood my point: I'm asking why we shouldn't remove that check > > from views, rather than adding it to create rule. > > +1. This seems pretty obviously to be something we just missed when > we changed things to allow zero-column tables. >
Thanks Andres for bringing up that point and thanks Tom for the confirmation. Attached is the patch that allows us to create view on a table without columns. I've also added some test-cases for it in create_view.sql. Please have a look and let me know your opinion. -- With Regards, Ashutosh Sharma EnterpriseDB:http://www.enterprisedb.com
diff --git a/src/backend/commands/view.c b/src/backend/commands/view.c index 65f4b40..c49ae97 100644 --- a/src/backend/commands/view.c +++ b/src/backend/commands/view.c @@ -111,10 +111,6 @@ DefineVirtualRelation(RangeVar *relation, List *tlist, bool replace, } } - if (attrList == NIL) - ereport(ERROR, - (errcode(ERRCODE_INVALID_TABLE_DEFINITION), - errmsg("view must have at least one column"))); /* * Look up, check permissions on, and lock the creation namespace; also diff --git a/src/test/regress/expected/create_view.out b/src/test/regress/expected/create_view.out index 141fc6d..ee41c40 100644 --- a/src/test/regress/expected/create_view.out +++ b/src/test/regress/expected/create_view.out @@ -1706,9 +1706,16 @@ select pg_get_ruledef(oid, true) from pg_rewrite 43 AS col_b; (1 row) +-- create view on a table without columns +create table t0(); +create view v0 as select * from t0; +select * from v0; +-- +(0 rows) + -- clean up all the random objects we made above \set VERBOSITY terse \\ -- suppress cascade details DROP SCHEMA temp_view_test CASCADE; NOTICE: drop cascades to 27 other objects DROP SCHEMA testviewschm2 CASCADE; -NOTICE: drop cascades to 62 other objects +NOTICE: drop cascades to 64 other objects diff --git a/src/test/regress/sql/create_view.sql b/src/test/regress/sql/create_view.sql index 9480030..e5ca690 100644 --- a/src/test/regress/sql/create_view.sql +++ b/src/test/regress/sql/create_view.sql @@ -580,6 +580,11 @@ select pg_get_viewdef('tt23v', true); select pg_get_ruledef(oid, true) from pg_rewrite where ev_class = 'tt23v'::regclass and ev_type = '1'; +-- create view on a table without columns +create table t0(); +create view v0 as select * from t0; +select * from v0; + -- clean up all the random objects we made above \set VERBOSITY terse \\ -- suppress cascade details DROP SCHEMA temp_view_test CASCADE;