有没有办法显示用户定义的postgresql枚举类型定义?

Sté*_*ane 64 postgresql enums

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

CREATE TYPE my_type AS ENUM('foo', 'bar');
Run Code Online (Sandbox Code Playgroud)

有没有办法在创建后显示类型定义?

我希望"\ d my_type"能够显示"ENUM('foo','bar')",但它说:

Did not find any relation named "my_type"
Run Code Online (Sandbox Code Playgroud)

pg_type表似乎没有提供足够的信息.

Ada*_*11p 85

检查一下:

select enum_range(null::my_type)
Run Code Online (Sandbox Code Playgroud)

我认为这是一个更简单的解决方案:).

  • 我喜欢这一个。\d 语法在 dbeaver 或 pgadmin 中不起作用,但纯 SQL 在可移植中起作用 (2认同)

Ric*_*ton 84

它是你所追求的,但并没有将它作为"创建"声明.您对域使用\ 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)
Run Code Online (Sandbox Code Playgroud)

  • 我花了一点时间才意识到我真正想要的是`\ dT + my_enum;`. (13认同)
  • 好的我明白了."域本质上是一种带有可选约束的数据类型(对允许的值集的限制)." (4认同)
  • 域和类型是不同的东西。域使用 \dD,类型使用 \dT。 (2认同)

Erw*_*ter 13

如果您只需要全名(类型名称和架构)以及所有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;
Run Code Online (Sandbox Code Playgroud)

返回:

 schema | typname      | enum_labels
--------+--------------+-------------
 public | my_enum_type | foo|bar
Run Code Online (Sandbox Code Playgroud)

string_agg()需要Postgres 9.0或更高版本,替换array_agg()旧版本.


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

或者,实际上,使用pgAdmin为数据库中的任何对象显示反向工程SQL创建脚本.在中选择它,object browser其创建脚本显示在SQL pane.甚至可以选择将脚本复制到新打开的SQL editor自动窗口,您可以在其中编辑和执行它.

  • 请注意,您需要在默认情况下启用`pgAdmin`中的查看类型:文件→选项→浏览器并检查`类型`. (2认同)