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

假设我们已经定义了一个postgresqltypes:

CREATE TYPE my_type AS ENUM('foo', 'bar'); 

有什么办法来创build后显示types定义?

我期望“\ d my_type”向我展示“ENUM('foo','bar')”,但它说:

 Did not find any relation named "my_type" 

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

这是你之后,但它并没有把它作为一个“创造”的声明。 您使用\ 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) 

检查这个:

 select enum_range(null::my_type) 

我认为这是一个更简单的解决scheme:)。

如果您只想要全名(types名称和模式)和所有enum标签的sorting列表,则此查询将执行:

 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_agg()需要Postgres 9.0或更高版本,用老版本的array_agg()replace。


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

或者,更实际的是,使用pgAdmin显示数据库中任何对象的反向工程SQL创build脚本。 在object browserselect它,并在SQL pane显示其创build脚本。 甚至还可以select将脚本自动复制到SQL editor的新打开的窗口中,然后在其中进行编辑和执行。

 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'; 

棘手的部分是,简单地从这些视图中select*不会在结果中获得OID。