![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
-- Now I add to the "upd_if" rule -- a condition that checks if a similar record already exists CREATE OR REPLACE RULE upd_if AS ON UPDATE TO test.view1 WHERE ((SELECT count(*) AS count1 FROM test.table1 WHERE table1.da= ta1 =3D new.data1)) =3D 0 DO ( UPDATE test.table1 SET data1 =3D new.data1 WHERE table1.id= 1 =3D old.id1; UPDATE test.table1 SET flag1 =3D true WHERE table1.id1 =3D= old.id1; ); =20 -- Start with fresh data DELETE FROM test.table1; INSERT INTO test.table1 (id1, data1) VALUES (1, 'foo'); SELECT * FROM test.view1; -- id1 data1 flag1 -- ---------------------- -- 1 foo FALSE -- =20 UPDATE test.view1 SET data1 =3D 'bar' WHERE view1.id1 =3D 1; SELECT * FROM test.view1; -- id1 data1 flag1 -- ---------------------- -- 1 bar FALSE -- -- Only the first of the 2 commands in the "upd_if" rule was executed! -- The second command is silently ignored. -- /SQL =20 I haven't found anything in the doc or in the list archives explicitly addressing this point. Is this a bug or a feature? =20 |

#3
| |||
| |||
|
|
PostgreSQL version: 8.0.3 OS: Win32 (Win 2003 Server) There is something strange and counterintuitive about the way that multiple-action PostgreSQL rules work. |
![]() |
| Thread Tools | |
| Display Modes | |
| |