假设我有一个xmldoc关系,如下所示:
Column | Type | Modifiers
--------------+-----------------------------+-----------------
docid | integer | not null
create_date | timestamp without time zone | not null
type | text | not null
xml | xml |
现在,假设我创建了另一个表,它只从该表继承而没有任何其他列。我怎么能把'xml'覆盖为'text'类型?
目前,我收到了:
ERROR: cannot alter inherited column "xml"
那么,DB继承的覆盖如何工作? [具体来说,我正在使用PostgreSQL 8.3]
答案 0 :(得分:4)
来自fine manual:
如果新表的列名列表包含也是继承的列名,则数据类型必须与继承的列匹配,并且列定义合并为一个。
因此,您无法将xml
覆盖为text
类型。至于“如何覆盖数据库继承的工作?”去,它没有,你不能通过继承改变接口(即列),你只能添加新的东西或收紧约束。
您熟悉Liskov substitution principle吗?更改列类型会使表的公共属性(AKA接口)不兼容。