[pgsql-jp: 28608] Re: INHERITS による継承について

Sugimura Masayuki sugimura @ ksp.nis.nec.co.jp
2003年 1月 9日 (木) 11:50:12 JST


杉村です。

From: Seiji Uramoto <uramoto @ katch.ne.jp>
Subject: [pgsql-jp: 28578] Re: INHERITS による継承について
Date: Wed, 08 Jan 2003 00:49:24 +0900

> ぱっと考えられるのは…
> 従業員テーブルから派生して、技能職テーブルや総合職テーブル、
> 事務職テーブルを作成して、従業員データをそれぞれに格納する
> 場合ですかね。
> 
> 総合職や事務職は、管理するデータ項目が異なってて、
> 総合職は転勤情報があり、事務職は資格情報がある、とか。
> 
> それに対して、従業員の平均年齢を求めるという SQL を書く
> 時は、まさに「継承元のテーブルを参照する」ことになるかと
> 思います。

最近、これと似たようなことをしようと考えていましたが、
以下の問題がありました。

テーブル t1 と t1 と継承した t2 を作成

test01=# create table t1 (c1 text primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index 't1_pkey' for tab
le 't1'
CREATE TABLE
test01=# create table t2 (c2 text) inherits (t1);
CREATE TABLE
test01=# 

t2 に対して 同じデータを登録してみると、、

test01=# insert into t2 (c1, c2) values ('foo','bar');
INSERT 4778765 1
test01=# insert into t2 (c1, c2) values ('foo','bar');
INSERT 4778766 1
test01=# select * from t1;
 c1  
-----
 foo
 foo
(2 rows)

test01=# 

c1 には PRIMARY KEY を設定しているのに登録できてしまいます。

ソースの doc/TODO.detail/inheritance を見てみると、
1999年(!)にすでに同様の例が報告されていました。
英語ダメなのでその後のやりとりがちゃんと読めてませんが、
3年以上たっても修正されていないのは技術的に困難なのか、単に優先度低いのか、、
いつごろ修正されるのでしょうね。

あと psql で \d+ t2 を実行したときに、 t1.c1 カラムに設定した
コメントを参照できないのもちょっと不便です。
# なお \d+ コマンドでテーブル名のコンプリーション機能が働いてくれません。

# Solaris 8 + PostgreSQL 7.3.1 (+ readline 4.2a)
--
Sugimura Masayuki	sugimura @ ksp.nis.nec.co.jp





pgsql-jp メーリングリストの案内