PostgreSQL從繼承到分區html
(pg_partman)sql
PostgreSQL從繼承到分區(一)post
http://my.oschina.net/lianshunke/blog/205296測試
PostgreSQL從繼承到分區(二)spa
http://my.oschina.net/lianshunke/blog/205296.net
PostgreSQL從繼承到分區(三)postgresql
http://my.oschina.net/lianshunke/blog/205316code
http://www.postgresql.org/docs/9.3/static/ddl-inherit.htmlhtm
經過下面的簡單例子說明什麼是表繼承:blog
postgres=# CREATE DATABASE lsk; CREATE DATABASE postgres=# \c lsk You are now connected to database "lsk" as user "postgres". lsk=# CREATE TABLE t1(id int,name varchar(20)); CREATE TABLE lsk=# CREATE TABLE t2(age int) inherits(t1); CREATE TABLE {在子表中新添的字段會匯同父表的全部字段一塊兒做爲子表字段}
lsk=# \d t1 Table "public.t1" Column | Type | Modifiers --------+-----------------------+----------- id | integer | name | character varying(20) | Number of child tables: 1 (Use \d+ to list them.) lsk=# \d t2 Table "public.t2" Column | Type | Modifiers --------+-----------------------+----------- id | integer | name | character varying(20) | age | integer | Inherits: t1
插入數據:
lsk=# INSERT INTO t1 VALUES (1,'lian1'); INSERT 0 1 lsk=# INSERT INTO t1 VALUES (2,'lian2'); INSERT 0 1 lsk=# INSERT INTO t2 VALUES (3,'lian3',11); INSERT 0 1 lsk=# INSERT INTO t2 VALUES (4,'lian4',12); INSERT 0 1
查看錶結果:
lsk=# SELECT * from t1; id | name ----+------- 1 | lian1 2 | lian2 3 | lian3 4 | lian4 (4 rows) {從父表中查詢將顯示父表及子表的全部數據} lsk=# SELECT * from t2; id | name | age ----+-------+----- 3 | lian3 | 11 4 | lian4 | 12 (2 rows) {從子表中查詢只顯示子表中的數據} lsk=# SELECT * from only t1; id | name ----+------- 1 | lian1 2 | lian2 (2 rows) {經過ONLY關鍵字實現只對父表的查詢}
續1.1節內容
建立t3表繼承上節子表t2:
lsk=# CREATE TABLE t3() inherits(t2); CREATE TABLE lsk=# \d t3 Table "public.t3" Column | Type | Modifiers --------+-----------------------+----------- id | integer | name | character varying(20) | age | integer | Inherits: t2
插入測試數據:
lsk=# INSERT INTO t3 VALUES (5,'lian5',13); INSERT 0 1
查看錶結果:
lsk=# SELECT * from t1; id | name ----+------- 1 | lian1 2 | lian2 3 | lian3 4 | lian4 5 | lian5 (5 rows) lsk=# SELECT * from t2; id | name | age ----+-------+----- 3 | lian3 | 11 4 | lian4 | 12 5 | lian5 | 13 (3 rows) lsk=# SELECT * from t3; id | name | age ----+-------+----- 5 | lian5 | 13 (1 row)
建立t4表繼承頂層父表t1:
lsk=# CREATE TABLE t4() inherits(t1); CREATE TABLE lsk=# \d t4 Table "public.t4" Column | Type | Modifiers --------+-----------------------+----------- id | integer | name | character varying(20) | Inherits: t1 lsk=# \d+ t1 Table "public.t1" Column | Type | Modifiers | Storage | Description --------+-----------------------+-----------+----------+------------- id | integer | | plain | name | character varying(20) | | extended | Child tables: t2, t4 Has OIDs: no lsk=# INSERT INTO t4 VALUES (6,'lian6'); INSERT 0 1 lsk=# SELECT * from t1; id | name ----+------- 1 | lian1 2 | lian2 3 | lian3 4 | lian4 6 | lian6 5 | lian5 (6 rows) {能夠看出查詢是按照分層順序查詢,即先並行再級聯}
lsk=# SELECT * from t4; id | name ----+------- 6 | lian6 (1 row)
1.3 查看數據來源
lsk=# SELECT p.relname,c.* FROM t1 c, pg_class p WHERE c.tableoid = p.oid; relname | id | name ---------+----+------- t1 | 1 | lian1 t1 | 2 | lian2 t2 | 3 | lian3 t2 | 4 | lian4 t4 | 6 | lian6 t3 | 5 | lian5 (6 rows)
PostgreSQL從繼承到分區(一)
http://my.oschina.net/lianshunke/blog/205296
PostgreSQL從繼承到分區(二)
http://my.oschina.net/lianshunke/blog/205296
PostgreSQL從繼承到分區(三)