'on insert' rules and defaults
От | Mark Hollomon |
---|---|
Тема | 'on insert' rules and defaults |
Дата | |
Msg-id | 38ECE67B.A57977AB@americasm01.nt.com обсуждение исходный текст |
Ответы |
Re: 'on insert' rules and defaults
|
Список | pgsql-hackers |
Playing around with rules and views, I noticed the following: CREATE TABLE t ( i INTEGER,b BOOLEAN DEFAULT false ); CREATE VIEW v ASSELECT * FROM t; CREATE RULE v_insert ASON INSERT TO v DO INSTEADINSERT INTO t values ( NEW.i, NEW.b); mhh=# insert into v values ( 1 ); INSERT 50199 1 mhh=# select * from v;i | b ---+---1 | (1 row) In other words, the default is not honored. Is there a way to write the rule so that default on 'b' is honored? I found the following to work. But the combinatorial explosion for multiple fields is a killer. CREATE RULE v_insert_null ASON INSERT TO v WHERE NEW.b IS NULL DO INSTEADINSERT INTO t values (NEW.i); CREATE RULE v_insert_not_null ASON INSERT TO v WHERE NEW.b IS NOT NULL DO INSTEADINSERT INTO t values (NEW.i, NEW.b); I also thought about COALESCE: CREATE RULE v_insert ASON INSERT TO v DO INSTEADINSERT INTO t values (NEW.i, COALESCE(NEW.b, false)); But then two places have to know about the default value. Any other suggestions? -- Mark Hollomon mhh@nortelnetworks.com ESN 451-9008 (302)454-9008
В списке pgsql-hackers по дате отправления: