在研究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。
我从未听说过这样的概念。我一直在寻找文档,但是找不到更多信息。
什么是类型表?如何创建这样的表?
答案 0 :(得分:5)
它正在根据类型创建表。根据{{3}}:
OF类型名称 创建一个带类型的表,该表从指定的组合类型(名称(可选,模式限定))获取其结构。有类型的表与其类型相关联。例如,如果删除了类型(使用DROP TYPE ... CASCADE),则会删除表。
创建类型表时,列的数据类型由基础复合类型确定,而CREATE TABLE命令未指定。但是CREATE TABLE命令可以向表添加默认值和约束,并可以指定存储参数。
基本上,当您创建the documentation(例如,使用create type
语句)时,可以使用该类型创建表。当您级联类型的更改(更改列或删除类型)时,它会影响使用该类型构建的所有表,这意味着您可以拥有许多结构相同的表。这对于日志记录,复制,ETL过程等很有帮助。
CREATE TYPE people_type AS ( age INT, name TEXT, dob DATE );
CREATE TABLE sales_staff OF people_type;
CREATE TABLE service_staff OF people_type;
ALTER TYPE people_type ADD ATTRIBUTE gender CHAR CASCADE;
更改类型后,您将能够看到两个表都受到了影响。可以通过在psql中使用\d
或查询数据库中的INFORMATION_SCHEMA.COLUMNS表来完成此操作,如上面的SQLFiddle链接中的示例所示。