CREATE TABLE INHERITS
テーブル定義を複製するだけには適していません。テーブルの実際のデータはリンクされているため、それが望ましくない場合は、テーブルの継承を使用せず、CREATE TABLE ... LIKE
またはCREATE TABLE ... OF TYPE
を使用してから、コマンドでフィールドを追加しALTER TABLE
ます。それが面倒すぎる場合は、新しいテーブルを定義するか、複合型またはドメインを使用する必要があるというサインかもしれません。
OOP ポリモーフィック継承を SQL に適用しようとしているようです。素晴らしいアイデアではありません。この場合、最善の策はほぼ間違いなく、共通フィールドの繰り返しに耐えることです。より複雑なケースでは、 を作成するDOMAIN
か、 を使用して複合型を作成できますCREATE TYPE
が、この場合は不要です。各テーブルのフィールドを繰り返すだけです。
を使用INHERITS
してベース テーブルに行を挿入すると、次のようになります。
regress=> CREATE TABLE basetemplate (
time_of_creation timestamp with time zone
);
CREATE TABLE
regress=> CREATE TABLE table1 (col1 text) INHERITS (basetemplate);
CREATE TABLE
regress=> INSERT INTO table1(col1, time_of_creation) VALUES ('a', current_timestamp);
INSERT 0 1
regress=> SELECT * FROM table1 ;
time_of_creation | col1
-------------------------------+------
2012-11-08 16:23:35.645734+08 | a
(1 row)
ここまでは問題ありませんが、現在:
regress=> select * from basetemplate ;
time_of_creation
-------------------------------
2012-11-08 16:23:35.645734+08
(1 row)
これはおそらくあなたが望むものではありません。
実際には害はありません。table1
継承のため、行を挿入するオーバーヘッドはありません。ただし、後でいくつかの管理タスクを実行するのがより複雑になることがわかります。また、テーブルのパーティショニングなども複雑になります。全体として、必要がない限り、継承の使用はお勧めしません。