I want to discuss about inherits in PostgreSQL.
Everything I write here is my own opinion, but I hope for a good dialog.
I think that inherits is a feature to good to be plain legacy, but it is
unfortunately riddled with some inconsistencies. The inheritance keyword
link tables together in a "is-a" chain, from child up to parent. The
children has the same fields as the parent, plus their own (if they
In one way there is an illusion of object orientation, where the children
share data with the parent (comes from when you select from a parent in the
inheritance and you see the data), but in another way if you use the
condition "only" (in select) or discover that field behavior (primary key,
foreign key, etc) is not inherited, then inheritance is of the behavior of
It's like the implementation sits on the fence, and does not know if
inherits is object oriented, or if it is interface oriented.
This inconsistency makes the feature not as smooth as it could be.
A suggestion would be to walk down the path for the object oriented
approach, meaning that fields shared with the parent, also share behavior
(primary key, foreign key, etc). This suggestion might break compatibility
with some implementations (using inheritance and where coding has been done
to account for the object-interface-oriented approach).
Another suggestion would be to walk down the path for the interface
oriented approach, meaning that nothing is shared between the child and
parent, except for the field name and types. This may also break
The third suggestion would be to let inheritance be as it is, but to
introduce "extends" keyword to make a more clean object-oriented approach
to the "is-a" chain. Then nothing is broken, but it adds complexity to the
I'd be happy to know your reflections about the subject.