PostgreSQL継承機能

PostgreSQLを長く使っておりますが、こんな機能があるとは知りませんでした。
たまにパーティショニングしたいな〜と思っていたのですが、まだ8.1系には手を出せないので、
これをうまく使えば、楽しくなりそうです。


下記のメインのテーブルを作ります。

 create table t_sales (id serial primary key not null, name varchar(500), number int);

次に、t_sales を継承したテーブルを作成します。

 create table t_sales_01 () INHERITS (t_sales);

実際のデータに関しては、継承したテーブルにいれます。

 insert into t_sales_01 (name, number) values ('test', 1);
 insert into t_sales_01 (name, number) values ('test', 2);

データを参照する場合は、親のテーブルに対しておこなうことで取り出すことができます。

 select * from t_sales;

 id | name | number 
                                      • -
1 | test | 1 2 | test | 2

さらにもう一つ継承したテーブルを作ってみます。

 create table t_sales_02 () INHERITS (t_sales);

こっちにもデータを入れてみます。

 insert into t_sales_01 (name, number) values ('test', 3);

親のテーブルで参照します。

 select * from t_sales;

 id | name | number 
                                      • -
1 | test | 1 2 | test | 2 3 | test | 3

両方の子テーブルから取り出すことができます。


もちろん、子テーブルだけを参照することもできます。

 select * from t_sales_01;

 id | name | number 
                                      • -
1 | test | 1 2 | test | 2

こんなこともできるみたいです。

 update t_sales set number=4 where id=3;

 select * from t_sales;

 id | name | number 
                                      • -
1 | test | 1 2 | test | 2 3 | test | 4

意外に知られていない機能な気もします。
大きなテーブル扱うときは、便利だな〜
これからはこいつで、実装してみよう。