システム開発者の実験記 このページをアンテナに追加 RSSフィード

2007-06-26

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

意外に知られていない機能な気もします。

大きなテーブル扱うときは、便利だな〜

これからはこいつで、実装してみよう。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。