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
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
さらにもう一つ継承したテーブルを作ってみます。
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
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
両方の子テーブルから取り出すことができます。
もちろん、子テーブルだけを参照することもできます。
select * from t_sales_01; id | name | number
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
こんなこともできるみたいです。
update t_sales set number=4 where id=3; select * from t_sales; id | name | number
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
意外に知られていない機能な気もします。
大きなテーブル扱うときは、便利だな〜
これからはこいつで、実装してみよう。