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)); 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: create table tfk (c integer unique check(false)); create table t (c integer, foreign key (c) references tfk(c)); Regards, Clodoaldo (1) http://stackoverflow.com/questions/9545783/how-to-prevent-inserts-in-a-table