Hi, here we go again... As you know there is a problem executing something like:
create table foo ( col1 serial, col2 int ); create view v_foo as select * from foo; create rule ins_rule as on insert to v_foo do instead insert into foo(col1, col2) values (new.col1, new.col2); insert into v_foo(col2) values (1); this give an error like: psql:f:/views.sql:13: ERROR: null value in column "col1" violates not-null constraint ---- There is a workaround about this creating default values to the view. Now, for updateable views we need this happen automatically, attached there is a solution to this. The only problem i have found until now is that update v_foo set col1 = DEFAULT; execute nextval twice per every record. so there will be a gasp between numbers, but AFAIK nextval has no guarantee of returning sequential numbers. Any comments on this? -- regards, Jaime Casanova (DBA: DataBase Aniquilator ;)
*** ../pgsql_head/src/backend/rewrite/rewriteHandler.c 2005-05-27 02:38:08.000000000 -0500 --- src/backend/rewrite/rewriteHandler.c 2005-05-27 14:36:58.000000000 -0500 *************** *** 376,381 **** --- 376,389 ---- new_expr = build_column_default(target_relation, attrno); /* + * I will do this only in case of relkind == RELKIND_VIEW. + * This is the last attempt to get a value for new_expr before we + * consider that new_expr must be NULL. + */ + if (!new_expr && target_relation->rd_rel->relkind == RELKIND_VIEW) + new_expr = (Expr *) makeNode(SetToDefault); + + /* * If there is no default (ie, default is effectively NULL), * we can omit the tlist entry in the INSERT case, since the * planner can insert a NULL for itself, and there's no point
---------------------------(end of broadcast)--------------------------- TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]