I have gone through the issue of making a parent table not writable. After discussing it (1) I adopted the trigger solution. But I think that a trigger is just an invisible layer over the database model and so I'm naively proposing a new syntax to postgresql. It would inform that the check constraint is not inheritable:
create table t (c integer check NOT INHERITABLE (false));
It will be in 9.2:
Allow CHECK constraints to be declared NO INHERIT (Nikhil Sontakke, Alex Hunsaker)
This makes them enforceable only on the parent table, not on child tables.
I don't know if it was already there when I asked but ! Thank You !
Clodoaldo
I found a model visible solution but it only prevents non null values from being inserted. Or only prevents all inserts if that column is not null: