It seems rules don't work as expected.
I could be wrong,... In which case, what am I doing wrong?
Clearly, the first insert below should not update the table as well.
... John
CREATE TABLE test (a text, b int4[]);
CREATE RULE test_rule AS
ON INSERT TO test
WHERE exists(SELECT 1 FROM test WHERE a = NEW.a)
DO INSTEAD
UPDATE test SET b = b + NEW.b WHERE a = NEW.a;
db1=# INSERT INTO test (a,b) VALUES (1,'{1}'::int4[]);
INSERT 0 1
db1=# SELECT * FROM test;
a | b
---+-------
1 | {1,1}
(1 row)
db1=# INSERT INTO test (a,b) VALUES (1,'{1}'::int4[]);
INSERT 0 0
db1=# SELECT * FROM test;
a | b
---+---------
1 | {1,1,1}
(1 row)