是否有方法显示用户定义的postgresql枚举类型定义?

是否有方法显示用户定义的postgresql枚举类型定义?,postgresql,enums,Postgresql,Enums,假设我们定义了一个postgresql类型: CREATE TYPE my_type AS ENUM('foo', 'bar'); 有没有办法在创建后显示类型定义 我希望“\d my_type”会显示“ENUM('foo','bar')”,但它说: Did not find any relation named "my_type" pg_类型表似乎没有提供足够的信息 SELECT t.typname FROM pg_class c JOIN pg_attribute a ON c.oid =

假设我们定义了一个postgresql类型:

CREATE TYPE my_type AS ENUM('foo', 'bar');
有没有办法在创建后显示类型定义

我希望“\d my_type”会显示“ENUM('foo','bar')”,但它说:

Did not find any relation named "my_type"
pg_类型表似乎没有提供足够的信息

SELECT t.typname
FROM pg_class c JOIN pg_attribute a ON c.oid = a.attrelid JOIN pg_type t ON a.atttypid = t.oid
WHERE c.relname = 'your_type';

棘手的是,仅仅从这些视图中选择*不会在结果中得到OID。

这是\dT您想要的,但它不会作为“CREATE”语句给出。您对域使用\dD

\dT+ action.action_status
                          List of data types
 Schema |         Name         | Internal name | Size | Elements | Description 
--------+----------------------+---------------+------+----------+-------------
 action | action.action_status | action_status | 4    | pending +| 
        |                      |               |      | live    +| 
        |                      |               |      | done    +| 
        |                      |               |      | notdone  | 
(1 row)

如果您只需要全名(类型名称和架构)和所有
enum
标签的排序列表,此查询将执行以下操作:

SELECT n.nspname AS "schema", t.typname
     , string_agg(e.enumlabel, '|' ORDER BY e.enumsortorder) AS enum_labels
FROM   pg_catalog.pg_type t 
JOIN   pg_catalog.pg_namespace n ON n.oid = t.typnamespace 
JOIN   pg_catalog.pg_enum e ON t.oid = e.enumtypid  
WHERE  t.typname = 'my_enum_type'
GROUP  BY 1,2;
返回:

 schema | typname      | enum_labels
--------+--------------+-------------
 public | my_enum_type | foo|bar
string\u agg()
需要Postgres 9.0或更高版本,对于较旧版本,替换为
array\u agg()


要获取SQL
CREATE
语句,可以使用
pg_dump
并查看转储文件

或者,更实际地说,使用它为数据库中的任何对象显示反向工程SQL创建脚本。在
对象浏览器
中选择它,其创建脚本将显示在
SQL窗格
中。甚至有一个选项可以将脚本自动复制到新打开的
SQL编辑器的窗口中,您可以在该窗口中编辑和执行脚本。

检查以下内容:

select enum_range(null::my_type)

我认为这是一个简单得多的解决方案:)。

我不理解“您使用\dD作为域”的相关性。域和类型是不同的。域使用\dD,类型使用\dT。好的,我明白了。“域本质上是一种具有可选约束的数据类型(对允许的值集的限制)。”我花了一点时间才意识到我真正想要的是
\dT+my_enum
。请注意,默认情况下,您需要在
pgAdmin
中启用查看类型:文件→ 选择权→ 浏览并检查
类型
。实际上,从1.18.1版开始,您可以在文件->选项->显示中找到该选项。我喜欢这个选项,因为它简单。最高评级的作品无论如何。。。但这一个也有。:)我喜欢这个。\d语法在dbeaver或pgadmin中不起作用,但portableWorks中的纯SQL在PostgreSQL 8.3.11中起作用。如果我的表名为
users
,列名为
status
,枚举类型为
enum\u user\u status
,我应该键入什么而不是
null:my\u type
?我尝试了我能想到的所有组合,但一无所获。@exebook我迟到了,但我使用了
null::enum\u user\u status
(显然我使用了我的enum名称而不是
enum\u user\u status
)。未涉及枚举所用的表/列。