web-dev-qa-db-ja.com

複合型を使用して新しいテーブルを作成する

ORDBMSデータベースでは、複合型を使用できることがわかりました。

create type name as( ...)

また、次のように、新しいテーブルを作成するときにこれらの型を参照できます。

create table example (row_name ref(name))

どうすればPostgreSQLで同じことを実現できますか?

7
lcjury

型付きテーブルを使用できます:

CREATE TYPE mytype AS (some_id int, some_col text);

CREATE TABLE example OF mytype (PRIMARY KEY (some_id));

(要求しなかった)PK制約を追加しました。

構文は、2番目のバリアント のマニュアルでCREATE TABLE としてドキュメント化されています。

OFtype_name

型付き表を作成します。これは、指定された複合型(オプションでスキーマ修飾された名前)から構造を取得します。型付きテーブルはその型に関連付けられています。たとえば、型が削除されると、テーブルが削除されます(DROP TYPE ... CASCADEを使用)。

型付き表が作成されると、列のデータ型は基礎となる複合型によって決定され、CREATE TABLEコマンドでは指定されません。ただし、CREATE TABLEコマンドは、デフォルトと制約をテーブルに追加し、ストレージパラメータを指定できます。

サンプルセクションの最後にコード例もあります。

9

(Erwinが説明しているように)特定の複合型でテーブルを作成するのか、1つの含む複合型でテーブルを作成するのかはわかりません。

後者の場合、それはほとんど同じです。

create type typename as( ...)

その後

create table example (
   row_name typename
)

通常、次のような列が多くなります。

create table example (
   id serial primary key,
   some_composite typename,
   parent_id integer not null references parenttable(id),
   .... more columns ...
)
3
Craig Ringer