2011-02-03 3 views
3

Предположим, у меня есть xmldoc отношение, которое выглядит следующим образом:PostgreSQL переопределяют наследуемые столбцы

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" 

Итак, как переопределение в БД наследования работы? [В частности, я использую PostgreSQL 8.3]

ответ

4

От fine manual:

Если список имен столбцов новой таблицы содержит имя столбца, который также унаследовал, тип данных должен также соответствовать унаследованному столбец (столбцы), а определения столбцов объединяются в один.

Таким образом, вы не можете переопределить xml, чтобы быть типа text. И насколько «как переопределение в наследовании БД работает?» идет, это не так, вы не можете изменить интерфейс (то есть столбцы) через наследование, как это, вы можете добавлять только новые вещи или ужесточать ограничения.

Вы знакомы с Liskov substitution principle? Изменение типа столбца приведет к несовместимости общих свойств таблиц (интерфейсов AKA).

+0

Yup, имеет смысл. Предположим, нужно будет создать еще один родительский db и изменить дерево наследования. Благодаря! –

Смежные вопросы