PostgreSQL:查找有关用户定义类型的信息

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 年后!

以上是关于PostgreSQL:查找有关用户定义类型的信息的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL及PostGIS使用

使用 PostgreSQL 范围类型查找冲突的计划

postgresql----数组类型和函数

PostgreSQL 用户定义类型成员比较

SQL表值参数批量插入

国际新闻:PostgreSQL 14.4 发布!