【问题标题】:PostgreSQL: find information about user defined typesPostgreSQL:查找有关用户定义类型的信息
【发布时间】:2011-08-08 08:12:34
【问题描述】:

关于用户定义类型的信息存储在哪里?

是否有一些表包含有关用户定义的复合类型的字段、它们的名称等信息?

【问题讨论】:

    标签: postgresql user-defined-types system-tables


    【解决方案1】:

    目录 pg_type 存储有关数据类型的信息。基本类型和枚举类型(标量类型)使用 CREATE TYPE 创建,域使用 CREATE DOMAIN 创建。

    更多关于 pg_type 的信息请访问 http://www.postgresql.org/docs/9.0/static/catalog-pg-type.html

    【讨论】:

    • 感谢您的回复。 pg_type 不存储有关构成复合类型的字段的信息。你知道,如果存在的话,是哪个表存储了这种信息?
    • 不知道是不是很了解你的问题,如果你想知道一个表所有列的信息,可以查询目录pg_attribute。(postgresql.org/docs/9.0/static/catalog-pg-attribute.html)跨度>
    • 顺便说一下,pg_type.typtype 是 b 表示基本类型,c 表示复合类型(例如,表的行类型),d 表示域,e 表示枚举类型,p 表示一种伪类型。另请参阅 typrelid 和 typbasetype
    • 这是我认为在这里被问到的一个例子(以及我是如何来到这里的)。我们有一个名为“listing_room”的复合类型,其中包含数据(例如)“名称文本、楼层整数、宽度小数、深度小数”(是的,我知道这不是有效的 SQL,但我只是在说明一点)。现在,我可以创建一个表格“列表”,其中包含“id 序列号、地址文本、master_bedroom 房间”列。因此,使用任何数据库接口(在我的例子中是 JDBC),我都可以确定“master_bedroom”的类型为“room”,但是如何查询服务器以动态确定“room”的实际结构?
    【解决方案2】:

    关于构成复合类型的字段的信息可以这样检索:

    select * from pg_attribute where attrelid =
      (select typrelid from pg_type where typname = 't_employee')
    

    其中t_employee 将是复合类型的名称。

    【讨论】:

    • 虽然@francs 的答案链接到相应的文档,但这个答案可以立即使用,甚至 5 年后!
    猜你喜欢
    • 2011-11-20
    • 1970-01-01
    • 2012-05-28
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2012-03-21
    相关资源
    最近更新 更多