使用复合类型创建新表

lcj*_*ury 9 postgresql database-design ddl composite-types

在 ORDBMS 数据库中,我看到可以使用复杂类型:

create type name as( ...)
Run Code Online (Sandbox Code Playgroud)

我可以在创建新表时引用这些类型,例如:

create table example (row_name ref(name))
Run Code Online (Sandbox Code Playgroud)

如何在 PostgreSQL 中实现相同的目标?

Erw*_*ter 13

您可以使用类型表

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

CREATE TABLE example OF mytype (PRIMARY KEY (some_id));
Run Code Online (Sandbox Code Playgroud)

我添加了一个 PK 约束(你没有要求)。

语法在手册中CREATE TABLE记录为第二个变体,这也进一步解释了:

OF 类型名称

创建一个类型化表,它从指定的复合类型(名称可选模式限定)中获取其结构。类型表与其类型相关;例如,如果删除类型(使用DROP TYPE ... CASCADE),则表将被删除。

创建类型表时,列的数据类型由基础复合类型决定,而不是由CREATE TABLE命令指定。但是该CREATE TABLE命令可以向表中添加默认值和约束,并且可以指定存储参数。

示例部分的末尾还有一个代码示例