PostgreSQL中的类型表是什么?我怎样做这样的桌子?

时间:2018-07-14 17:16:47

标签: sql postgresql

在研究information_schema视图时,我注意到表的以下属性:

is_typed                  YES if the table is a typed table, NO if not
user_defined_type_catalog If the table is a typed table, the name of the database...
user_defined_type_schema  If the table is a typed table, the name of the schema...
user_defined_type_name    If the table is a typed table, the name of the data type...

请参见https://www.postgresql.org/docs/current/static/infoschema-tables.html

我从未听说过这样的概念。我一直在寻找文档,但是找不到更多信息。

什么是类型表?如何创建这样的表?

1 个答案:

答案 0 :(得分:5)

它正在根据类型创建表。根据{{​​3}}:

  

OF类型名称   创建一个带类型的表,该表从指定的组合类型(名称(可选,模式限定))获取其结构。有类型的表与其类型相关联。例如,如果删除了类型(使用DROP TYPE ... CASCADE),则会删除表。

     

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

基本上,当您创建the documentation(例如,使用create type语句)时,可以使用该类型创建表。当您级联类型的更改(更改列或删除类型)时,它会影响使用该类型构建的所有表,这意味着您可以拥有许多结构相同的表。这对于日志记录,复制,ETL过程等很有帮助。


创建表格(composite type

第1步:创建类型

CREATE TYPE people_type AS ( age INT, name TEXT, dob DATE );

步骤2:创建表

CREATE TABLE sales_staff   OF people_type;
CREATE TABLE service_staff OF people_type;

第3步:更改类型

ALTER TYPE people_type ADD ATTRIBUTE gender CHAR CASCADE;

更改类型后,您将能够看到两个表都受到了影响。可以通过在psql中使用\d或查询数据库中的INFORMATION_SCHEMA.COLUMNS表来完成此操作,如上面的SQLFiddle链接中的示例所示。