PostgreSQL覆盖继承的列

时间:2011-02-03 02:13:10

标签: database postgresql

假设我有一个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]

1 个答案:

答案 0 :(得分:4)

来自fine manual

  

如果新表的列名列表包含也是继承的列名,则数据类型必须与继承的列匹配,并且列定义合并为一个。

因此,您无法将xml覆盖为text类型。至于“如何覆盖数据库继承的工作?”去,它没有,你不能通过继承改变接口(即列),你只能添加新的东西或收紧约束。

您熟悉Liskov substitution principle吗?更改列类型会使表的公共属性(AKA接口)不兼容。