postgresql—-继承表INHERITS PARENT TABLE详解数据库

 

使用INHERITS创建的新表会继承一个或多个父表,子表只会继承父表的表结构和NOT NULL,DEFAULT,CHECK三种约束,主键,外键和唯一键以及索引不会被继承,所以修改父表的结构(增删字段),NOT NULL,DEFAULT和CHECK约束会自动同步子表修改。

示例1.

create table tbl_inherits_parent( 
a int not null, 
b varchar(32) not null default 'Got u', 
c int check (c > 0), 
d date not null 
); 
 
test=# alter table tbl_inherits_parent add constraint pk_tbl_inherits_parent_a primary key(a); 
ALTER TABLE 
 
test=# alter table tbl_inherits_parent add constraint uk_tbl_inherits_parent_b_d unique (b,d); 
ALTER TABLE 
 
test=# create table tbl_inherits_partition() inherits (tbl_inherits_parent); 
CREATE TABLE 
test=# /d tbl_inherits_partition  
                    Table "public.tbl_inherits_partition" 
 Column |         Type          |                  Modifiers                   
--------+-----------------------+--------------------------------------------- 
 a      | integer               | not null 
 b      | character varying(32) | not null default 'Got u'::character varying 
 c      | integer               |  
 d      | date                  | not null 
Check constraints: 
    "tbl_inherits_parent_c_check" CHECK (c > 0) 
Inherits: tbl_inherits_parent

 

示例2.

test=# alter table tbl_inherits_parent add column e int not null default 0; 
ALTER TABLE 
test=# alter table tbl_inherits_parent alter column b set default 'try me'; 
ALTER TABLE 
test=# /d tbl_inherits_partition  
                     Table "public.tbl_inherits_partition" 
 Column |         Type          |                  Modifiers                    
--------+-----------------------+---------------------------------------------- 
 a      | integer               | not null 
 b      | character varying(32) | not null default 'try me'::character varying 
 c      | integer               |  
 d      | date                  | not null 
 e      | integer               | not null default 0 
Check constraints: 
    "tbl_inherits_parent_c_check" CHECK (c > 0) 
Inherits: tbl_inherits_parent

 

示例3.

除继承父表之外,创建子表时可以增加自己的字段

test=# create table tbl_inherits_partition1(f int) inherits (tbl_inherits_parent); 
CREATE TABLE 
test=# /d tbl_inherits_partition1  
                    Table "public.tbl_inherits_partition1" 
 Column |         Type          |                  Modifiers                    
--------+-----------------------+---------------------------------------------- 
 a      | integer               | not null 
 b      | character varying(32) | not null default 'try me'::character varying 
 c      | integer               |  
 d      | date                  | not null 
 e      | integer               | not null default 0 
 f      | integer               |  
Check constraints: 
    "tbl_inherits_parent_c_check" CHECK (c > 0) 
Inherits: tbl_inherits_parent

 

示例4.解除继承

test=# alter table tbl_inherits_partition1 no inherit tbl_inherits_parent; 
ALTER TABLE 
test=# /d tbl_inherits_partition1  
                    Table "public.tbl_inherits_partition1" 
 Column |         Type          |                  Modifiers                    
--------+-----------------------+---------------------------------------------- 
 a      | integer               | not null 
 b      | character varying(32) | not null default 'try me'::character varying 
 c      | integer               |  
 d      | date                  | not null 
 e      | integer               | not null default 0 
 f      | integer               |  
Check constraints: 
    "tbl_inherits_parent_c_check" CHECK (c > 0)

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/4881.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论