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]