[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 メーリングリストの案内