修改表的模式以使其从另一个表继承而无需重新创建表或重新插入数据

时间:2017-06-09 14:34:10

标签: sql postgresql ddl

我的PostgreSQL数据库中有几个表有几个常见的列。如果我将这些公共列移动到新表中并使表继承自这个新表,我认为这是一个好主意。例如:

create table foo_bar (
    code varchar(9) primary key,
    name varchar,
    bar integer
);

重构后:

create table foo (
    code varchar(9) primary key,
    name varchar
);

create table foo_bar (
    bar integer
) inherits (foo);

问题是,我在foo_bar中有很多数据,以及很多参考此表的视图。

是否可以更改foo_bar的定义以实现上述更改而不丢弃表中的数据?

2 个答案:

答案 0 :(得分:2)

这可能是也可能不是一个好主意。数据库设计并不完全是面向对象的编程。有一些caveats

  

继承功能的一个严重限制是索引   (包括唯一约束)和外键约束仅适用   单个表,而不是他们的继承子。这是真的   外键约束的引用和引用方。

此链接中描述的问题还有一些您需要注意的问题。

如果您真的想继续这样做,Laurenz Albe的回答中给出了如何更改表格。

答案 1 :(得分:1)

CREATE TABLE foo (
    code varchar(9),
    name varchar
);

ALTER TABLE foo_bar INHERIT foo;