test=# create table foo (id serial primary key, data text, do_not_delete bool default false);
CREATE TABLE
test=*# insert into foo values (1, 'data 1', false);
INSERT 0 1
test=*# insert into foo values (2, 'data 2', true);
INSERT 0 1
test=*# insert into foo values (3, 'data 3', true);
INSERT 0 1
test=*# insert into foo values (4, 'data 4', false);
INSERT 0 1
test=*# create rule do_not_delete as on delete to foo where do_not_delete do instead nothing;
CREATE RULE
test=*# select * from foo;
id | data | do_not_delete
----+--------+---------------
1 | data 1 | f
2 | data 2 | t
3 | data 3 | t
4 | data 4 | f
(4 rows)
test=*# delete from foo where id = 1;
DELETE 1
test=*# select * from foo;
id | data | do_not_delete
----+--------+---------------
2 | data 2 | t
3 | data 3 | t
4 | data 4 | f
(3 rows)
test=*# delete from foo where id = 2;
DELETE 0
test=*# select * from foo;
id | data | do_not_delete
----+--------+---------------
2 | data 2 | t
3 | data 3 | t
4 | data 4 | f
(3 rows)
test=*#