查看表相关信息:
music=> \d
关联列表
架构模式 | 名称 | 型别 | 拥有者
----------+---------+--------+----------
public | classic | 资料表 | eric
public | jazz | 资料表 | eric
public | music | 资料表 | eric
public | pop | 资料表 | eric
public | rock | 资料表 | eric
public | test | 资料表 | postgres
(6 行记录)
可以看到music有4个子表,分别为classic,jazz,pop和rock:
music=> \dS+ music
资料表 "public.music"
栏位 | 型别 | 修饰词 | 存储 | 统计目标 | 描述
-------+---------+--------+----------+----------+------
id | integer | | plain | |
name | text | | extended | |
style | text | | extended | |
子表: classic,
jazz,
pop,
rock
可以看到pop表的父表为music:
music=> \dS+ pop
资料表 "public.pop"
栏位 | 型别 | 修饰词 | 存储 | 统计目标 | 描述
-------+---------+--------+----------+----------+------
id | integer | | plain | |
name | text | | extended | |
style | text | | extended | |
检查约束限制
"pop_style_check" CHECK (style = 'pop'::text)
继承: music
为子表创建索引:
music=> create index music_pop_id on pop (id);
CREATE INDEX
music=> create index music_rock_id on rock (id);
CREATE INDEX
music=> create index music_jazz_id on jazz (id);
CREATE INDEX
music=> create index music_classic_id on classic (id);
CREATE INDEX
创建function:
music=> CREATE OR REPLACE FUNCTION music_insert_trigger()
music-> RETURNS TRIGGER AS
music-> $$
music$> BEGIN
music$> IF (NEW.style = 'rock') THEN
music$> INSERT INTO rock VALUES (NEW.*);
music$> ELSEIF (NEW.style = 'pop') THEN
music$> INSERT INTO pop VALUES (NEW.*);
music$> ELSEIF (NEW.style = 'pop') THEN
music$> INSERT INTO pop VALUES (NEW.*);
music$> ELSEIF (NEW.style = 'jazz') THEN
music$> INSERT INTO jazz VALUES (NEW.*);
music$> ELSEIF (NEW.style = 'classic') THEN
music$> INSERT INTO classic VALUES (NEW.*);
music$> END IF;
music$> RETURN NULL;
music$> END;
music$> $$
music-> LANGUAGE plpgsql ;
CREATE FUNCTION
创建触发器:
music=> CREATE TRIGGER insert_music_trigger
music-> BEFORE INSERT ON music
music-> FOR EACH row EXECUTE PROCEDURE music_insert_trigger() ;
CREATE TRIGGER
插入数据:
music=> insert into music values(2,'Have a Nice Day','pop')
;
INSERT 0 0
music=> insert into music values(1,'21 Gun','rock')
;
INSERT 0 0
验证数据插入效果:
查询父表:
music=> select * from music;
id | name | style
----+-----------------+-------
1 | 21 Gun | rock
2 | Have a Nice Day | pop
(2 行记录)
查询子表:
music=> select * from pop ;
id | name | style
----+-----------------+-------
2 | Have a Nice Day | pop
(1 行记录)
music=> select * from rock;
id | name | style
----+--------+-------
1 | 21 Gun | rock
(1 行记录)